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.
4.
5.
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.
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
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.
18.
19.
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; }
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.
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
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.
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
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.
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.
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.
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.
71.
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
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.
80.
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
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.
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.
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