SlideShare a Scribd company logo
Sakai Architecture and Roadmap Charles Severance Sakai Markitecht [email_address] KYOU / sakai Boundary, Situation
It takes a village to  build a CLE…. Photo blog: www.dr-chuck.com sh
Outline Sakai Roadmap Sakai Architecture Sakai Concepts and Terminology Sakai Tools Sakai and uPortal Looking at the Beta Release Work plans starting with 1.0 Sakai Persistence Model Advanced Architecture Concepts Discussion
Sakai Goals Produce an extensible open source learning management system Complete implementation of the OKI OSIDs Produce framework and documentation so others can build tools Produce “marketplace” of tools so people can build and share…
Sakai Goals Choose a set of foundational technologies Choose a set of “blessed” APIs Provide a method to unify the graphical look and feel of tools so as to allow seamless composition of tools to build an application Build a web-based JSR-168-based implementation of the framework Build a complete set of tools and services which cover the scope of a Learning Management / Group Collaboration requirements space
Relationship to Other Efforts Sakai: A Profile + Implementation uPortal OKI IEEE Tomcat JSF IMS Sakai is a consumer of standards, and technologies to be assembled into an implementation and a profile with some Sakai-specific value add in certain areas.  As we work through development issues, we may identify new ideas/problems/extensions that we will suggest back to these groups by participating in those groups as a participant.  Even though uPortal and OKI have received funding as part of the Sakai project it does not change the basic relationship between the projects.
Sakai Roadmap
SAKAI Picture Jan 04 July 04 May 05 Michigan CHEF Framework CourseTools WorkTools Indiana Navigo Assessment Eden Workflow Oncourse MIT Stellar Stanford CourseWork Assessment OKI OSIDs uPortal SAKAI 1.0 Release Tool Portability Profile Framework Services-based Portal Refined OSIDs    & implementations SAKAI Tools Complete CMS WorkTools Assessment SAKAI 2.0 Release Tool Portability Profile Framework Services-based Portal SAKAI Tools Complete CMS Assessment Workflow Research Tools Authoring Tools Primary SAKAI Activity Architecting for JSR-168 Portlets, Refactoring “best of” features for tools Conforming tools to Tool Portability Profile Primary SAKAI Activity Refining SAKAI Framework, Tuning and conforming additional tools Intensive community building/training Activity : Ongoing implementation work at local institution… Dec 05 Activity :  Maintenance & Transition from a project to  a community "Best of" Refactoring
Sakai 2.0 Calendar Chat Assessment Standards Architecture Respec Requirements and Features Flow Rethink Rebuild IU/OnCourse Calendar Chat Assessment Standards Architecture Sakai 1.0 Calendar Chat Assessment Standards Architecture UM/CHEF Calendar Chat Assessment Standards Architecture MIT/Stellar Calendar Chat Assessment Standards Architecture Stanford/CourseWork Calendar Chat Assessment Standards Architecture
Organizational Flow (1.0) Requirements (Rob) Architecture/Developer (Glenn) Chuck Chuck SEPP (Jim/Mark) Chuck
Sakai 1.0 Contents (07/04) Framework for building new Sakai tools JavaServer Faces  Sakai GUI widgets Framework for development of Sakai APIs Sakai Service APIs: framework, common, shared, authentication, authorization Two new sample Sakai tools Legacy Service APIs from CHEF Legacy tools from CHEF (with gaps addressed) Coordinated look and feel between legacy and Sakai tools Ready to deploy as LMS (looks a lot like CHEF 1.2 in uPortal Sakai 1.1: 09/04 (additional tools, improvements, and Sakai APIs) Sakai 1.2: 11/04 (additional tools, improvements, and Sakai APIs)
Release 1.0 In a Nutshell This is a reasonable Collaborative and Learning Environment (CLE) out of the box. Legacy tools and APIs are solid Architecture issues are worked out - Sakai / OKI / JSF / Hibernate / uPortal / Dependency Injection / Which Tomcat Nugget of Sakai APIs so API work can begin in parallel
Overall Flow (2.0) Requirements Team (Rob) Framework, Integration and  Release Team (Glenn) Architecture/ Project Management Team (Chuck/Mark) Developer Teams Local Production Teams
Sakai 2.0 (2Q05) Significant replacement of legacy tools TPP Compliant, using OKI and Sakai APIs New and improved tools based on Sakai-wide requirements process Each partner institution will focus on a set of tools to develop SEPP partners will be involved in the new tool development based on ability and commitment. Hopefully - Hierarchical navigation with uPortal 3.x
Sakai Architecture
The Sakai Tool Portability Profile Framework Sakai Tool OKI 2.0 impls Sakai API Implementations OKI Plug-In Sakai API OKI API Sakai  Data Sakai GUI Widgets JSF Rendering Environment The Sakai API is based heavily on the OKI API but focused on the portability and interoperability of Sakai tools.  The Sakai API should be though of as value add on top of the OKI APIs.  The Sakai APIs encode what OKI would call “out-of-band” agreements explicitly into method calls, parameters and return values.
Sakai Application Programming Interfaces (APIs) Make tool development easier Promote data and tool portability between Sakai environments Hide some data management details Error handling Provide re-usable system and application services to tool developers
Sakai and OKI OKI has produced a series of APIs for Learning Management System Portability Enterprise Integration Language Independent Technology Independent The OKI APIs are very flexible allowing for out-of-band agreements The Sakai APIs will take the OKI APIs and focus them down to a Sakai-only context and “bind down” out-of-band agreements into methods
The Sakai API rules (draft) Include convenience methods and objects built on OKI methods (e.g. equals()) Include Java-oriented methods which directly relate to underlying OKI language-neutral equivalents (e.g. Calendar) Include Java-oriented methods which tie more directly to the Sakai framework, increasing performance at the expense of portability to non-Sakai environments. Extend beyond the OSIDs to allow explicit exposure of out of band agreements Extend beyond the OSIDs to allow for easy/simple/natural support of use-cases not directly supported by current OSID specifications Methods are evaluated carefully for what exceptions are thrown Java-based exception classes and subclasses are used for the exceptions thrown Consider using exceptions which are subclasses of RuntimeException:  A method is not required to declare in its throws clause any subclasses of RuntimeException that might be thrown during the execution of the method but not caught. Implementations of the APIs may be java beans: therefore the APIs use set/get in a bean-compatible way Methods may use/return Java-native objects/interfaces, e.g. Calendar, io.stream The term 'properties' is used for consistency with OKI, but the Java interface used for this is a Map Sakai iterators extend java.util.Iterator
package org.sakaiproject.service.common.agent; import org.sakaiproject.service.common.shared.Resource; public interface Agent extends Resource { } package org.osid.shared; public interface Agent extends java.io.Serializable { public String getDisplayName()  throws osid.shared.SharedException; public osid.shared.Id getId()  throws osid.shared.SharedException; public osid.shared.Type getType()  throws osid.shared.SharedException; PropertiesIterator getProperties()  throws osid.shared.SharedException; Properties getPropertiesByType(Type propertiesType) throws osid.shared.SharedException; TypeIterator getPropertiesTypes()  throws osid.shared.SharedException; }
package org.sakaiproject.service.common.shared; import org.sakaiproject.exception.PermissionException; import org.sakaiproject.exception.VersionException; import org.sakaiproject.service.common.id.Id; public interface Resource extends Comparable { String getDescription(); String getDisplayName(); Id getId(); Type getType(); PropertiesIterator getProperties(); Properties getPropertiesByType(Type propertiesType); TypeIterator getPropertyTypes(); // Sakai additional Methods void setDescription(String description); void setDisplayName(String displayName); void setType(Type type); String getReference(); String getUrl(); boolean allowDelete(); boolean allowUpdate(); Properties addPropertiesType(Type propertiesType); void removePropertiesType(Type propertiesType); void delete() throws PermissionException; Version getVersion(); boolean isCurrentVersion(); boolean isCurrentVersion(Version version); void update() throws VersionException, PermissionException; void updateIgnoreVersion() throws PermissionException; }
The Sakai Layered Architecture uPortal JavaServer Faces Sakai Tools Sakai Services OKI Tools Legacy Tools Legacy Services OKI Plug-ins Sakai Data Legacy Data OKI Info JetSpeed Varies
The Sakai Framework OKI TOOL Sakai Tool OKI 2.0 impls Sakai API Impls OKI Plug-In Sakai API OKI API OKI 2.0 impls OKI API Sakai Legacy Impls Leg API Legacy Tool OKI Info migration Sakai  Data Legacy Data
Simple Deployment Tool Sakai API Impls Sakai API Sakai  Data In a simple deployment, the Sakai system may just use the Sakai provided API implementations and point it at a database connection, let Sakai build the tables - and off we go.
Basic Local Customization Tool Local OKI Impl Sakai API Impls OKI Plug-In Sakai API OKI API Sakai  Data In the most common situation, local sites will want to customize a few things - perhaps AUTHN, AUTHZ, a few DR’s.  Sites will write/procure/configure OKI implementations which plug into the Sakai implementations.  The Sakai implementations are configured to “federate” between data from the plug-in and the Sakai data as desired by the site.
Drastic Local Customization Tool Sakai API Impls Sakai API PeopleSoft At some level, it would be possible to completely re-implement the entire Sakai API for the particular component (i.e. grading).  Because the Sakai APIs have no “out-of-band” agreements, the tools cannot perceive that the implementation has been changes.
Concepts and Terminology
Sakai Technology Hibernate for object persistence Sakai APIs that imitate OKI OSIDs Tools are based on APIs and servlets JavaServer Faces separate out the presentation from tool logic uPortal integrates tools at the UI level
Specific TPP Elements GUI: Java Server Faces + Sakai Widgets Framework API Best practice: Setter-style dependency injection Both tools and services are components * Cross-webapp service framework Service locator also supported No (zip, zero, nada) framework imports required
JSF Mini Tutorial Document-based layout which relates a view stored in a set of beans using a set of widgets (button, input, drop-down) and a set of action methods associated with buttons, etc. There are no URLs (munged or otherwise) Additional Sakai widgets within JSF in insure look and feel at a higher level across tools <sakai:tool_bar> <sakai:tool_bar_item action=&quot;#{AnnouncementTool.processActionListNew}&quot; value=&quot;#{msgs.annc_list_new}&quot; /> <sakai:tool_bar_item action=&quot;#{AnnouncementTool.processActionListDelete}&quot; value=&quot;#{msgs.annc_list_delete}&quot; /> …
JSF is Used to Describe the UI <sakai:view_container title=&quot;#{msgs.sample_title}&quot;> <sakai:tool_bar>  <sakai:tool_bar_item/>  </sakai:tool_bar> <sakai:instruction_message value=&quot;#{msgs.sample_one_instructions}&quot; /> <sakai:group_box  title=&quot;#{msgs.sample_one_groupbox}&quot;> <h:inputText  value=&quot;#{MyTool.userName}&quot; /> <sakai:date_input  value=&quot;#{MyTool.date}&quot; /> <sakai:button_bar> <sakai:button_bar_item action=&quot;#{MyTool.processActionDoIt} value=&quot;#{msgs.sample_one_cmd_go}&quot; /> </sakai:button_bar>
Model View Controller Mini Tutorial Domain Model Long Term Persistence Controller Orchestra conductor Retrieves  the Model (subset of Domain Model) Holds state in terms of the user interaction Decorates the Model with view specific information Selects Layout Hands layout and Decorated-Model to View Processes the returned Decorated-Model from View View Renders Decorated-Model to user using layout Handles user interaction (possibly with validation) Returned Modified-Decorated-Model to Controller
MVC Mini Tutorial Domain Model Persistence View Renders decorated model Controller Orchestrates Model Data moved between elements View Controller Domain Model Model Model Model Model
Inversion of Control Mini Tutorial Components code to interfaces, not implementations When a component needs an implementation for a particular interface, how does it find the implementation Four basic approaches (formerly known as Level 0-3 IoC) Service Locator (Turbine, Avalon) Interface Injection (Avalon) Setter Injection (Spring) Constructor Injection (Pico) http://www.martinfowler.com/articles/injection.html
Service Locator Component calls a service locator with the desired interface as a parameter Can gather dependencies dynamically  this is useful if dependency lookup is expensive This does force an explicit dependency on the framework class MovieLister...  MovieFinder finder =  (MovieFinder) ServiceLocator.getService(&quot;MovieFinder&quot;);
Interface Injection The component declares that it “implements serviceable” which triggers the framework to poke in the implementations via well-known methods (Avalon) Often this is used to inject a service locator and then that service locator is used to garner other dependencies
Setter Injection (Sakai preferred) The component simply provides bean-style setter and getter methods for the dependent interfaces it needs - framework constructs object then calls the setter for anything that is already in the framework (auto-wire) No explicit dependency on the framework at all Articulates well with all of the bean support in lots of places Not able to declare which of the setters are required for safe operation unless this is in a XML config file
Constructor Injection The component provides a number of constructors with the dependencies as parameters - the framework picks one and constructs the object will all of its needed dependencies. The object is never in a “partially ready to go” state Can express multiple acceptable dependency sets using different construtors No explicit dependencies on the framework Cannot work unless the framework is doing the constructing (I.e. no chance to “fake it” in Servlet of JSF managed objects)
IoC Summary Setter injection is the best practice for new code No explicit dependencies Leverages bean support  Can be “simulated” easily when framework is not constructing objects We will always support Service Locator
Sakai Tools
The Sakai User Interface Process Sakai Tool FacesServlet Faces-config.xml Sakai GUI Elements Faces Renderer uPortal JSF Page Client
All the components… On one slide :) JSF Servlet Render Portlet Render Tool View Beans Config Beans … Framework/Config Action Action JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
Sakai framework wakes up, reads a bunch-o-files and  initializes components JSF Servlet Render JSR-168 Render Tool View Beans Config Beans … Framework/Config Action Action JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
Sakai then pokes config data and auto-wires service implementations into beans JSF Servlet Render Tool View Beans Config Beans … Framework/Config Action Action JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
Action runs, accesses services through config beans, sets view beans, selects layout mode. JSF Servlet Render Tool View Beans Config Beans … Framework/Config Action Action JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
JSF Render takes layout, and renders the the view pulling info from the view beans… JSF Servlet Render Tool View Beans Config Beans … Framework/Config Action Action JSF consults the layout for the particular view beans to look at for their data. JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
Then we wait…  It is quiet…  Too quiet.. And then  the user pushes a button. JSF Servlet Render Tool View Beans Config Beans … Framework/Config Action Action JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
Oops..  The user entered invalid data - JSF scolds them and gives them another chance… JSF Servlet Render Tool View Beans Config Beans … Framework/Config Action Action Merde! Validity checking is optional and bypassable for on an action by action basis. JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
Le User enters valid information, JSF sets the View Beans and calls the requested action… JSF Servlet Render Tool View Beans Config Beans … Framework/Config Action Action JSF consults the layout for the name of the action method to call! JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
Action runs, accesses services through config beans, sets view beans, selects layout (again)… JSF Servlet Render Portlet Render Tool View Beans Config Beans … Framework/Config Action Action JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
Sakai and uPortal
uPortal Portlet Roadmap uPortal 2.3 Support Portlets (JSR-168) via adapter uPortal 3.0 Implement Portlet Specification (JSR-168) Support IChannel via adapter uPortal 3.0 Framework uPortal 2.3 Pluto Pluto Adapter Framework Adapter Feb 19, 2004 SAKAI Developer’s Workshop, Stanford University Portlet Portlet Portlet Portlet Chan Chan Portlet Portlet Chan Chan Chan Chan
Portal => Application Framework Portals are a framework to deploy tools (aka rectangles) and focus on how the user wants to arrange their own “rectangles” While Sakai has chosen to use a portal as a component integration technically, the goal is for the tools to work together closely and seem to really be parts of a larger “tool” Sakai has a lot of features, (services, presence, notification, etc..) which bridge the gap between portal and application framework
Sakai 1.0 and uPortal The embedded version where the entire Sakai tool set appears as a single channel much like the “SuperChannel”.  This can be installed in any standard uPortal environment. The “injected” version which uses a modified version of uPortal 2.3 with two-level navigation and configuration information coming from Sakai.  This is pretty much a stand-alone learning management system using uPortal.  The uPortal theme and structure will be altered to precisely display the hierarchical navigation needed by Sakai.
Sakai 1.0: Embedded Version (uPortal 2.3) Home Athletics Sakai CS101 EE499 EE499-Sec01 Chess Motor Fred: He will move P-K4 Joe: Nah - he did that last time Mary: It does not matter what he does - I will beat him again Watch me now mary! Send Play Help FAQ Meeting Single Channel Admin
Sakai 1.0: Injected Version (uPortal 2.3) EE499 EE499-s01 Home CS101 Chess Fred: He will move P-K4 Joe: Nah - he did that last time Mary: It does not matter what he does - I will beat him again Watch me now mary! Send Play Help FAQ Meeting Admin EE499 EE499-s01 Home CS101 Chess Fred: He will move P-K4 Joe: Nah - he did that last time Mary: It does not matter what he does - I will beat him again Watch me now mary! Send Play Help FAQ Meeting Admin
Sakai 2.0 and uPortal The integrated version where Sakai tools simply are part of the set of channels which can be added to any uPortal environment.  By placing a Sakai tool anywhere within the navigation hierarchy of uPortal, it becomes a collaborative element at that location.  This is more complex than it sounds and as such will only work within uPortal and will require some modifications to uPortal that the Sakai effort is undertaking and contributing to the uPortal project.
The Hierarchy Challenge Sakai Help EE499 Chess Motor CS101 Folders FAQ Chat Play Game Chat Chat Folders Sec01 Sec02 Chat Folders Chat Folders Access Control List Access Control List Access Control List Access Control List Portlets/Channels need to know “where” they fit for inherited access control and to know the “context” in which they operate - “I am the Chat for CS101”. There are fragment administration issues. This is not specified in the JSR-168 spec.  SuperChannel and Sakai Embedded are solutions which hide the hierarchy from the portal - but this is less than ideal because it would be nice to drop a context-sensitive “chat” tool anywhere in the portal.
Sakai 2.0: Integrated Events MyPage Athletics Courses + CS101 + EE499 + Main -  Sec01 Help Chat FAQ Meeting + Sec02 + Chess + Motor Fred: He will move P-K4 Joe: Nah - he did that last time Mary: It does not matter what he does - I will beat him again Joe: What if he pulls his goalie? Watch me now mary! Send Events MyPage Athletics Courses Fred: He will move P-K4 Joe: Nah - he did that last time Mary: It does not matter what he does - I will beat him again Joe: What if he pulls his goalie? Watch me now mary! Send EE499 -> Sec01 New Course New Section Chat Help FAQ Meeting Admin
Locking and Persistence in Sakai
The Case for Optimistic Locking This covers the “across multiple web transaction” lock issues (i.e. where locks need to last for multiple minutes) Three alternatives No locking - last write wins - no checking or notification Pessimistic locking - As user begins to edit data, a lock is taken blocking any other write access Optimistic locking - Data is versioned - it is possible to detect if the user is trying to modify out-of-date data Note: This is still an active discussion topic
The Case For Locking Imagine a situation where there is a field called “total-points” regarding a student’s overall grade. A student does two extra credit assignments, one worth 5 extra points and the other worth 10 points, and drops the first off at the instructor and the second off at the teaching assistant. The instructor brings up the “update points” screen currently showing 60 points, but before they finish, the phone rings. While the instructor is on the phone, the GSI brings up the same screen, sees 60 points, updates it to 70 points, and presses save. The instructor gets off the phone, changes the 60 to 65 on their screen and presses “save” - what happens.
The Scenario Score: 60 Instructor wants to add 5 points Screen Assistant wants to add 10 points Screen Score: 70 Score: ?? What happens here - what value ends up in the database? Time -> What does the GUI look like here? Is the assistant blocked?  Is the assistant notified in any way? Is there some feedback or notification that happens here? 60 Update 60 Update 70 Update 65 Update
What happens - Update Points In no locking, the student ends up with 65 points and no one has a clue what happened.  Both the assistant and instructor can rightfully claim that they added points.  Because the student is pre-med, the situation turns into a nasty lawsuit. In pessimistic locking, the assistant cannot even bring up the screen to update points until the instructor is done.  After 45 minutes, the GSI finally gives up and vows to get back to this later. In optimistic locking, the assistant is allowed to continue, but the instructor is notified that while they were “out” the point value was changed, and the tool shows the instructor the new point value and allows the instructor to add the 5 points properly so that the student correctly gets 75 points.
No Lock Score: 60 Instructor wants to add 5 points Screen Assistant wants to add 10 points Screen Score: 70 Score: 65 Oops - Assistant's changes lost forever Time -> 60 Update 60 Update 70 Update 65 Update
Problems with “No locking” Some tools can tolerate “no locking” Many assume no-locking is the nature of web However there are many aspects of an LMS that need to be treated as “Enterprise tools”. As the Sakai/APIs become useful outside pure LMS applications, real locking will be absolutely necessary
Pessimistic Score: 60 Instructor wants to add 5 points Screen Assistant wants to add 10 points Screen N/A Retry Score 65 Time -> Locked Once it is locked, it is not available. Score 65 Unlocked Score 65 Locked 60 Update N/A Retry 65 Update 75 Update 65 Update
Problems with Pessimistic Locking Can involve database resources - limits scalability Work well (and necessary) “within” a single web transaction Difficult to make reliable in web environment Users can “get lock” and then navigate away - unless code is very careful, lock sits around blocking access until user logs out If pessimistic locks time out (say 60 seconds), then code must deal with “lost lock” when trying to update information.
Optimistic Instructor wants to add 5 points Screen Session Assistant wants to add 10 points Screen Session 1 / 60 1 / 60 1 / 70 1 / 65 2 / 70 70 Update 2 / 75 Session and database versions match (both are version 1) so record is updated. Bad-version error sent to application Application decides how to handle error New information displayed to user  with notification that something has changed during editing. Session and database versions now match Time -> Version: 1 Score: 60 60 Update 60 Update 70 Update Version: 2 Score: 70 65 Update Version: 2 Score: 70 75 Update Version: 3 Score: 75
Advantages of Optimistic Locking Models the web and web-services environment quite naturally “ Taking a lock” is free and does not block access to resources When an entity is finally updated, code must check for and handle “invalid data” exception while updating the object in the database. Each tool and/or service can make independent choices as to whether or not to use optimistic locking and what to do when the framework indicates a problem.
Low-level DB Details Typically, a column is added to the table which contains the “last-modified” time or perhaps an automatically incrementing integer. When data is retrieved, this “version” is retrieved and kept. When the application updates the data, the in-memory “version” is compared to the in-database version and the data is only updated if the version matches. If the data has been updated, the update request fails.  The application can re-retrieve the data (getting the most recent data and version) and then perform the update based on its own business rules update tPerson  set eMail =  [email_address] , dVersion = DATE_NOW where iPersonKey = 12345 and  dVersion = Date(‘01/01/2004 14:45.0645’)
API Impacts of Optimistic Locking Option 1: Agent a = retrieveByName(“Joe”); String d = a.getDisplayName(); Retain reference to a (may not  be serializable) Put up screen to modify display name a.setDisplayName(newName); // Update, ignoring version a.updateWriteThrough(); // Update checking version try { a.update(); }  catch (out-of-date) { … } Option 2: Agent a = retrieveByName(“Joe”); String d = a.getDisplayName(); Version v = a.getVersion(); Retain reference to v (Version is  Serializable) Put up screen to modify display name // Re-retrieve Agent a = retrieveByName(“Joe”); a.setDisplayName(newName); // Update checking version try { a.update(v); }  catch (out-of-date) { … }
API Details // New Methods in Agent public interface Agent  { Version getVersion(); // Update, using the current  // version in this object void update() throws general-failure, out-of-date; // Update, using the specified  // version to check against // the database version void update(Version vers) throws general-failure, out-of-date; // Update ignoring the internal // and database version void updateWriteThrough() throws general-failure; } // Note Version is Serializable
Looking at the Beta
Beta Release - 6/21/2004 Overall install README http://cvs.sakaiproject.org/release/1.0.b1/ Now one page Includes instructions to download and install including pre-requisites Developer instructions for Eclipse and CVS Public CVS Server for the Sakai Project http://cvs.sakaiproject.org/cgi-bin/cvsweb.cgi/ Components are still being moved
The Beta Screen Shot
Sakai Beta Tools Admin: Alias Editor (chef.aliases)  Admin: Archive Tool (chef.archive)  Admin: Memory / Cache Tool  (chef.memory)  Admin: On-Line (chef.presence)  Admin: Realms Editor (chef.realms)  Admin: Sites Editor (chef.sites)  Admin: User Editor (chef.users) Announcements (chef.announcements)  Assignments (chef.assignment)  C. R. U. D. (sakai.crud)  Chat Room (chef.chat)  Discussion (chef.discussion)  Discussion (chef.threadeddiscussion)  Dissertation Checklist (chef.dissertation)  Dissertation Upload  (chef.dissertation.upload)  Drop Box (chef.dropbox) Email Archive (chef.mailbox) Help (chef.contactSupport) Membership (chef.membership)  Message Of The Day (chef.motd)  My Profile Editor (chef.singleuser)  News (chef.news)  Preferences (chef.noti.prefs)  Recent Announcements  (chef.synoptic.announcement)  Recent Chat Messages (chef.synoptic.chat)  Recent Discussion Items  (chef.synoptic.discussion)  Resources (chef.resources)  Sample (sakai.module)  Schedule (chef.schedule)  Site Browser (chef.sitebrowser)  Site Info (chef.siteinfo)  Web Content (chef.iframe)  Worksite Setup (chef.sitesetup)  WebDAV
The Sakai Framework OKI TOOL Sakai Tool OKI 2.0 impls Sakai API Impls OKI Plug-In Sakai API OKI API OKI 2.0 impls OKI API Sakai Legacy Impls Leg API Legacy Tool OKI Info migration Sakai  Data Legacy Data
What’s There in Beta Legacy tools - 30+ tools Legacy APIs/Implementations - complete Sakai tools - 2 Sakai APIs Common, shared, framework Resource, ID, Type, Agent, AUTHN Sakai API Implementation Limited OKI Implementations None
Release 1.0 (7/15) Clean up, test, tighten up Work on Sakai AUTHZ API with a basic implementation **
AUTHZ OSID MIT Roles DB Sakai AUTHZ Implementation OKI Plug-In OKI API Sakai  Data Sakai Tool Sakai API OSID MIT Registrar OKI Plug-In OKI API “ Can the current user  delete file xyz?” Users and Groups implementation from Columbia/ uPortal Existing AUTHZ implementations
Work Plan Once 1.0 is Released
Adopter/Developer To Do List Read and understand the OKI OSID documents - the Sakai API is based on these documents Begin working on OSID implementations for your enterprise integration - start with AUTHN and AUTHZ - make sure to use the SEPP to announce your plans so as not to overlap Take the Beta and install it as your test/demo system - familiarize yourself with the code layout, deployment issues, etc Get set up to build from CVS - Eclipse
Building Your Tool in 1.0 Your Tool Sakai  AUTHN Sakai Legacy Sakai  AUTHZ Sakai API  From CVS Your SAKAI API Impl Your New Sakai API Sakai GUI Widgets JSF Rendering Environment Because the Sakai API is neither fully specified nor fully implemented in 1.0 to develop with 1.0 requires some flexibility.  Legacy APIs may fill some of the gaps in the short term - but we do not want tools talking to legacy APIs.
Other Activities Participate in the SEPP Discussion Groups Architecture Tool Requirements New Tool Exploration Attend teleconferences Contact SEPP Staff when you need an answer Let people know what you are doing in the Discussion groups - don’t work in the dark - you will be surprised later
Core Team High Priorities Build out the Sakai API Build out the Sakai API implementations including support for the OKI plug-ins AUTHN and AUTHZ Change legacy AUTHN and AUTHZ into covers Write OKI 2.0 plug-ins - some adapted from Samigo OKI 1.0 work Integrate Samigo - phased approach providing light integration quickly with more detailed integration to follow.
Project Culture Consensus decision making - hopefully the right answer will prevail through open discussion The focus of the discussion in the core technical team will change over time - we don’t discuss everything all at the same time My role is to listen and integrate - I am always focused on the current “hot topic”  Board is the “court of last resort” - we all know that if we cannot reach agreement - the board can help us At the end of the day we must deliver software - we can’t talk forever - we will make pragmatic decisions to move forward toward our goals
Advanced Sakai
Sakai Framework Possibilities Web server / Browser This is what we are committed to do in 2 years Swing desktop Web Services - a few places Web Services - everywhere
Plan A - Clusters of JVM’s JSF implementations from SUN.  Linux JVM Tomcat (many webapps) Framework … JSF Servlet and JSF Portlet Tool Action JSP JSP JSP Service Tool Action JSP JSP JSP Tool Action JSP JSP JSP Service Service Service Linux JVM Tomcat (many webapps) JSF Servlet and JSF Portlet Tool Action JSP JSP JSP Service Tool Action JSP JSP JSP Tool Action JSP JSP JSP Service Service Service Framework Linux JVM Tomcat (many webapps) JSF Servlet and JSF Portlet Tool Action JSP JSP JSP Service Tool Action JSP JSP JSP Tool Action JSP JSP JSP Service Service Service Framework Linux JVM Tomcat (many webapps) JSF Servlet and JSF Portlet Tool Action JSP JSP JSP Service Tool Action JSP JSP JSP Tool Action JSP JSP JSP Service Service Service Framework
What if SUN provided a SWING JSF Render capability and we hand-build desktop versions of services or hand-build stubs which used ROMI or Web Services?  Linux or Windows JVM JSF Swing Service Service Stub Stub Desktop Framework Registry Tool Action JSF JSF JSF Tool Action JSF JSF JSF Tool Action JSF JSF JSF Linux JVM Service Linux JVM Service
Web Services and  Cross Language  Proof of Concept  Linux JVM Tomcat JSF Contianer Session Framework WS Contianer Apache PHP Script Launch preserving  session/identity // Motorola v300:  20-06-04_0827.jpg // Treo 600 Variant 1: Picture006_19Jun04.jpg // Treo 600 MMS: image000.jpg // In the short term, we parse the string and see if it  // we fake the valid motorola $parts = split(&quot;[-_]&quot;, $imagename); echo &quot;Part count:&quot; . count($parts) . &quot;\r\n&quot;; print_r($parts); if ( count($parts) == 4 && strlen($parts[0]) == 2 && strlen($parts[2]) == 2 && strlen($parts[3]) >= 8 ) { echo &quot;Motorola v300 format file:&quot; . $imagename . &quot;\r\n&quot;; $month = $parts[1]; $year = &quot;20&quot; . $parts[2]; } else { $month = date(&quot;m&quot;); $year = date(&quot;Y&quot;); $imagename = date(&quot;d-m-y_Hi&quot;) . sprintf(&quot;%03d&quot;,$i) .&quot;; } AUTHZ How do we launch non-JAVA elements passing in basic identity, session information? WSRP? Ad hoc? cWebProxy? Do we include a back-reference handle to help resolve web services? How do we secure the web-services calls?  What languages support Do we refactor services?  Do we we implement that critical subset?  Do we end up with new methods that are “yucky” but well-suited for web-services? Do we hide things in PHP behind an API with methods?  Or do we just lay down some web services code in the PHP? Tool Action JSP JSP JSP
What if we built a version of the framework that examined an interface using reflection and dynamically built a proxy, generated WSDL, and just made web service happen pretty much transparently other than declaring where services were to run in configuration… Hopefully there will be a mechanism for secure web services, or perhaps we could simply use two-way SSL certificate exchange to force transport security…  Linux JVM Tomcat (many webapps) JSF Servlet and JSF Portlet Stub Stub Framework with Web Services Linux JVM Axis Service Axis Framework … Windows .NET Service .NET Framework Tool Action JSP JSP JSP Tool Action JSP JSP JSP
What if the frameworks were highly coordinated and in addition to dynamically generating stubs and placing web services, provided standardized mechanism for moving identity securely across web services, and the frameworks could perform dependency injection automatically when one service had a dependency on a service running on another server… Hmmm.  Sounds like the Grid.  Linux JVM Tomcat (many webapps) JSF Servlet and JSF Portlet DR Stub AUTHZ Service Sakai Grid Framework Linux JVM Axis DR Service Sakai Grid Framework AUTHZ Stub Tool Action JSP JSP JSP Tool Action JSP JSP JSP
Why wait for web services? Our APIs and services will not really be mature until early 2005 - we may have to do major re-factoring as our code base grows and problems are identified Secure, identity preserving web services at a distance seem to be churning every 6 months. We are committed to deliver a full-featured high-performance product in the Java / Web Server / Browser space in two years. We don’t have time to be the “tip-of-the-spear” on tracking every single web-service technology twitch. Web services are great fun for “point solutions” but are painful as a basis for a framework right now
Why start on web services? Short term: Sakai API implementations can use Web Services hidden behind the API (collecting point solutions) Web services are changing right now WSRF - Web Services Resource Framework - Think of this as “The Grid Meets .NET” Generic Security Services Application Program Interface (GSS-API) defined in RFC 2853 and JDK 1.4.2 Service Injection means that it is “Possible” to build a Sakai Web-Services Framework without changing services code.
Summary This a journey - we are just at the beginning Thank you for your time I look forward to working with you all I also look forward to how much we will accomplish over the next year together “don’t fear the requirements…”

More Related Content

PPT
Sakai 2.0 Architecture Update 2005-06-09
PPTX
SCORM in Sakai
PDF
Oracle APEX 18.1 New Features
PDF
Oracle APEX Social Login
PPTX
Oracle apex training
PDF
APEX 4.2 New Features
PDF
20100604 unyoug apex40_bauser
PPTX
Oaug collaborate sadia_tahseen
Sakai 2.0 Architecture Update 2005-06-09
SCORM in Sakai
Oracle APEX 18.1 New Features
Oracle APEX Social Login
Oracle apex training
APEX 4.2 New Features
20100604 unyoug apex40_bauser
Oaug collaborate sadia_tahseen

What's hot (19)

PDF
2019 dev-marc sewtz-session-keynote-oracle_apex_19__neue_features_und_roadmap...
PPT
Sakai 2.9 Portal Road Map Plans
PDF
Understanding SharePoint 2013 Code Deployment Models - Apps vs Solutions - Sh...
PPTX
The SharePoint 2013 App Model
PDF
Oracle process-automation-with-rpa
PPTX
Introduction to the new SharePoint 2013 App Model
PDF
OOW09 Integration Architecture EBS R12
PPT
Oracle Application Express
PPTX
Introducing the new SharePoint 2013 app model
PPTX
Migrating Oracle Forms Using Oracle Application Express
PDF
Extend soa with api management Sangam18
DOC
SharePoint Online App Model Guidance
PPTX
Dynamic Actions, the Hard Parts
DOC
SharePoint Online App Model Guidance
PPTX
oracle ebs free web service integration tools
PPTX
Apex 42-new-features-1867076
PPTX
A-Team Mobile Persistence Accelerator Overview
PPTX
Api presentation update
PDF
Apex 4.0 @ ODTUG 2009
2019 dev-marc sewtz-session-keynote-oracle_apex_19__neue_features_und_roadmap...
Sakai 2.9 Portal Road Map Plans
Understanding SharePoint 2013 Code Deployment Models - Apps vs Solutions - Sh...
The SharePoint 2013 App Model
Oracle process-automation-with-rpa
Introduction to the new SharePoint 2013 App Model
OOW09 Integration Architecture EBS R12
Oracle Application Express
Introducing the new SharePoint 2013 app model
Migrating Oracle Forms Using Oracle Application Express
Extend soa with api management Sangam18
SharePoint Online App Model Guidance
Dynamic Actions, the Hard Parts
SharePoint Online App Model Guidance
oracle ebs free web service integration tools
Apex 42-new-features-1867076
A-Team Mobile Persistence Accelerator Overview
Api presentation update
Apex 4.0 @ ODTUG 2009
Ad

Viewers also liked (7)

PPT
IMS Basic Learning Tools Interoperability
PPTX
A Simple Lecture Recording Setup
PDF
Massively Open Online Courses, Experiences, Observations, and Trends
PPTX
10 steps to a Successful iPad Implementation in Schools
PDF
The University as a Cloud: Openness in Education
PDF
Massively Open Online Courses (MOOCs)
PPTX
Beyond MOOCs: Open Education at Scale
IMS Basic Learning Tools Interoperability
A Simple Lecture Recording Setup
Massively Open Online Courses, Experiences, Observations, and Trends
10 steps to a Successful iPad Implementation in Schools
The University as a Cloud: Openness in Education
Massively Open Online Courses (MOOCs)
Beyond MOOCs: Open Education at Scale
Ad

Similar to Sakai Overview 06-2004 (20)

PPTX
Open Social Frameworks
PPTX
API Platform Cloud Service best practice - OOW17
PDF
Api clarity webinar
PPT
Oracle AEI at Sakai Atlanta Conference, December 2006
ODP
sopac : connecting koha and drupal
PPTX
London Oracle Developer Meetup April 18
PPT
Session 5 - SOPAC: Further Separateing Front Office and Back Office Application
PPTX
Ja Sakai 09 V01
PPTX
OracleDeveloperMeetup - London 19-12-17
PPTX
Sakai 3 Boston V03
PPTX
Sakai 3 Boston
PPTX
API Design – More than just a Payload Definition
PDF
Oracle API Platform Cloud Service Best Practices & Lessons Learnt
PPTX
Service virtualization with npm modules updated
PPS
Edu0442
ODP
Sakai uPortal Integration Options
PPTX
yii framework
PDF
Sakai Technical Chinese
PDF
Sakai Technical (Chinese)
PDF
Sakai Technical
Open Social Frameworks
API Platform Cloud Service best practice - OOW17
Api clarity webinar
Oracle AEI at Sakai Atlanta Conference, December 2006
sopac : connecting koha and drupal
London Oracle Developer Meetup April 18
Session 5 - SOPAC: Further Separateing Front Office and Back Office Application
Ja Sakai 09 V01
OracleDeveloperMeetup - London 19-12-17
Sakai 3 Boston V03
Sakai 3 Boston
API Design – More than just a Payload Definition
Oracle API Platform Cloud Service Best Practices & Lessons Learnt
Service virtualization with npm modules updated
Edu0442
Sakai uPortal Integration Options
yii framework
Sakai Technical Chinese
Sakai Technical (Chinese)
Sakai Technical

More from Charles Severance (20)

PPTX
LTI Advantage: The Next Big Thing in LMS Integration
PPT
Hierarchy requirements
PPT
Sakai Hierarchy Framework Changes Overview (not implemented)
PPTX
Building the NGDLE with Tsugi (次) and Koseu(코스)
PPTX
Exploring the Next Generation Digital Learning Ecosystem
PPTX
Exploring the Next Generation Digital Learning Environment with Tsugi
PPTX
Building the Next Generation Teaching and Learning Environment with Tsugi (次)
PPTX
Building the Next Generation Teaching and Learning Environment
PPT
CloudSocial: A New Approach to Enabling Open Content for Broad Reuse
PPTX
Next Generation Teaching and Learning
PPTX
Next Generation Teaching and Learning
PPTX
The Game of MOOCs
PPTX
A View on the Future of Sakai
PPTX
The Next Generation of Teaching and Learning Tools
PPTX
Standards to Enable an Open Learning Ecosystem
PPTX
Updated Version: Tsugi Overview
PPTX
Standards Update: Apereo 2015
PPTX
Apereo 2015: The State of Sakai
PPTX
The Trials and Tribulations of Predicting the Future of Educational Technology
PPTX
MOOCs – The Future Is Getting Clearer
LTI Advantage: The Next Big Thing in LMS Integration
Hierarchy requirements
Sakai Hierarchy Framework Changes Overview (not implemented)
Building the NGDLE with Tsugi (次) and Koseu(코스)
Exploring the Next Generation Digital Learning Ecosystem
Exploring the Next Generation Digital Learning Environment with Tsugi
Building the Next Generation Teaching and Learning Environment with Tsugi (次)
Building the Next Generation Teaching and Learning Environment
CloudSocial: A New Approach to Enabling Open Content for Broad Reuse
Next Generation Teaching and Learning
Next Generation Teaching and Learning
The Game of MOOCs
A View on the Future of Sakai
The Next Generation of Teaching and Learning Tools
Standards to Enable an Open Learning Ecosystem
Updated Version: Tsugi Overview
Standards Update: Apereo 2015
Apereo 2015: The State of Sakai
The Trials and Tribulations of Predicting the Future of Educational Technology
MOOCs – The Future Is Getting Clearer

Sakai Overview 06-2004

  • 1. Sakai Architecture and Roadmap Charles Severance Sakai Markitecht [email_address] KYOU / sakai Boundary, Situation
  • 2. It takes a village to build a CLE…. Photo blog: www.dr-chuck.com sh
  • 3. Outline Sakai Roadmap Sakai Architecture Sakai Concepts and Terminology Sakai Tools Sakai and uPortal Looking at the Beta Release Work plans starting with 1.0 Sakai Persistence Model Advanced Architecture Concepts Discussion
  • 4. Sakai Goals Produce an extensible open source learning management system Complete implementation of the OKI OSIDs Produce framework and documentation so others can build tools Produce “marketplace” of tools so people can build and share…
  • 5. Sakai Goals Choose a set of foundational technologies Choose a set of “blessed” APIs Provide a method to unify the graphical look and feel of tools so as to allow seamless composition of tools to build an application Build a web-based JSR-168-based implementation of the framework Build a complete set of tools and services which cover the scope of a Learning Management / Group Collaboration requirements space
  • 6. Relationship to Other Efforts Sakai: A Profile + Implementation uPortal OKI IEEE Tomcat JSF IMS Sakai is a consumer of standards, and technologies to be assembled into an implementation and a profile with some Sakai-specific value add in certain areas. As we work through development issues, we may identify new ideas/problems/extensions that we will suggest back to these groups by participating in those groups as a participant. Even though uPortal and OKI have received funding as part of the Sakai project it does not change the basic relationship between the projects.
  • 8. SAKAI Picture Jan 04 July 04 May 05 Michigan CHEF Framework CourseTools WorkTools Indiana Navigo Assessment Eden Workflow Oncourse MIT Stellar Stanford CourseWork Assessment OKI OSIDs uPortal SAKAI 1.0 Release Tool Portability Profile Framework Services-based Portal Refined OSIDs & implementations SAKAI Tools Complete CMS WorkTools Assessment SAKAI 2.0 Release Tool Portability Profile Framework Services-based Portal SAKAI Tools Complete CMS Assessment Workflow Research Tools Authoring Tools Primary SAKAI Activity Architecting for JSR-168 Portlets, Refactoring “best of” features for tools Conforming tools to Tool Portability Profile Primary SAKAI Activity Refining SAKAI Framework, Tuning and conforming additional tools Intensive community building/training Activity : Ongoing implementation work at local institution… Dec 05 Activity : Maintenance & Transition from a project to a community &quot;Best of&quot; Refactoring
  • 9. Sakai 2.0 Calendar Chat Assessment Standards Architecture Respec Requirements and Features Flow Rethink Rebuild IU/OnCourse Calendar Chat Assessment Standards Architecture Sakai 1.0 Calendar Chat Assessment Standards Architecture UM/CHEF Calendar Chat Assessment Standards Architecture MIT/Stellar Calendar Chat Assessment Standards Architecture Stanford/CourseWork Calendar Chat Assessment Standards Architecture
  • 10. Organizational Flow (1.0) Requirements (Rob) Architecture/Developer (Glenn) Chuck Chuck SEPP (Jim/Mark) Chuck
  • 11. Sakai 1.0 Contents (07/04) Framework for building new Sakai tools JavaServer Faces Sakai GUI widgets Framework for development of Sakai APIs Sakai Service APIs: framework, common, shared, authentication, authorization Two new sample Sakai tools Legacy Service APIs from CHEF Legacy tools from CHEF (with gaps addressed) Coordinated look and feel between legacy and Sakai tools Ready to deploy as LMS (looks a lot like CHEF 1.2 in uPortal Sakai 1.1: 09/04 (additional tools, improvements, and Sakai APIs) Sakai 1.2: 11/04 (additional tools, improvements, and Sakai APIs)
  • 12. Release 1.0 In a Nutshell This is a reasonable Collaborative and Learning Environment (CLE) out of the box. Legacy tools and APIs are solid Architecture issues are worked out - Sakai / OKI / JSF / Hibernate / uPortal / Dependency Injection / Which Tomcat Nugget of Sakai APIs so API work can begin in parallel
  • 13. Overall Flow (2.0) Requirements Team (Rob) Framework, Integration and Release Team (Glenn) Architecture/ Project Management Team (Chuck/Mark) Developer Teams Local Production Teams
  • 14. Sakai 2.0 (2Q05) Significant replacement of legacy tools TPP Compliant, using OKI and Sakai APIs New and improved tools based on Sakai-wide requirements process Each partner institution will focus on a set of tools to develop SEPP partners will be involved in the new tool development based on ability and commitment. Hopefully - Hierarchical navigation with uPortal 3.x
  • 16. The Sakai Tool Portability Profile Framework Sakai Tool OKI 2.0 impls Sakai API Implementations OKI Plug-In Sakai API OKI API Sakai Data Sakai GUI Widgets JSF Rendering Environment The Sakai API is based heavily on the OKI API but focused on the portability and interoperability of Sakai tools. The Sakai API should be though of as value add on top of the OKI APIs. The Sakai APIs encode what OKI would call “out-of-band” agreements explicitly into method calls, parameters and return values.
  • 17. Sakai Application Programming Interfaces (APIs) Make tool development easier Promote data and tool portability between Sakai environments Hide some data management details Error handling Provide re-usable system and application services to tool developers
  • 18. Sakai and OKI OKI has produced a series of APIs for Learning Management System Portability Enterprise Integration Language Independent Technology Independent The OKI APIs are very flexible allowing for out-of-band agreements The Sakai APIs will take the OKI APIs and focus them down to a Sakai-only context and “bind down” out-of-band agreements into methods
  • 19. The Sakai API rules (draft) Include convenience methods and objects built on OKI methods (e.g. equals()) Include Java-oriented methods which directly relate to underlying OKI language-neutral equivalents (e.g. Calendar) Include Java-oriented methods which tie more directly to the Sakai framework, increasing performance at the expense of portability to non-Sakai environments. Extend beyond the OSIDs to allow explicit exposure of out of band agreements Extend beyond the OSIDs to allow for easy/simple/natural support of use-cases not directly supported by current OSID specifications Methods are evaluated carefully for what exceptions are thrown Java-based exception classes and subclasses are used for the exceptions thrown Consider using exceptions which are subclasses of RuntimeException: A method is not required to declare in its throws clause any subclasses of RuntimeException that might be thrown during the execution of the method but not caught. Implementations of the APIs may be java beans: therefore the APIs use set/get in a bean-compatible way Methods may use/return Java-native objects/interfaces, e.g. Calendar, io.stream The term 'properties' is used for consistency with OKI, but the Java interface used for this is a Map Sakai iterators extend java.util.Iterator
  • 20. package org.sakaiproject.service.common.agent; import org.sakaiproject.service.common.shared.Resource; public interface Agent extends Resource { } package org.osid.shared; public interface Agent extends java.io.Serializable { public String getDisplayName() throws osid.shared.SharedException; public osid.shared.Id getId() throws osid.shared.SharedException; public osid.shared.Type getType() throws osid.shared.SharedException; PropertiesIterator getProperties() throws osid.shared.SharedException; Properties getPropertiesByType(Type propertiesType) throws osid.shared.SharedException; TypeIterator getPropertiesTypes() throws osid.shared.SharedException; }
  • 21. package org.sakaiproject.service.common.shared; import org.sakaiproject.exception.PermissionException; import org.sakaiproject.exception.VersionException; import org.sakaiproject.service.common.id.Id; public interface Resource extends Comparable { String getDescription(); String getDisplayName(); Id getId(); Type getType(); PropertiesIterator getProperties(); Properties getPropertiesByType(Type propertiesType); TypeIterator getPropertyTypes(); // Sakai additional Methods void setDescription(String description); void setDisplayName(String displayName); void setType(Type type); String getReference(); String getUrl(); boolean allowDelete(); boolean allowUpdate(); Properties addPropertiesType(Type propertiesType); void removePropertiesType(Type propertiesType); void delete() throws PermissionException; Version getVersion(); boolean isCurrentVersion(); boolean isCurrentVersion(Version version); void update() throws VersionException, PermissionException; void updateIgnoreVersion() throws PermissionException; }
  • 22. The Sakai Layered Architecture uPortal JavaServer Faces Sakai Tools Sakai Services OKI Tools Legacy Tools Legacy Services OKI Plug-ins Sakai Data Legacy Data OKI Info JetSpeed Varies
  • 23. The Sakai Framework OKI TOOL Sakai Tool OKI 2.0 impls Sakai API Impls OKI Plug-In Sakai API OKI API OKI 2.0 impls OKI API Sakai Legacy Impls Leg API Legacy Tool OKI Info migration Sakai Data Legacy Data
  • 24. Simple Deployment Tool Sakai API Impls Sakai API Sakai Data In a simple deployment, the Sakai system may just use the Sakai provided API implementations and point it at a database connection, let Sakai build the tables - and off we go.
  • 25. Basic Local Customization Tool Local OKI Impl Sakai API Impls OKI Plug-In Sakai API OKI API Sakai Data In the most common situation, local sites will want to customize a few things - perhaps AUTHN, AUTHZ, a few DR’s. Sites will write/procure/configure OKI implementations which plug into the Sakai implementations. The Sakai implementations are configured to “federate” between data from the plug-in and the Sakai data as desired by the site.
  • 26. Drastic Local Customization Tool Sakai API Impls Sakai API PeopleSoft At some level, it would be possible to completely re-implement the entire Sakai API for the particular component (i.e. grading). Because the Sakai APIs have no “out-of-band” agreements, the tools cannot perceive that the implementation has been changes.
  • 28. Sakai Technology Hibernate for object persistence Sakai APIs that imitate OKI OSIDs Tools are based on APIs and servlets JavaServer Faces separate out the presentation from tool logic uPortal integrates tools at the UI level
  • 29. Specific TPP Elements GUI: Java Server Faces + Sakai Widgets Framework API Best practice: Setter-style dependency injection Both tools and services are components * Cross-webapp service framework Service locator also supported No (zip, zero, nada) framework imports required
  • 30. JSF Mini Tutorial Document-based layout which relates a view stored in a set of beans using a set of widgets (button, input, drop-down) and a set of action methods associated with buttons, etc. There are no URLs (munged or otherwise) Additional Sakai widgets within JSF in insure look and feel at a higher level across tools <sakai:tool_bar> <sakai:tool_bar_item action=&quot;#{AnnouncementTool.processActionListNew}&quot; value=&quot;#{msgs.annc_list_new}&quot; /> <sakai:tool_bar_item action=&quot;#{AnnouncementTool.processActionListDelete}&quot; value=&quot;#{msgs.annc_list_delete}&quot; /> …
  • 31. JSF is Used to Describe the UI <sakai:view_container title=&quot;#{msgs.sample_title}&quot;> <sakai:tool_bar> <sakai:tool_bar_item/> </sakai:tool_bar> <sakai:instruction_message value=&quot;#{msgs.sample_one_instructions}&quot; /> <sakai:group_box title=&quot;#{msgs.sample_one_groupbox}&quot;> <h:inputText value=&quot;#{MyTool.userName}&quot; /> <sakai:date_input value=&quot;#{MyTool.date}&quot; /> <sakai:button_bar> <sakai:button_bar_item action=&quot;#{MyTool.processActionDoIt} value=&quot;#{msgs.sample_one_cmd_go}&quot; /> </sakai:button_bar>
  • 32. Model View Controller Mini Tutorial Domain Model Long Term Persistence Controller Orchestra conductor Retrieves the Model (subset of Domain Model) Holds state in terms of the user interaction Decorates the Model with view specific information Selects Layout Hands layout and Decorated-Model to View Processes the returned Decorated-Model from View View Renders Decorated-Model to user using layout Handles user interaction (possibly with validation) Returned Modified-Decorated-Model to Controller
  • 33. MVC Mini Tutorial Domain Model Persistence View Renders decorated model Controller Orchestrates Model Data moved between elements View Controller Domain Model Model Model Model Model
  • 34. Inversion of Control Mini Tutorial Components code to interfaces, not implementations When a component needs an implementation for a particular interface, how does it find the implementation Four basic approaches (formerly known as Level 0-3 IoC) Service Locator (Turbine, Avalon) Interface Injection (Avalon) Setter Injection (Spring) Constructor Injection (Pico) http://www.martinfowler.com/articles/injection.html
  • 35. Service Locator Component calls a service locator with the desired interface as a parameter Can gather dependencies dynamically this is useful if dependency lookup is expensive This does force an explicit dependency on the framework class MovieLister... MovieFinder finder = (MovieFinder) ServiceLocator.getService(&quot;MovieFinder&quot;);
  • 36. Interface Injection The component declares that it “implements serviceable” which triggers the framework to poke in the implementations via well-known methods (Avalon) Often this is used to inject a service locator and then that service locator is used to garner other dependencies
  • 37. Setter Injection (Sakai preferred) The component simply provides bean-style setter and getter methods for the dependent interfaces it needs - framework constructs object then calls the setter for anything that is already in the framework (auto-wire) No explicit dependency on the framework at all Articulates well with all of the bean support in lots of places Not able to declare which of the setters are required for safe operation unless this is in a XML config file
  • 38. Constructor Injection The component provides a number of constructors with the dependencies as parameters - the framework picks one and constructs the object will all of its needed dependencies. The object is never in a “partially ready to go” state Can express multiple acceptable dependency sets using different construtors No explicit dependencies on the framework Cannot work unless the framework is doing the constructing (I.e. no chance to “fake it” in Servlet of JSF managed objects)
  • 39. IoC Summary Setter injection is the best practice for new code No explicit dependencies Leverages bean support Can be “simulated” easily when framework is not constructing objects We will always support Service Locator
  • 41. The Sakai User Interface Process Sakai Tool FacesServlet Faces-config.xml Sakai GUI Elements Faces Renderer uPortal JSF Page Client
  • 42. All the components… On one slide :) JSF Servlet Render Portlet Render Tool View Beans Config Beans … Framework/Config Action Action JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
  • 43. Sakai framework wakes up, reads a bunch-o-files and initializes components JSF Servlet Render JSR-168 Render Tool View Beans Config Beans … Framework/Config Action Action JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
  • 44. Sakai then pokes config data and auto-wires service implementations into beans JSF Servlet Render Tool View Beans Config Beans … Framework/Config Action Action JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
  • 45. Action runs, accesses services through config beans, sets view beans, selects layout mode. JSF Servlet Render Tool View Beans Config Beans … Framework/Config Action Action JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
  • 46. JSF Render takes layout, and renders the the view pulling info from the view beans… JSF Servlet Render Tool View Beans Config Beans … Framework/Config Action Action JSF consults the layout for the particular view beans to look at for their data. JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
  • 47. Then we wait… It is quiet… Too quiet.. And then the user pushes a button. JSF Servlet Render Tool View Beans Config Beans … Framework/Config Action Action JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
  • 48. Oops.. The user entered invalid data - JSF scolds them and gives them another chance… JSF Servlet Render Tool View Beans Config Beans … Framework/Config Action Action Merde! Validity checking is optional and bypassable for on an action by action basis. JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
  • 49. Le User enters valid information, JSF sets the View Beans and calls the requested action… JSF Servlet Render Tool View Beans Config Beans … Framework/Config Action Action JSF consults the layout for the name of the action method to call! JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
  • 50. Action runs, accesses services through config beans, sets view beans, selects layout (again)… JSF Servlet Render Portlet Render Tool View Beans Config Beans … Framework/Config Action Action JSP Layout <sakai:toolbar> < … JSP Layout <sakai:toolbar> < … Service Config Beans Method Method Service Config Beans Method Method
  • 52. uPortal Portlet Roadmap uPortal 2.3 Support Portlets (JSR-168) via adapter uPortal 3.0 Implement Portlet Specification (JSR-168) Support IChannel via adapter uPortal 3.0 Framework uPortal 2.3 Pluto Pluto Adapter Framework Adapter Feb 19, 2004 SAKAI Developer’s Workshop, Stanford University Portlet Portlet Portlet Portlet Chan Chan Portlet Portlet Chan Chan Chan Chan
  • 53. Portal => Application Framework Portals are a framework to deploy tools (aka rectangles) and focus on how the user wants to arrange their own “rectangles” While Sakai has chosen to use a portal as a component integration technically, the goal is for the tools to work together closely and seem to really be parts of a larger “tool” Sakai has a lot of features, (services, presence, notification, etc..) which bridge the gap between portal and application framework
  • 54. Sakai 1.0 and uPortal The embedded version where the entire Sakai tool set appears as a single channel much like the “SuperChannel”. This can be installed in any standard uPortal environment. The “injected” version which uses a modified version of uPortal 2.3 with two-level navigation and configuration information coming from Sakai. This is pretty much a stand-alone learning management system using uPortal. The uPortal theme and structure will be altered to precisely display the hierarchical navigation needed by Sakai.
  • 55. Sakai 1.0: Embedded Version (uPortal 2.3) Home Athletics Sakai CS101 EE499 EE499-Sec01 Chess Motor Fred: He will move P-K4 Joe: Nah - he did that last time Mary: It does not matter what he does - I will beat him again Watch me now mary! Send Play Help FAQ Meeting Single Channel Admin
  • 56. Sakai 1.0: Injected Version (uPortal 2.3) EE499 EE499-s01 Home CS101 Chess Fred: He will move P-K4 Joe: Nah - he did that last time Mary: It does not matter what he does - I will beat him again Watch me now mary! Send Play Help FAQ Meeting Admin EE499 EE499-s01 Home CS101 Chess Fred: He will move P-K4 Joe: Nah - he did that last time Mary: It does not matter what he does - I will beat him again Watch me now mary! Send Play Help FAQ Meeting Admin
  • 57. Sakai 2.0 and uPortal The integrated version where Sakai tools simply are part of the set of channels which can be added to any uPortal environment. By placing a Sakai tool anywhere within the navigation hierarchy of uPortal, it becomes a collaborative element at that location. This is more complex than it sounds and as such will only work within uPortal and will require some modifications to uPortal that the Sakai effort is undertaking and contributing to the uPortal project.
  • 58. The Hierarchy Challenge Sakai Help EE499 Chess Motor CS101 Folders FAQ Chat Play Game Chat Chat Folders Sec01 Sec02 Chat Folders Chat Folders Access Control List Access Control List Access Control List Access Control List Portlets/Channels need to know “where” they fit for inherited access control and to know the “context” in which they operate - “I am the Chat for CS101”. There are fragment administration issues. This is not specified in the JSR-168 spec. SuperChannel and Sakai Embedded are solutions which hide the hierarchy from the portal - but this is less than ideal because it would be nice to drop a context-sensitive “chat” tool anywhere in the portal.
  • 59. Sakai 2.0: Integrated Events MyPage Athletics Courses + CS101 + EE499 + Main - Sec01 Help Chat FAQ Meeting + Sec02 + Chess + Motor Fred: He will move P-K4 Joe: Nah - he did that last time Mary: It does not matter what he does - I will beat him again Joe: What if he pulls his goalie? Watch me now mary! Send Events MyPage Athletics Courses Fred: He will move P-K4 Joe: Nah - he did that last time Mary: It does not matter what he does - I will beat him again Joe: What if he pulls his goalie? Watch me now mary! Send EE499 -> Sec01 New Course New Section Chat Help FAQ Meeting Admin
  • 61. The Case for Optimistic Locking This covers the “across multiple web transaction” lock issues (i.e. where locks need to last for multiple minutes) Three alternatives No locking - last write wins - no checking or notification Pessimistic locking - As user begins to edit data, a lock is taken blocking any other write access Optimistic locking - Data is versioned - it is possible to detect if the user is trying to modify out-of-date data Note: This is still an active discussion topic
  • 62. The Case For Locking Imagine a situation where there is a field called “total-points” regarding a student’s overall grade. A student does two extra credit assignments, one worth 5 extra points and the other worth 10 points, and drops the first off at the instructor and the second off at the teaching assistant. The instructor brings up the “update points” screen currently showing 60 points, but before they finish, the phone rings. While the instructor is on the phone, the GSI brings up the same screen, sees 60 points, updates it to 70 points, and presses save. The instructor gets off the phone, changes the 60 to 65 on their screen and presses “save” - what happens.
  • 63. The Scenario Score: 60 Instructor wants to add 5 points Screen Assistant wants to add 10 points Screen Score: 70 Score: ?? What happens here - what value ends up in the database? Time -> What does the GUI look like here? Is the assistant blocked? Is the assistant notified in any way? Is there some feedback or notification that happens here? 60 Update 60 Update 70 Update 65 Update
  • 64. What happens - Update Points In no locking, the student ends up with 65 points and no one has a clue what happened. Both the assistant and instructor can rightfully claim that they added points. Because the student is pre-med, the situation turns into a nasty lawsuit. In pessimistic locking, the assistant cannot even bring up the screen to update points until the instructor is done. After 45 minutes, the GSI finally gives up and vows to get back to this later. In optimistic locking, the assistant is allowed to continue, but the instructor is notified that while they were “out” the point value was changed, and the tool shows the instructor the new point value and allows the instructor to add the 5 points properly so that the student correctly gets 75 points.
  • 65. No Lock Score: 60 Instructor wants to add 5 points Screen Assistant wants to add 10 points Screen Score: 70 Score: 65 Oops - Assistant's changes lost forever Time -> 60 Update 60 Update 70 Update 65 Update
  • 66. Problems with “No locking” Some tools can tolerate “no locking” Many assume no-locking is the nature of web However there are many aspects of an LMS that need to be treated as “Enterprise tools”. As the Sakai/APIs become useful outside pure LMS applications, real locking will be absolutely necessary
  • 67. Pessimistic Score: 60 Instructor wants to add 5 points Screen Assistant wants to add 10 points Screen N/A Retry Score 65 Time -> Locked Once it is locked, it is not available. Score 65 Unlocked Score 65 Locked 60 Update N/A Retry 65 Update 75 Update 65 Update
  • 68. Problems with Pessimistic Locking Can involve database resources - limits scalability Work well (and necessary) “within” a single web transaction Difficult to make reliable in web environment Users can “get lock” and then navigate away - unless code is very careful, lock sits around blocking access until user logs out If pessimistic locks time out (say 60 seconds), then code must deal with “lost lock” when trying to update information.
  • 69. Optimistic Instructor wants to add 5 points Screen Session Assistant wants to add 10 points Screen Session 1 / 60 1 / 60 1 / 70 1 / 65 2 / 70 70 Update 2 / 75 Session and database versions match (both are version 1) so record is updated. Bad-version error sent to application Application decides how to handle error New information displayed to user with notification that something has changed during editing. Session and database versions now match Time -> Version: 1 Score: 60 60 Update 60 Update 70 Update Version: 2 Score: 70 65 Update Version: 2 Score: 70 75 Update Version: 3 Score: 75
  • 70. Advantages of Optimistic Locking Models the web and web-services environment quite naturally “ Taking a lock” is free and does not block access to resources When an entity is finally updated, code must check for and handle “invalid data” exception while updating the object in the database. Each tool and/or service can make independent choices as to whether or not to use optimistic locking and what to do when the framework indicates a problem.
  • 71. Low-level DB Details Typically, a column is added to the table which contains the “last-modified” time or perhaps an automatically incrementing integer. When data is retrieved, this “version” is retrieved and kept. When the application updates the data, the in-memory “version” is compared to the in-database version and the data is only updated if the version matches. If the data has been updated, the update request fails. The application can re-retrieve the data (getting the most recent data and version) and then perform the update based on its own business rules update tPerson set eMail = [email_address] , dVersion = DATE_NOW where iPersonKey = 12345 and dVersion = Date(‘01/01/2004 14:45.0645’)
  • 72. API Impacts of Optimistic Locking Option 1: Agent a = retrieveByName(“Joe”); String d = a.getDisplayName(); Retain reference to a (may not be serializable) Put up screen to modify display name a.setDisplayName(newName); // Update, ignoring version a.updateWriteThrough(); // Update checking version try { a.update(); } catch (out-of-date) { … } Option 2: Agent a = retrieveByName(“Joe”); String d = a.getDisplayName(); Version v = a.getVersion(); Retain reference to v (Version is Serializable) Put up screen to modify display name // Re-retrieve Agent a = retrieveByName(“Joe”); a.setDisplayName(newName); // Update checking version try { a.update(v); } catch (out-of-date) { … }
  • 73. API Details // New Methods in Agent public interface Agent { Version getVersion(); // Update, using the current // version in this object void update() throws general-failure, out-of-date; // Update, using the specified // version to check against // the database version void update(Version vers) throws general-failure, out-of-date; // Update ignoring the internal // and database version void updateWriteThrough() throws general-failure; } // Note Version is Serializable
  • 75. Beta Release - 6/21/2004 Overall install README http://cvs.sakaiproject.org/release/1.0.b1/ Now one page Includes instructions to download and install including pre-requisites Developer instructions for Eclipse and CVS Public CVS Server for the Sakai Project http://cvs.sakaiproject.org/cgi-bin/cvsweb.cgi/ Components are still being moved
  • 77. Sakai Beta Tools Admin: Alias Editor (chef.aliases) Admin: Archive Tool (chef.archive) Admin: Memory / Cache Tool (chef.memory) Admin: On-Line (chef.presence) Admin: Realms Editor (chef.realms) Admin: Sites Editor (chef.sites) Admin: User Editor (chef.users) Announcements (chef.announcements) Assignments (chef.assignment) C. R. U. D. (sakai.crud) Chat Room (chef.chat) Discussion (chef.discussion) Discussion (chef.threadeddiscussion) Dissertation Checklist (chef.dissertation) Dissertation Upload (chef.dissertation.upload) Drop Box (chef.dropbox) Email Archive (chef.mailbox) Help (chef.contactSupport) Membership (chef.membership) Message Of The Day (chef.motd) My Profile Editor (chef.singleuser) News (chef.news) Preferences (chef.noti.prefs) Recent Announcements (chef.synoptic.announcement) Recent Chat Messages (chef.synoptic.chat) Recent Discussion Items (chef.synoptic.discussion) Resources (chef.resources) Sample (sakai.module) Schedule (chef.schedule) Site Browser (chef.sitebrowser) Site Info (chef.siteinfo) Web Content (chef.iframe) Worksite Setup (chef.sitesetup) WebDAV
  • 78. The Sakai Framework OKI TOOL Sakai Tool OKI 2.0 impls Sakai API Impls OKI Plug-In Sakai API OKI API OKI 2.0 impls OKI API Sakai Legacy Impls Leg API Legacy Tool OKI Info migration Sakai Data Legacy Data
  • 79. What’s There in Beta Legacy tools - 30+ tools Legacy APIs/Implementations - complete Sakai tools - 2 Sakai APIs Common, shared, framework Resource, ID, Type, Agent, AUTHN Sakai API Implementation Limited OKI Implementations None
  • 80. Release 1.0 (7/15) Clean up, test, tighten up Work on Sakai AUTHZ API with a basic implementation **
  • 81. AUTHZ OSID MIT Roles DB Sakai AUTHZ Implementation OKI Plug-In OKI API Sakai Data Sakai Tool Sakai API OSID MIT Registrar OKI Plug-In OKI API “ Can the current user delete file xyz?” Users and Groups implementation from Columbia/ uPortal Existing AUTHZ implementations
  • 82. Work Plan Once 1.0 is Released
  • 83. Adopter/Developer To Do List Read and understand the OKI OSID documents - the Sakai API is based on these documents Begin working on OSID implementations for your enterprise integration - start with AUTHN and AUTHZ - make sure to use the SEPP to announce your plans so as not to overlap Take the Beta and install it as your test/demo system - familiarize yourself with the code layout, deployment issues, etc Get set up to build from CVS - Eclipse
  • 84. Building Your Tool in 1.0 Your Tool Sakai AUTHN Sakai Legacy Sakai AUTHZ Sakai API From CVS Your SAKAI API Impl Your New Sakai API Sakai GUI Widgets JSF Rendering Environment Because the Sakai API is neither fully specified nor fully implemented in 1.0 to develop with 1.0 requires some flexibility. Legacy APIs may fill some of the gaps in the short term - but we do not want tools talking to legacy APIs.
  • 85. Other Activities Participate in the SEPP Discussion Groups Architecture Tool Requirements New Tool Exploration Attend teleconferences Contact SEPP Staff when you need an answer Let people know what you are doing in the Discussion groups - don’t work in the dark - you will be surprised later
  • 86. Core Team High Priorities Build out the Sakai API Build out the Sakai API implementations including support for the OKI plug-ins AUTHN and AUTHZ Change legacy AUTHN and AUTHZ into covers Write OKI 2.0 plug-ins - some adapted from Samigo OKI 1.0 work Integrate Samigo - phased approach providing light integration quickly with more detailed integration to follow.
  • 87. Project Culture Consensus decision making - hopefully the right answer will prevail through open discussion The focus of the discussion in the core technical team will change over time - we don’t discuss everything all at the same time My role is to listen and integrate - I am always focused on the current “hot topic” Board is the “court of last resort” - we all know that if we cannot reach agreement - the board can help us At the end of the day we must deliver software - we can’t talk forever - we will make pragmatic decisions to move forward toward our goals
  • 89. Sakai Framework Possibilities Web server / Browser This is what we are committed to do in 2 years Swing desktop Web Services - a few places Web Services - everywhere
  • 90. Plan A - Clusters of JVM’s JSF implementations from SUN. Linux JVM Tomcat (many webapps) Framework … JSF Servlet and JSF Portlet Tool Action JSP JSP JSP Service Tool Action JSP JSP JSP Tool Action JSP JSP JSP Service Service Service Linux JVM Tomcat (many webapps) JSF Servlet and JSF Portlet Tool Action JSP JSP JSP Service Tool Action JSP JSP JSP Tool Action JSP JSP JSP Service Service Service Framework Linux JVM Tomcat (many webapps) JSF Servlet and JSF Portlet Tool Action JSP JSP JSP Service Tool Action JSP JSP JSP Tool Action JSP JSP JSP Service Service Service Framework Linux JVM Tomcat (many webapps) JSF Servlet and JSF Portlet Tool Action JSP JSP JSP Service Tool Action JSP JSP JSP Tool Action JSP JSP JSP Service Service Service Framework
  • 91. What if SUN provided a SWING JSF Render capability and we hand-build desktop versions of services or hand-build stubs which used ROMI or Web Services? Linux or Windows JVM JSF Swing Service Service Stub Stub Desktop Framework Registry Tool Action JSF JSF JSF Tool Action JSF JSF JSF Tool Action JSF JSF JSF Linux JVM Service Linux JVM Service
  • 92. Web Services and Cross Language Proof of Concept Linux JVM Tomcat JSF Contianer Session Framework WS Contianer Apache PHP Script Launch preserving session/identity // Motorola v300: 20-06-04_0827.jpg // Treo 600 Variant 1: Picture006_19Jun04.jpg // Treo 600 MMS: image000.jpg // In the short term, we parse the string and see if it // we fake the valid motorola $parts = split(&quot;[-_]&quot;, $imagename); echo &quot;Part count:&quot; . count($parts) . &quot;\r\n&quot;; print_r($parts); if ( count($parts) == 4 && strlen($parts[0]) == 2 && strlen($parts[2]) == 2 && strlen($parts[3]) >= 8 ) { echo &quot;Motorola v300 format file:&quot; . $imagename . &quot;\r\n&quot;; $month = $parts[1]; $year = &quot;20&quot; . $parts[2]; } else { $month = date(&quot;m&quot;); $year = date(&quot;Y&quot;); $imagename = date(&quot;d-m-y_Hi&quot;) . sprintf(&quot;%03d&quot;,$i) .&quot;; } AUTHZ How do we launch non-JAVA elements passing in basic identity, session information? WSRP? Ad hoc? cWebProxy? Do we include a back-reference handle to help resolve web services? How do we secure the web-services calls? What languages support Do we refactor services? Do we we implement that critical subset? Do we end up with new methods that are “yucky” but well-suited for web-services? Do we hide things in PHP behind an API with methods? Or do we just lay down some web services code in the PHP? Tool Action JSP JSP JSP
  • 93. What if we built a version of the framework that examined an interface using reflection and dynamically built a proxy, generated WSDL, and just made web service happen pretty much transparently other than declaring where services were to run in configuration… Hopefully there will be a mechanism for secure web services, or perhaps we could simply use two-way SSL certificate exchange to force transport security… Linux JVM Tomcat (many webapps) JSF Servlet and JSF Portlet Stub Stub Framework with Web Services Linux JVM Axis Service Axis Framework … Windows .NET Service .NET Framework Tool Action JSP JSP JSP Tool Action JSP JSP JSP
  • 94. What if the frameworks were highly coordinated and in addition to dynamically generating stubs and placing web services, provided standardized mechanism for moving identity securely across web services, and the frameworks could perform dependency injection automatically when one service had a dependency on a service running on another server… Hmmm. Sounds like the Grid. Linux JVM Tomcat (many webapps) JSF Servlet and JSF Portlet DR Stub AUTHZ Service Sakai Grid Framework Linux JVM Axis DR Service Sakai Grid Framework AUTHZ Stub Tool Action JSP JSP JSP Tool Action JSP JSP JSP
  • 95. Why wait for web services? Our APIs and services will not really be mature until early 2005 - we may have to do major re-factoring as our code base grows and problems are identified Secure, identity preserving web services at a distance seem to be churning every 6 months. We are committed to deliver a full-featured high-performance product in the Java / Web Server / Browser space in two years. We don’t have time to be the “tip-of-the-spear” on tracking every single web-service technology twitch. Web services are great fun for “point solutions” but are painful as a basis for a framework right now
  • 96. Why start on web services? Short term: Sakai API implementations can use Web Services hidden behind the API (collecting point solutions) Web services are changing right now WSRF - Web Services Resource Framework - Think of this as “The Grid Meets .NET” Generic Security Services Application Program Interface (GSS-API) defined in RFC 2853 and JDK 1.4.2 Service Injection means that it is “Possible” to build a Sakai Web-Services Framework without changing services code.
  • 97. Summary This a journey - we are just at the beginning Thank you for your time I look forward to working with you all I also look forward to how much we will accomplish over the next year together “don’t fear the requirements…”