SlideShare ist ein Scribd-Unternehmen logo
1 von 16
1                                     Sakai Tools
 2
 3                                         July 12, 2005
 4
 5                Please direct questions or comments about this document to:
 6                           Glenn R. Golden, ggolden@umich.edu
 7
 8Tools are units of software that generate a user interface. In our web environment this is
 9usually html to be sent to the browser, or some arbitrary mime-type byte stream that
10becomes a download through the browser to play in a plug-in or store as a local file.
11
12Tools are used by Sakai’s various navigation systems, such as our portal. Tools are also
13used as helpers to other tools, providing content to satisfy the request for user interface
14for some subset of a client tool’s user interface.
15
16Tools are rarely used in the normal model of a web server and a Servlet, where the end
17user enters a URL that is mapped to the tool’s web application context and to the tool’s
18Servlet or JSP or JSF. In this tools are similar to Portlets. Sakai tools are always behind
19the scenes players for Sakai users who are primarily interacting with a Sakai navigation
20system such as a portal or hierarchy browser.
21
22A tool is invoked by an internal request dispatcher from navigation or portal code living
23another web application context, and need not be mapped to the web application URL
24space at all. But the Tool is mostly unaware of this. The full Servlet API level (Servlet,
25JSP, JSF) is in effect. The tool still takes requests and produces responses. The details
26that let a Servlet work as usual but really be a behind-the-scenes Sakai Tool are hidden by
27Sakai’s request processing and tool invocation code.
28
29At a higher abstraction level, from within the world of Sakai tools that are based on JSF,
30the tool is even less aware of anything unusual going on. From this level, the tool simply
31has a user interface component tree to establish, populate with information, and respond
32to changes in. The request / response cycle is even abstracted away from tools at this
33level.
34
35One thing that is visible to Tools, and therefore to Tool designers, and is also visible to
36our end users and system administrators is the URL scheme used to navigate to and
37within tools, and to submit data to tools. Sakai defines a standard for these URLs, and
38provides support to Tool developers to follow the standard.
39
40Special support for JSF based Tools is provided in Sakai.

41What can be a tool?
42A tool can be anything covered in the Servlet API; Servlets or JSP or JSF. A tool can
43even be static content packaged in a web application. A tool could also be a Portlet (but
44that is not planned for Sakai 2). A tool can be a Sakai enhanced JSF.
 1                                            -1-
 2           Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 3
45
46Some tools know nothing, as in a static content. Some tools know nothing about Sakai,
47for example an unmodified Servlet or JSP. Tools can know a little about Sakai, such as
48when a Servlet uses the Sakai-wide Session and tool placement. Tools can know a great
49deal about and be dependent on Sakai, as when it is designed as a Sakai enhanced JSF
50backing bean and component tree.

51Tool Placement
52Each tool can be placed into many locations within the Sakai system. Each of these
53placements acts as a different tool – it has a custom tool configuration, and keeps a
54separate interaction session with each end user.
55
56Tools can detect their tool placement by looking for the placement id in the request
57attributes. They will also know about their placement from the placement configuration,
58also found in the request attributes.
59
60The normal way to package a tool in Sakai is to let it have an HttpSession managed by
61Sakai, and one that is scoped to the tool placement. This means the tool can use the
62HttpSession to store interaction state with each end user, and be assured that Sakai keeps
63the sessions separate between different tool placements. Tools can also use the
64ToolSession object placed into the request attributes, or ask the SessionManager
65for the current ToolSession to get at the same set of information.
66
67Placement id detection is the responsibility of the Sakai kernel (see the request processing
68document). Placement assignment and placement configuration management is the
69responsibility of the various Sakai navigation / portal components.

70Tool Context
71Each Tool Placement has associated with it a context string. This is a value the tool can
72use when choosing what set of resources to associated with this placement. For example,
73the announcement tool uses context to select an announcement channel to use; the
74resources tool uses context to pick which root folder to show; these are different
75depending on the tool placement, and depending on the placement context value.
76
77Context is found from the Tool interface with getPlacementContext(). Context,
78like placement configuration, is set for the tool by the navigation technology invoking the
79tool.
80
81While the context is associated with a tool placement, it is not a one-to-one mapping with
82the tool placement (otherwise we could just use the placement id). In some cases, the
83context will be unique for each tool placement, and may even match the placement id.
84But usually there will be multiple tools placed at the same “place” in Sakai which all
85share the same context.
86
87Traditionally, tool placement context was associated with the site in which the tool was
88embedded. This allowed the chat tool to pick the “main” channel for that site when it
 4                                             -2-
 5          Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 6
89was not otherwise configured, the resources tool to show as the “root” folder the site’s
 90resources area, etc. While Sakai 2 navigation technology might deliver a site id as a tool
 91placement’s context, it might also deliver something else, such as a node id in the
 92superstructure. Don’t associate any additional meaning to context when using it in a tool.

 93Tool Registration
 94Tools are registered automatically when the web application that hosts the tool starts up.
 95The Sakai portal then becomes aware of the tool. This is done by including one or more
 96tool registration xml files in the tool web application packaging. A tool registration
 97listener discovers these tool registration files, as described in the section entitled “Tool
 98Registration Discovery”. The tool registration includes the “well known” tool id used to
 99refer to tools, the tool’s default configuration, and other meta-data used by the portal.
100
101Example:
102(file /tools/sakai.jsf1.xml in webapp jsf1.war)
103<?xml version="1.0"?>
104
105<registration>
106
107     <tool
108               id="sakai.sample.tools.jsf1"
109               title="JSF sample"
110               description="A sample JSF tool."
111             accessSecurity="tool">
112
113          <!-- Configure categories -->
114          <category name="sakai.sample" />
115          <category name="course" />
116          <category name="project" />
117          <category name="myworkspace” />
118
119          <!-- Configure title bar for portal -->
120          <configuration name="reset.button" value="true" />
121          <configuration name="help.button" value="true" />
122          <configuration name="help.id" value="jsf1.helpdoc" />
123          <configuration name="help.url" value="/jsf1/help.html"/>
124
125          <!-- Custom configuration that my tool processes -->
126          <configuration name="jsf1.custom.config" value="440"/>
127
128
129     </tool>
130
131</registration>
132
133The tool is registered with tie “tool” element. The “id” attribute is the tool’s well-
134known id, and must match the “servlet-name” element in the web.xml declaration
135for the tool. The “title” attribute is generally used when displaying the title bar of the
136tool. The “description” is generally longer than the title and is used by the portal
137when a user creates a new instance of a tool.
138
  7                                         -3-
  8          Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
  9
139“accessSecurity” is an optional attribute that is used to declare that the tool handles
140its own access security (with the “tool” value), or that the portal should handle access
141security for the tool (with the default “portal” value). This refers to the ability of the
142end user to access the tool’s user interface. The Charon portal will insist that the end user
143have “visit” permission to the site in which the tool is placed. If a tool wishes to let
144anyone in, and then handle security internally, it can declare this attribute.
145
146The “category” elements are used categorize the tools. The current worksite setup
147tool uses tool category, matched to Site type, to pick the list of tools to offer as options
148for different site types. The category “sakai.sample” is generally for sample tools. The
149categories “course”, “project”, and “myworkspace” are for making the tool available for
150users in Charon course sites, project sites, and workspace sites respectively. For
151example, some tools may be intended only in a course and project sites, while others may
152be intended only for workspace sites.
153
154Additional configuration may be specified as name-value pairs in <configuration>
155elements within the tool registration. This includes configuration that the portal will use,
156and can also include custom configuration values that the tool itself might process.

157Tool Registration Discovery
158Tools are packaged in web applications. Web applications that have tools to register
159must include the ToolListener, which finds the tool registration files in the web
160application and registers tools with the ToolManager. This is registered as a Listener in
161the web application’s web.xml file.
162
163Example:
164(in file /WEB-INF/web.xml in webapp jsf1.war)
165
 166<!-- Listener which registers my Sakai tool -->
 167    <listener>
 168        <listener-class>org.sakaiproject.util.ToolListener</listener-class>
 169    </listener>
170
171The ToolListener is provided by the tool-registration project of the kernel
172module. This is usually loaded into shared so it’s available to all web applications to use.
173
174The tool registration process enables ActiveTools, and grabs each tool’s Servlet API
175RequestDispatcher at registration time. We require that the Servlet name in the web.xml
176match the Tool well-known id, so that we can get the request dispatcher by Servlet name
177(i.e. tool id).
178
179JSF based tools are registered by including a servlet based on the Sakai JsfTool for each
180JSF tool. This Servlet is named with tool’s well know id, and is configured for each
181specific JSF tool being registered.
182
183This registry has two interfaces. One, the Tool API, which is not dependent on the
184Servlet API, is used to discover what tools are available and information about these
 10                                         -4-
 11          Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 12
185tools. The other, the ActiveTool API, which is dependent on the Servlet API, is used
186to invoke tools to process requests and produce user interfaces.

187Tool Invokers
188There are three classes of Tool invokers in Sakai:
189
190    - Tool aggregators, which combine the user interface fragment produces by one or
191        more tools, possibly with some decoration, to produce a user interface document.
192
193    - Tool dispatchers, which direct the request to a specific tool, asking it to produce
194        the user interface document.
195
196    - Tool helper clients, which delegate portions of their user interface creating
197        responsibility to another helper tool.
198
199Aggregators use the request URL to pick a collection of tool placements to invoke and
200combine into a single display. For each tool placement, the tool is found from the
201registry, and invoked to produce a fragment of the response. The aggregator combines
202the responses, possibly adding other elements, to form a single response document. A
203portal that combines multiple tool placements into a single response acts as an
204aggregator.
205
206Dispatchers use the request URL to pick a single tool placement to invoke for the entire
207response. A portal that uses iframes for tool placement display acts as a dispatcher,
208dispatching to multiple tools for the responses in each iframe. A hierarchy browser that
209supports drill down into a particular tool placement or data item also acts as a dispatcher.
210In each case, the dispatcher places some meaning on the request URL to pick a particular
211tool placement (or set of placements) to invoke.
212
213Helper clients act like dispatchers (or even aggregators). They recognize parts of their
214request space (certain modes, for instance) that can be handled by some helper tool. The
215helper tool is found from the registry and invoked to handle the response while in this
216mode. Information is shared between the two tools in the tool placement scoped
217ToolSession.

218Tool Manager
219The Tool API is a kernel API that holds registrations of Tool objects and provides tool
220discovery for navigation and helper-tool clients. Tools are identified by a well-known id.
221This interface has no dependencies on the Servlet API. It is good for getting information
222about available tools. Use the ActiveTool interface to actually invoke tools.
223
224The Tool API is provided by the tool project of the kernel module.

225CurrentTool
226The ToolManager provides the “current” tool, i.e. the tool involved in the current
227request processing, i.e. a tool’s meta data, configuration and placement information. A
 13                                             -5-
 14          Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 15
228tool can call the ToolManager.getCurrentTool() method. This is useful to get
229at the configuration parameters.
230
231Tool.getRegisteredConfig() provides those parameters set in the tool
232registration. Tool.getPlacementConfig() provides those parameters that are
233specific to this tool placement. This is mutable; the tool may change these Properties,
234expecting that the changes are permanent for this placement (other aspects of Tool are
235immutable).
236
237Tool.getConfig() gives another (read-only) view of the entire set of configuration
238properties for the tool, combining the registration and placement parameters. In this
239combination, the placement values override the registration value.
240
241The current Tool is also available from the request object in the “sakai.tool”
242attribute (Tool.TOOL).

243Active Tools
244The ActiveTool API is a kernel API that extends the Tool API to deliver
245ActiveTool objects (extensions of the Tool object) which can be invoked.
246
247The ActiveTool API is in the active-tool package of the kernel module.
248
249The ActiveToolManager is in fact a ToolManager. The default Sakai kernel
250registers the standard ActiveTool component as the implementation of both ToolManager
251and ActiveToolManager.
252
253Clients of the ActiveToolManager get ActiveTool instances. ActiveTools can be invoked
254with the include(), forward() or help() methods. The invocation uses the ActiveTool’s
255request dispatcher, and prepares the request object for the invocation. The particular
256context and Servlet path to show to the Tool, and the path information, are set as part of
257the tool invocation. This means that even a Servlet without Sakai awareness will likely
258form proper URLs if they base their URLs on the request information.

259Helper Tools
260Helper tools are tools that are designed to handle some smaller and common part of user
261interface that is found in many other tools. Examples include attachment choosers,
262options editors, and permissions editors.
263
264Tools that want a helper tool to handle a particular request find the helper tool from the
265ActiveTool registry. They place information for the helper into the ToolSession, which is
266shared between the client and the helper. Then they invoke the helper tool with the
267ActiveTool’s help() method.
268
269A Tool can map the helper to a part of the tool’s URL space. While requests come in to
270that space, the Tool can invoke the helper to handle the requests.

 16                                         -6-
 17          Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 18
271
272When a tool invokes a helper, the current tool PlacementId and ToolSession remain the
273same, that of the client tool. The client tool and the helper tool use the ToolSession to
274communicate. Before invoking the helper, the client places certain attributes into the
275ToolSession. During and after processing of the helper tool, the client can read other
276attributes from the ToolSession to get information back from the helper. The attributes
277understood by each helper are determined by each helper and documented with the tool
278code.

279Tool Titlebars
280The portal is responsible for outputting a title bar for the tool. Several options in the tool
281registration (or tool placement) control how the title bar is output:
282
283    - "reset.button" - boolean - If true, a reset button will be rendered in the tool's
284        title bar. Defaults to true. Set to "false" for a tool that should not have a reset
285        button.
286
287    -   "help.button" -      boolean - If true, a help button will be rendered in the tool's
288        title bar. Defaults to true. Set to "false" for a tool that should not have a help
289        button.
290
291    -   "help.id" -   The Sakai help document ID for the help button. Defaults to the
292        tool ID. Used to link the help button into the Sakai help system.
293
294   - "help.url" - Alternative to "help.id". A URL to the help for this tool.
295       Allows the tool to host its help via a URL, in its own webapp or on an external
296       server.
297
298See section “Tool Registration” for an example of how to do this titlebar-related
299configuration.

300Tool- Portal Cooperation in HTML Generation
301Since a Sakai tool can output a complete HTML document, it must cooperate with the
302portal in generating the HTML. The tool must output certain HTML fragments that it
303receives from the portal. These fragments allow for tool skinning, as well as providing
304JavaScript hooks that the portal needs.
305
306Sakai-aware tools should use the Sakai CSS classes to style their HTML output. See the
307documents “Skinning Sakai Tools” and “Skinning Sakai Portal” for more information on
308skinning, including the specific CSS/HTML styles that tools should output. However,
309the portal is responsible for controlling skinning. The portal decides which CSS files
310Sakai-aware tools should output. The portal creates HTML fragments that include the
311<link>s for CSS styling, as well as <script>s for including portal JavaScript. The tool is
312responsible for outputting these fragments that it receives from the portal.
313
314To cooperate with the portal in HTML generation, all tools must use the

 19                                          -7-
 20           Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 21
315“sakai.html.head” and “sakai.html.body.onload” request attributes as
316described below.
317
318sakai.html.head
319The tool should always inline the contents of the “sakai.html.head” request
320attribute in the HTML HEAD of the HTML documents it produces. This allows the
321portal to include JavaScript, CSS, and other fragments that it may need into the tool-
322generated HTML. For example, the Charon portal uses this mechanism to skin the tool.
323
324sakai.html.body.onload
325The tool should always inline the contents of the “sakai.html.body.onload”
326request attribute in the HTML BODY onload attribute of the HTML documents it
327produces. This allows the portal call JavaScript as needed. For example, the Charon
328portal uses this mechanism resize the tool’s frame to fit its content.
329
330For example, a JSF/JSP tool could include these attributes as follows:
331
 332<html>
 333<head>
 334<%= request.getAttribute("sakai.html.head") %>
 335Tool’s own head stuff here
 336</head>
 337<body onload="<%= request.getAttribute("sakai.html.body.onload") %>;foobar()">
 338Tool main output here
 339</body>
 340</html>
341
342sakai.html.head.css
343sakai.html.head.css.base
344sakai.html.head.css.skin
345sakai.html.head.js
346Most tools can safely ignore these request attributes. These attributes are subsets of the
347“sakai.html.head” attribute. If the tool needs fine-grained control of the skinning
348CSS files and JavaScript, it can use these attributes instead of the
349“sakai.html.head” attribute.
350

351Special Request Attributes
352Sakai-aware tools should be aware of several special HttpServletRequest attributes.
353These attributes are made available by the Sakai RequestFilter and the portal.
354
355HTML Fragment Mode
356Usually a tool should output a complete HTML document. However, if the
357“sakai.fragment” attribute is set in the request (Tool.FRAGMENT), the tool should
358produce an HTML fragment instead of a complete document. In this case, the tool
359should not output a <HTML>, <HEAD>, or <BODY> tag.


 22                                         -8-
 23          Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 24
360
361Placement
362The Placement for the current request can be found in the
363“sakai.tool.placement” (Tool.PLACEMENT) attribute of the request. This is
364the basis of distinguishing one instance of a tool from another instance of the same tool,
365and the basis for selecting the proper ToolSession for this request. Configuration values
366can be read from the placement. Some configuration values may come from the tool
367registration, others from the particular instance of the tool. The opaque ID for the current
368placement can be found in the “sakai.tool.placement.id”
369(Tool.PLACEMENT_ID) attribute of the request.
370
371Tool Session
372The ToolSession object can be found in the “sakai.tool.session”
373(Tool.TOOL_SESSION) attribute. This is based on the request’s placement id, if
374present. This is also available from the SessionManager’s getCurrentToolSession()
375method.
376
377Sakai Session
378The Sakai-wide session is made available by the RequestFilter in the
379“sakai.session” (RequestFilter.ATTR_SESSION) attribute of the request. This is
380also available from the SessionManager’s getCurrentSession() method.

381Tool URLs
382When an ActiveTool is invoked, Sakai sets the context path, Servlet path and path info in
383the Request object that the tool sees. This is set to match the URL scheme of the invoker
384– that of the hierarchy browser or portal or navigator. It will not match any idea of the
385tool’s native context id or Servlet path (the tool usually has no Servlet path since it is
386usually not directly mapped to the URL space of the web application). It is set so that if
387the tool uses the normal means to produce a URL “back” to the tool, based on
388information from the request object, it will likely be as the navigation technology wishes
389it to be.
390
391The path info is of particular interest to the tool. Tools can map their various modes and
392functions to different URLs within this path part of the overall URL. The tool can use the
393path info it gets to figure out what to do.
394
395The full URL to a tool’s particular mode or function is a combination of the URL scheme
396of the navigation technology and that of the tool. For instance, a navigation component
397might define this URL to get to a particular tool placed for a particular part of the Sakai
398hierarchy:
399
400http://sakaiserver.org/umich/eecs/cs/311/001/chat/main
401
402The sakai.chat tool might define a URL scheme so that:
403
404/presence
 25                                              -9-
 26           Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 27
405
406is interpreted to show the presence list, and
407
408/messages
409
410is interpreted to show the message list. The full URL to the part of the browser window
411showing a particular chat’s messages would then be:
412
413http://sakaiserver.org/umich/eecs/cs/311/001/chat/main/messages
414
415The navigation technology would interpret the beginning of the URL. When it sees the
416“chat” part, it maps that to the sakai.chat tool. When it sees the “main” part, it maps
417it to a particular placement of the chat tool (for this class section’s “main” chat).
418
419The navigation code now can invoke the tool with the proper placement id, ToolSession,
420context and Servlet paths, and the path info.
421
422The tool sees the path info:
423
424/messages
425
426when invoked, and has access to the Tool configuration, Placement configuration, and
427ToolSession data with any interaction state with this particular user at this instance of the
428tool.

429Integrating Servlet Technology Tools
430A Servlet, JSP or JSF system developed outside of Sakai can be used in Sakai as a tool
431with no or minor modification.
432
433At minimum, we must register the tool, using the tool registration .xml file and the
434ToolListener in the web.xml. And we must put the RequestFilter in front of all
435invocations of the Servlet, usually by mapping the filter to the Servlet name.
436
437The web.xml section that invokes our ToolListener looks like this:
438
439      <listener>
440          <listener-class>
441              org.sakaiproject.util.ToolListener
442          </listener-class>
443      </listener>
444
445This comes after all Servlet mapping entries.
446
447The request filter is registered like this:
448
449   <!-- Sakai request filter -->
450     <filter>
451         <filter-name>sakai.request</filter-name>
 28                                        - 10 -
 29          Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 30
452         <filter-class>
453             org.sakaiproject.util.RequestFilter</filter-class>
454     </filter>
455
456And mapped for each tool Servlet defined, like this:
457
458     <filter-mapping>
459         <filter-name>sakai.request</filter-name>
460         <servlet-name>sakai.tool.well.known.id</servlet-name>
461         <dispatcher>REQUEST</dispatcher>
462         <dispatcher>FORWARD</dispatcher>
463         <dispatcher>INCLUDE</dispatcher>
464     </filter-mapping>
465
466See the request filter document for configuration details.
467
468A minimally integrated tool will be invokable for any non-fragment dispatch, and be tool
469session aware without knowing it by getting an HttpSession scoped to the tool placement.
470
471The problem likely to be found in this minimal integration is that the tool does not know
472anything about the context of the request, which becomes important when it selects which
473data items to work with. Context is usually found from a tool placement’s configuration,
474or the placement’s relation to the navigation path as established by the Sakai navigation
475component that invoked the tool.
476
477URLs generated by the tool will follow the navigation component’s scheme extended
478with the tool’s path, as described above, as long as the Servlet technology does not hard
479code the URLS, but uses the Request object fields (transport, server id, port, context path,
480Servlet path, path info) to form URL. The code must also properly call the Response
481object’s encodeURL methods(), as called for in the Servlet spec.
482
483Further integration, such as context awareness for data selection, fragment support,
484invocation of Sakai APIs, etc, can be added to the code when it recognizes it is running in
485Sakai.

486Integrating JSF Technology Tools
487JSF tools have special treatment in Sakai. The preferred method for Sakai tool
488development is based on JSF, using the Sakai custom UIComponents, JSP Tags and
489Renders. Sakai also provides integration projects to use Sun’s RI and MyFaces.
490
491JSF tools that are not fully Sakai compliant and dependent can be used in Sakai, much
492like Servlets can, using the same methods outlined in the previous section. But there are
493some additional integration features needed for JSF.
494
495To meet the needs of tool registration, where we have a Servlet name to associate with
496each Tool, we need a Servlet registration in the web.xml for each tool. Sakai provides a
497Servlet to use for each JSF tool, the JsfTool Servlet. This Servlet can be configured to
498customize it to each JSF tool view file location specifics. JsfTool also helps in the
 31                                        - 11 -
 32          Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 33
499dispatching of tool requests to JSF tools.
500
501The JsfTool Servlet is in the tool project of the jsf module.
502
503A JsfTool based tool declaration in the web.xml for a JSF tool might look like this:
504
505     <!-- Sakai request filter, mapped to anything
506          that goes to the faces servlet -->
507     <filter>
508         <filter-name>sakai.request</filter-name>
509         <filter-class>org.sakaiproject.util.RequestFilter
510                       </filter-class>
511     </filter>
512
513     <filter-mapping>
514         <filter-name>sakai.request</filter-name>
515         <servlet-name>Faces Servlet</servlet-name>
516         <dispatcher>REQUEST</dispatcher>
517         <dispatcher>FORWARD</dispatcher>
518         <dispatcher>INCLUDE</dispatcher>
519     </filter-mapping>
520
521     <!-- Sakai JSF Tool Servlet, for some tool -->
522     <servlet>
523         <servlet-name>sakai.well.known.tool.id</servlet-name>
524         <servlet-class>org.sakaiproject.jsf.util.JsfTool
525                        </servlet-class>
526         <init-param>
527             <param-name>default</param-name>
528             <param-value>main</param-value>
529         </init-param>
530         <init-param>
531             <param-name>path</param-name>
532             <param-value>/test</param-value>
533         </init-param>
534         <load-on-startup> 1 </load-on-startup>
535     </servlet>
536
537     <!-- Faces Servlet -->
538     <servlet>
539         <servlet-name>Faces Servlet</servlet-name>
540         <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
541         <load-on-startup> 2 </load-on-startup>
542     </servlet>
543
544     <!-- Faces Servlet Mapping -->
545     <servlet-mapping>
546         <servlet-name>Faces Servlet</servlet-name>
547         <url-pattern>*.jsf</url-pattern>
548     </servlet-mapping>
549
550The FacesServlet and its mapping are registered in the normal way, using the *.jsf
551mapping form.
552
 34                                         - 12 -
 35        Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 36
553In addition to the JsfTool Servlet, Sakai provides customization of the stock JSF
554implementations in the app project of the jsf module. This collection of application
555plugins, and a faces-config.xml to register them, work with our RequestFilter, ActiveTool
556dispatching, and JsfTool Servlet to enhance various aspects of JSF processing to support
557Sakai’s use of JSF (mostly in URL handling, and redirects after POST that don’t loose
558FacesMessages). To use these plugins, a set of .jar files from Sakai need to be bundled,
559along with the JSF api and implementation files, into each tool hosting webapp. For
560Sun’s RI, the webapp producing project’s project.xml would look like this:
561
562               <dependency>
563                     <groupId>sakaiproject</groupId>
564                     <artifactId>sakai2-jsf-tool</artifactId>
565                     <version>sakai.2.0.0</version>
566                     <properties>
567                            <war.bundle>true</war.bundle>
568                     </properties>
569               </dependency>
570
571               <dependency>
572                     <groupId>sakaiproject</groupId>
573                     <artifactId>sakai2-jsf-app</artifactId>
574                     <version>sakai.2.0.0</version>
575                     <properties>
576                            <war.bundle>true</war.bundle>
577                     </properties>
578               </dependency>
579
580               <dependency>
581                     <groupId>sakaiproject</groupId>
582                     <artifactId>sakai2-util-web</artifactId>
583                     <version>sakai.2.0.0</version>
584                     <properties>
585                            <war.bundle>true</war.bundle>
586                     </properties>
587               </dependency>
588
589               <!-- Sun JSF RI jars (jsf-impl, jsf-api) and
590                    dependencies (commons-digester, commons-collections,
591                    commons-digester, commons-beanutils) -->
592               <dependency>
593                     <groupId>jsf</groupId>
594                     <artifactId>jsf-impl</artifactId>
595                     <version>1.1.01</version>
596                     <properties>
597                            <war.bundle>true</war.bundle>
598                     </properties>
599               </dependency>
600
601               <dependency>
602                     <groupId>jsf</groupId>
603                     <artifactId>jsf-api</artifactId>
604                     <version>1.1.01</version>
605                     <properties>
606                            <war.bundle>true</war.bundle>

 37                                        - 13 -
 38          Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 39
607                     </properties>
608               </dependency>
609
610               <dependency>
611                     <groupId>commons-digester</groupId>
612                     <artifactId>commons-digester</artifactId>
613                     <version>1.6</version>
614                     <properties>
615                            <war.bundle>true</war.bundle>
616                     </properties>
617               </dependency>
618
619               <dependency>
620                     <groupId>commons-collections</groupId>
621                     <artifactId>commons-collections</artifactId>
622                     <version>3.1</version>
623                     <properties>
624                            <war.bundle>true</war.bundle>
625                     </properties>
626               </dependency>
627
628               <dependency>
629                     <groupId>commons-beanutils</groupId>
630                     <artifactId>commons-beanutils</artifactId>
631                     <version>1.7.0</version>
632                     <properties>
633                            <war.bundle>true</war.bundle>
634                     </properties>
635               </dependency>
636
637               <dependency>
638                     <groupId>taglibs</groupId>
639                     <artifactId>standard</artifactId>
640                     <version>1.0.4</version>
641                     <properties>
642                            <war.bundle>true</war.bundle>
643                     </properties>
644               </dependency>
645
646               <dependency>
647                     <groupId>jstl</groupId>
648                     <artifactId>jstl</artifactId>
649                     <version>1.0.2</version>
650                     <properties>
651                            <war.bundle>true</war.bundle>
652                     </properties>
653               </dependency>
654
655JSF applications can choose to store the View between response and request on the server
656or in the client HTML. If stored on the server, it will be properly scoped to the tool
657placement because of Sakai’s HttpSession handling. Beans scoped for “session” which
658need instead to be scoped for tool placement are also properly handled by our scoped
659HttpSession.
660

 40                                        - 14 -
 41          Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 42
661Support for fragment responses is provided, if desired, by using the Sakai View
662UIComponent (<sakai:view>) to wrap the entire response, instead of hard coding html
663header elements. This is recommended practice for Sakai tools, and is easily retrofitted
664to tools developed outside of Sakai.
665
666Support for direct access tool modes can be added using TBD.

667Tool Integration Chart
668Various features of Servlet or JSF tool integration are described in this chart on the left.
669The technologies that make this possible are listed on the right.
670
   Placeable                                      • Dispatch from a Sakai Navigator to get
                                                      a placement id and configuration.
   The ability for the tool to exist in multiple  • Include the RequestFilter with the
   places within Sakai, each with its own             default tool placement detection and
   session and configuration                          tool scoped HttpSession
                                                  • Access (if needed) the placement id and
                                                      configuration objects in the Request.
                                                  • Derive context from placement id or
                                                      configuration.
   Tool                                           • Include the ToolListener and a tool.xml
                                                      file for each tool hosted by the webapp.
   The ability for the tool to be invoked and     • Include the RequestFilter for session
   configured (default configuration)                 handling, etc.
                                                  • Dispatch from a Sakai Navigator for
                                                      default configuration.
                                                  For JSF:
                                                  • Include a JsfTool Servlet configuration
                                                      for each tool hosted in the webapp,
                                                      named to match the tool.xml
                                                      registration.
                                                  • Configure the JstTool with the path and
                                                      default view for the tool.
   Redirect After Post                            For Servlet:
                                                  • Respond to each POST with a redirect
   Part of Sakai standard URL handling,               to the direct URL to the next tool mode.
   keeping the browser history clean.             For JSF:
                                                  • Use the <redirect /> in the JSF
                                                      navigation rules.
                                                  • Bundle the jsf-app project to get Sakai
                                                      application plugins that help preserve
                                                      FacesContext Messages between the
                                                      redirect and the return call.
   Fragment                                       For Servlet:
                                                  • Recognize the sakai.fragment
 43                                        - 15 -
 44          Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 45
Produce a fragment of HTML that lives in          attribute is set in the Request, and
   a <body> section, without header or footer.       produce the fragment response.
                                                  For JSF:
                                                  • Use the Sakai View UIComponent
                                                     instead of html header and footer code
                                                  • Bundle the Sakai widgets in the
                                                     webapp.
   Navigator URLs                                 For Servlet:
                                                  • Dynamically produce “return” URLs
   Produce URLs back to the tool that                based on Request parameters (the Sakai
   matches the URL that the navigator                Web util object can be useful).
   recognized as leading to the tool. Part of     For JSF:
   Sakai standard URL handling.                   • bundle the jsf-app project to get Sakai
                                                     applicaton plugins to control the URLs
                                                     generated by Faces.
   Direct URLs                                    TBD

   Produce URLs back to the tool, and
   recognize URLs to the tool that include
   complete information for view (mode)
   selection as well as “selector” information.
   Part of Sakai standard URL handling
671
672
673
674
675
676Glenn R. Golden.Sakai Tools.July 12,
6772005.https://source.sakaiproject.org/svn/reference/tags/sakai-2.5.4/docs/architecture/




 46                                        - 16 -
 47          Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5
 48

Weitere ähnliche Inhalte

Ähnlich wie Sakai Tool

Create Home Directories on Storage Using WFA and ServiceNow integration
Create Home Directories on Storage Using WFA and ServiceNow integrationCreate Home Directories on Storage Using WFA and ServiceNow integration
Create Home Directories on Storage Using WFA and ServiceNow integrationRutul Shah
 
Stellar Sakai Integration
Stellar Sakai IntegrationStellar Sakai Integration
Stellar Sakai Integrationjiali zhang
 
Stellar Sakai Integration
Stellar Sakai IntegrationStellar Sakai Integration
Stellar Sakai Integrationjiali zhang
 
Sahi-Web Automation and Testing Tool
Sahi-Web Automation and Testing ToolSahi-Web Automation and Testing Tool
Sahi-Web Automation and Testing ToolKurapati Vishwak
 
Webscarab demo @ OWASP Belgium
Webscarab demo @ OWASP BelgiumWebscarab demo @ OWASP Belgium
Webscarab demo @ OWASP BelgiumPhilippe Bogaerts
 
Apache Shindig, from Server Side Portlets to Open Social Gadgets
Apache Shindig, from Server Side Portlets to Open Social GadgetsApache Shindig, from Server Side Portlets to Open Social Gadgets
Apache Shindig, from Server Side Portlets to Open Social GadgetsTyrell Perera
 
Secure real-time collaboration with SecurePass and Etherpad
Secure real-time collaboration with SecurePass and EtherpadSecure real-time collaboration with SecurePass and Etherpad
Secure real-time collaboration with SecurePass and EtherpadGiuseppe Paterno'
 
Nuxeo - OpenSocial
Nuxeo - OpenSocialNuxeo - OpenSocial
Nuxeo - OpenSocialThomas Roger
 
Smp agentry app_development
Smp agentry app_developmentSmp agentry app_development
Smp agentry app_developmentGanesh Kumar
 
Mba ebooks ! Edhole
Mba ebooks ! EdholeMba ebooks ! Edhole
Mba ebooks ! EdholeEdhole.com
 
Free Ebooks Download edhole.com
Free Ebooks Download edhole.comFree Ebooks Download edhole.com
Free Ebooks Download edhole.comEdhole.com
 
Managing Your Runtime With P2
Managing Your Runtime With P2Managing Your Runtime With P2
Managing Your Runtime With P2Pascal Rapicault
 
Relevance trilogy may dream be with you! (dec17)
Relevance trilogy  may dream be with you! (dec17)Relevance trilogy  may dream be with you! (dec17)
Relevance trilogy may dream be with you! (dec17)Woonsan Ko
 
Data cleaning with the Kurator toolkit: Bridging the gap between conventional...
Data cleaning with the Kurator toolkit: Bridging the gap between conventional...Data cleaning with the Kurator toolkit: Bridging the gap between conventional...
Data cleaning with the Kurator toolkit: Bridging the gap between conventional...Timothy McPhillips
 
Workflow Standard Content Guide for ESM 6.5c
Workflow Standard Content Guide for ESM 6.5cWorkflow Standard Content Guide for ESM 6.5c
Workflow Standard Content Guide for ESM 6.5cProtect724migration
 
China Science Challenge
China Science ChallengeChina Science Challenge
China Science Challengeremko caprio
 
SgCodeJam24 Workshop
SgCodeJam24 WorkshopSgCodeJam24 Workshop
SgCodeJam24 Workshopremko caprio
 

Ähnlich wie Sakai Tool (20)

Create Home Directories on Storage Using WFA and ServiceNow integration
Create Home Directories on Storage Using WFA and ServiceNow integrationCreate Home Directories on Storage Using WFA and ServiceNow integration
Create Home Directories on Storage Using WFA and ServiceNow integration
 
Stellar Sakai Integration
Stellar Sakai IntegrationStellar Sakai Integration
Stellar Sakai Integration
 
Stellar Sakai Integration
Stellar Sakai IntegrationStellar Sakai Integration
Stellar Sakai Integration
 
Sahi-Web Automation and Testing Tool
Sahi-Web Automation and Testing ToolSahi-Web Automation and Testing Tool
Sahi-Web Automation and Testing Tool
 
Webscarab demo @ OWASP Belgium
Webscarab demo @ OWASP BelgiumWebscarab demo @ OWASP Belgium
Webscarab demo @ OWASP Belgium
 
Apache Shindig, from Server Side Portlets to Open Social Gadgets
Apache Shindig, from Server Side Portlets to Open Social GadgetsApache Shindig, from Server Side Portlets to Open Social Gadgets
Apache Shindig, from Server Side Portlets to Open Social Gadgets
 
Secure real-time collaboration with SecurePass and Etherpad
Secure real-time collaboration with SecurePass and EtherpadSecure real-time collaboration with SecurePass and Etherpad
Secure real-time collaboration with SecurePass and Etherpad
 
sveltekit-en.pdf
sveltekit-en.pdfsveltekit-en.pdf
sveltekit-en.pdf
 
Nuxeo - OpenSocial
Nuxeo - OpenSocialNuxeo - OpenSocial
Nuxeo - OpenSocial
 
Smp agentry app_development
Smp agentry app_developmentSmp agentry app_development
Smp agentry app_development
 
Mba ebooks ! Edhole
Mba ebooks ! EdholeMba ebooks ! Edhole
Mba ebooks ! Edhole
 
Free Ebooks Download edhole.com
Free Ebooks Download edhole.comFree Ebooks Download edhole.com
Free Ebooks Download edhole.com
 
Managing Your Runtime With P2
Managing Your Runtime With P2Managing Your Runtime With P2
Managing Your Runtime With P2
 
Relevance trilogy may dream be with you! (dec17)
Relevance trilogy  may dream be with you! (dec17)Relevance trilogy  may dream be with you! (dec17)
Relevance trilogy may dream be with you! (dec17)
 
Sso & rman
Sso & rmanSso & rman
Sso & rman
 
Data cleaning with the Kurator toolkit: Bridging the gap between conventional...
Data cleaning with the Kurator toolkit: Bridging the gap between conventional...Data cleaning with the Kurator toolkit: Bridging the gap between conventional...
Data cleaning with the Kurator toolkit: Bridging the gap between conventional...
 
Workflow Standard Content Guide for ESM 6.5c
Workflow Standard Content Guide for ESM 6.5cWorkflow Standard Content Guide for ESM 6.5c
Workflow Standard Content Guide for ESM 6.5c
 
Node.js and Parse
Node.js and ParseNode.js and Parse
Node.js and Parse
 
China Science Challenge
China Science ChallengeChina Science Challenge
China Science Challenge
 
SgCodeJam24 Workshop
SgCodeJam24 WorkshopSgCodeJam24 Workshop
SgCodeJam24 Workshop
 

Mehr von jiali zhang

Scorm_2004_3rdEd_ SeqNav
Scorm_2004_3rdEd_ SeqNavScorm_2004_3rdEd_ SeqNav
Scorm_2004_3rdEd_ SeqNavjiali zhang
 
Scorm_2004_3rdEd_ RunTimeEnv
Scorm_2004_3rdEd_ RunTimeEnvScorm_2004_3rdEd_ RunTimeEnv
Scorm_2004_3rdEd_ RunTimeEnvjiali zhang
 
Scorm_2004_3rdEd_ Cam
Scorm_2004_3rdEd_ CamScorm_2004_3rdEd_ Cam
Scorm_2004_3rdEd_ Camjiali zhang
 
Scorm_2004_3rdEd_Overview
Scorm_2004_3rdEd_OverviewScorm_2004_3rdEd_Overview
Scorm_2004_3rdEd_Overviewjiali zhang
 
Scorm.2004.3 Ed.Impacts Summary
Scorm.2004.3 Ed.Impacts SummaryScorm.2004.3 Ed.Impacts Summary
Scorm.2004.3 Ed.Impacts Summaryjiali zhang
 
VensimPLE Quick Reference and Tutorial
VensimPLE Quick Reference and TutorialVensimPLE Quick Reference and Tutorial
VensimPLE Quick Reference and Tutorialjiali zhang
 
Eeveloping Interactive Logbook A Personal Learning Environment
Eeveloping Interactive Logbook A Personal Learning EnvironmentEeveloping Interactive Logbook A Personal Learning Environment
Eeveloping Interactive Logbook A Personal Learning Environmentjiali zhang
 
Form Learning Over E Learning To My Learning
Form Learning Over E Learning To My LearningForm Learning Over E Learning To My Learning
Form Learning Over E Learning To My Learningjiali zhang
 
7thingsabout Ple
7thingsabout Ple7thingsabout Ple
7thingsabout Plejiali zhang
 
从Sakai项目谈高校网络辅助教学平台
从Sakai项目谈高校网络辅助教学平台从Sakai项目谈高校网络辅助教学平台
从Sakai项目谈高校网络辅助教学平台jiali zhang
 
基于Sakai的开源学习管理系统的构建
基于Sakai的开源学习管理系统的构建基于Sakai的开源学习管理系统的构建
基于Sakai的开源学习管理系统的构建jiali zhang
 
Sakai Enterprise Integration[1]
Sakai Enterprise Integration[1]Sakai Enterprise Integration[1]
Sakai Enterprise Integration[1]jiali zhang
 
自由 开放的Sakai平台
自由 开放的Sakai平台自由 开放的Sakai平台
自由 开放的Sakai平台jiali zhang
 
The Cooperation Of Bupticet And Sakai
The Cooperation Of Bupticet And SakaiThe Cooperation Of Bupticet And Sakai
The Cooperation Of Bupticet And Sakaijiali zhang
 
Bupt Sakai Melete
Bupt Sakai MeleteBupt Sakai Melete
Bupt Sakai Meletejiali zhang
 

Mehr von jiali zhang (20)

Scorm_2004_3rdEd_ SeqNav
Scorm_2004_3rdEd_ SeqNavScorm_2004_3rdEd_ SeqNav
Scorm_2004_3rdEd_ SeqNav
 
Scorm_2004_3rdEd_ RunTimeEnv
Scorm_2004_3rdEd_ RunTimeEnvScorm_2004_3rdEd_ RunTimeEnv
Scorm_2004_3rdEd_ RunTimeEnv
 
Scorm_2004_3rdEd_ Cam
Scorm_2004_3rdEd_ CamScorm_2004_3rdEd_ Cam
Scorm_2004_3rdEd_ Cam
 
Scorm_2004_3rdEd_Overview
Scorm_2004_3rdEd_OverviewScorm_2004_3rdEd_Overview
Scorm_2004_3rdEd_Overview
 
Scorm.2004.3 Ed.Impacts Summary
Scorm.2004.3 Ed.Impacts SummaryScorm.2004.3 Ed.Impacts Summary
Scorm.2004.3 Ed.Impacts Summary
 
VensimPLE Quick Reference and Tutorial
VensimPLE Quick Reference and TutorialVensimPLE Quick Reference and Tutorial
VensimPLE Quick Reference and Tutorial
 
Eeveloping Interactive Logbook A Personal Learning Environment
Eeveloping Interactive Logbook A Personal Learning EnvironmentEeveloping Interactive Logbook A Personal Learning Environment
Eeveloping Interactive Logbook A Personal Learning Environment
 
Form Learning Over E Learning To My Learning
Form Learning Over E Learning To My LearningForm Learning Over E Learning To My Learning
Form Learning Over E Learning To My Learning
 
7thingsabout Ple
7thingsabout Ple7thingsabout Ple
7thingsabout Ple
 
PLE
PLEPLE
PLE
 
Sakai Technical
Sakai TechnicalSakai Technical
Sakai Technical
 
Sakai
SakaiSakai
Sakai
 
从Sakai项目谈高校网络辅助教学平台
从Sakai项目谈高校网络辅助教学平台从Sakai项目谈高校网络辅助教学平台
从Sakai项目谈高校网络辅助教学平台
 
基于Sakai的开源学习管理系统的构建
基于Sakai的开源学习管理系统的构建基于Sakai的开源学习管理系统的构建
基于Sakai的开源学习管理系统的构建
 
Sakai Enterprise Integration[1]
Sakai Enterprise Integration[1]Sakai Enterprise Integration[1]
Sakai Enterprise Integration[1]
 
Edu0442
Edu0442Edu0442
Edu0442
 
自由 开放的Sakai平台
自由 开放的Sakai平台自由 开放的Sakai平台
自由 开放的Sakai平台
 
The Cooperation Of Bupticet And Sakai
The Cooperation Of Bupticet And SakaiThe Cooperation Of Bupticet And Sakai
The Cooperation Of Bupticet And Sakai
 
教学与Sakai
教学与Sakai教学与Sakai
教学与Sakai
 
Bupt Sakai Melete
Bupt Sakai MeleteBupt Sakai Melete
Bupt Sakai Melete
 

Kürzlich hochgeladen

Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 

Kürzlich hochgeladen (20)

Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 

Sakai Tool

  • 1. 1 Sakai Tools 2 3 July 12, 2005 4 5 Please direct questions or comments about this document to: 6 Glenn R. Golden, ggolden@umich.edu 7 8Tools are units of software that generate a user interface. In our web environment this is 9usually html to be sent to the browser, or some arbitrary mime-type byte stream that 10becomes a download through the browser to play in a plug-in or store as a local file. 11 12Tools are used by Sakai’s various navigation systems, such as our portal. Tools are also 13used as helpers to other tools, providing content to satisfy the request for user interface 14for some subset of a client tool’s user interface. 15 16Tools are rarely used in the normal model of a web server and a Servlet, where the end 17user enters a URL that is mapped to the tool’s web application context and to the tool’s 18Servlet or JSP or JSF. In this tools are similar to Portlets. Sakai tools are always behind 19the scenes players for Sakai users who are primarily interacting with a Sakai navigation 20system such as a portal or hierarchy browser. 21 22A tool is invoked by an internal request dispatcher from navigation or portal code living 23another web application context, and need not be mapped to the web application URL 24space at all. But the Tool is mostly unaware of this. The full Servlet API level (Servlet, 25JSP, JSF) is in effect. The tool still takes requests and produces responses. The details 26that let a Servlet work as usual but really be a behind-the-scenes Sakai Tool are hidden by 27Sakai’s request processing and tool invocation code. 28 29At a higher abstraction level, from within the world of Sakai tools that are based on JSF, 30the tool is even less aware of anything unusual going on. From this level, the tool simply 31has a user interface component tree to establish, populate with information, and respond 32to changes in. The request / response cycle is even abstracted away from tools at this 33level. 34 35One thing that is visible to Tools, and therefore to Tool designers, and is also visible to 36our end users and system administrators is the URL scheme used to navigate to and 37within tools, and to submit data to tools. Sakai defines a standard for these URLs, and 38provides support to Tool developers to follow the standard. 39 40Special support for JSF based Tools is provided in Sakai. 41What can be a tool? 42A tool can be anything covered in the Servlet API; Servlets or JSP or JSF. A tool can 43even be static content packaged in a web application. A tool could also be a Portlet (but 44that is not planned for Sakai 2). A tool can be a Sakai enhanced JSF. 1 -1- 2 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 3
  • 2. 45 46Some tools know nothing, as in a static content. Some tools know nothing about Sakai, 47for example an unmodified Servlet or JSP. Tools can know a little about Sakai, such as 48when a Servlet uses the Sakai-wide Session and tool placement. Tools can know a great 49deal about and be dependent on Sakai, as when it is designed as a Sakai enhanced JSF 50backing bean and component tree. 51Tool Placement 52Each tool can be placed into many locations within the Sakai system. Each of these 53placements acts as a different tool – it has a custom tool configuration, and keeps a 54separate interaction session with each end user. 55 56Tools can detect their tool placement by looking for the placement id in the request 57attributes. They will also know about their placement from the placement configuration, 58also found in the request attributes. 59 60The normal way to package a tool in Sakai is to let it have an HttpSession managed by 61Sakai, and one that is scoped to the tool placement. This means the tool can use the 62HttpSession to store interaction state with each end user, and be assured that Sakai keeps 63the sessions separate between different tool placements. Tools can also use the 64ToolSession object placed into the request attributes, or ask the SessionManager 65for the current ToolSession to get at the same set of information. 66 67Placement id detection is the responsibility of the Sakai kernel (see the request processing 68document). Placement assignment and placement configuration management is the 69responsibility of the various Sakai navigation / portal components. 70Tool Context 71Each Tool Placement has associated with it a context string. This is a value the tool can 72use when choosing what set of resources to associated with this placement. For example, 73the announcement tool uses context to select an announcement channel to use; the 74resources tool uses context to pick which root folder to show; these are different 75depending on the tool placement, and depending on the placement context value. 76 77Context is found from the Tool interface with getPlacementContext(). Context, 78like placement configuration, is set for the tool by the navigation technology invoking the 79tool. 80 81While the context is associated with a tool placement, it is not a one-to-one mapping with 82the tool placement (otherwise we could just use the placement id). In some cases, the 83context will be unique for each tool placement, and may even match the placement id. 84But usually there will be multiple tools placed at the same “place” in Sakai which all 85share the same context. 86 87Traditionally, tool placement context was associated with the site in which the tool was 88embedded. This allowed the chat tool to pick the “main” channel for that site when it 4 -2- 5 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 6
  • 3. 89was not otherwise configured, the resources tool to show as the “root” folder the site’s 90resources area, etc. While Sakai 2 navigation technology might deliver a site id as a tool 91placement’s context, it might also deliver something else, such as a node id in the 92superstructure. Don’t associate any additional meaning to context when using it in a tool. 93Tool Registration 94Tools are registered automatically when the web application that hosts the tool starts up. 95The Sakai portal then becomes aware of the tool. This is done by including one or more 96tool registration xml files in the tool web application packaging. A tool registration 97listener discovers these tool registration files, as described in the section entitled “Tool 98Registration Discovery”. The tool registration includes the “well known” tool id used to 99refer to tools, the tool’s default configuration, and other meta-data used by the portal. 100 101Example: 102(file /tools/sakai.jsf1.xml in webapp jsf1.war) 103<?xml version="1.0"?> 104 105<registration> 106 107 <tool 108 id="sakai.sample.tools.jsf1" 109 title="JSF sample" 110 description="A sample JSF tool." 111 accessSecurity="tool"> 112 113 <!-- Configure categories --> 114 <category name="sakai.sample" /> 115 <category name="course" /> 116 <category name="project" /> 117 <category name="myworkspace” /> 118 119 <!-- Configure title bar for portal --> 120 <configuration name="reset.button" value="true" /> 121 <configuration name="help.button" value="true" /> 122 <configuration name="help.id" value="jsf1.helpdoc" /> 123 <configuration name="help.url" value="/jsf1/help.html"/> 124 125 <!-- Custom configuration that my tool processes --> 126 <configuration name="jsf1.custom.config" value="440"/> 127 128 129 </tool> 130 131</registration> 132 133The tool is registered with tie “tool” element. The “id” attribute is the tool’s well- 134known id, and must match the “servlet-name” element in the web.xml declaration 135for the tool. The “title” attribute is generally used when displaying the title bar of the 136tool. The “description” is generally longer than the title and is used by the portal 137when a user creates a new instance of a tool. 138 7 -3- 8 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 9
  • 4. 139“accessSecurity” is an optional attribute that is used to declare that the tool handles 140its own access security (with the “tool” value), or that the portal should handle access 141security for the tool (with the default “portal” value). This refers to the ability of the 142end user to access the tool’s user interface. The Charon portal will insist that the end user 143have “visit” permission to the site in which the tool is placed. If a tool wishes to let 144anyone in, and then handle security internally, it can declare this attribute. 145 146The “category” elements are used categorize the tools. The current worksite setup 147tool uses tool category, matched to Site type, to pick the list of tools to offer as options 148for different site types. The category “sakai.sample” is generally for sample tools. The 149categories “course”, “project”, and “myworkspace” are for making the tool available for 150users in Charon course sites, project sites, and workspace sites respectively. For 151example, some tools may be intended only in a course and project sites, while others may 152be intended only for workspace sites. 153 154Additional configuration may be specified as name-value pairs in <configuration> 155elements within the tool registration. This includes configuration that the portal will use, 156and can also include custom configuration values that the tool itself might process. 157Tool Registration Discovery 158Tools are packaged in web applications. Web applications that have tools to register 159must include the ToolListener, which finds the tool registration files in the web 160application and registers tools with the ToolManager. This is registered as a Listener in 161the web application’s web.xml file. 162 163Example: 164(in file /WEB-INF/web.xml in webapp jsf1.war) 165 166<!-- Listener which registers my Sakai tool --> 167 <listener> 168 <listener-class>org.sakaiproject.util.ToolListener</listener-class> 169 </listener> 170 171The ToolListener is provided by the tool-registration project of the kernel 172module. This is usually loaded into shared so it’s available to all web applications to use. 173 174The tool registration process enables ActiveTools, and grabs each tool’s Servlet API 175RequestDispatcher at registration time. We require that the Servlet name in the web.xml 176match the Tool well-known id, so that we can get the request dispatcher by Servlet name 177(i.e. tool id). 178 179JSF based tools are registered by including a servlet based on the Sakai JsfTool for each 180JSF tool. This Servlet is named with tool’s well know id, and is configured for each 181specific JSF tool being registered. 182 183This registry has two interfaces. One, the Tool API, which is not dependent on the 184Servlet API, is used to discover what tools are available and information about these 10 -4- 11 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 12
  • 5. 185tools. The other, the ActiveTool API, which is dependent on the Servlet API, is used 186to invoke tools to process requests and produce user interfaces. 187Tool Invokers 188There are three classes of Tool invokers in Sakai: 189 190 - Tool aggregators, which combine the user interface fragment produces by one or 191 more tools, possibly with some decoration, to produce a user interface document. 192 193 - Tool dispatchers, which direct the request to a specific tool, asking it to produce 194 the user interface document. 195 196 - Tool helper clients, which delegate portions of their user interface creating 197 responsibility to another helper tool. 198 199Aggregators use the request URL to pick a collection of tool placements to invoke and 200combine into a single display. For each tool placement, the tool is found from the 201registry, and invoked to produce a fragment of the response. The aggregator combines 202the responses, possibly adding other elements, to form a single response document. A 203portal that combines multiple tool placements into a single response acts as an 204aggregator. 205 206Dispatchers use the request URL to pick a single tool placement to invoke for the entire 207response. A portal that uses iframes for tool placement display acts as a dispatcher, 208dispatching to multiple tools for the responses in each iframe. A hierarchy browser that 209supports drill down into a particular tool placement or data item also acts as a dispatcher. 210In each case, the dispatcher places some meaning on the request URL to pick a particular 211tool placement (or set of placements) to invoke. 212 213Helper clients act like dispatchers (or even aggregators). They recognize parts of their 214request space (certain modes, for instance) that can be handled by some helper tool. The 215helper tool is found from the registry and invoked to handle the response while in this 216mode. Information is shared between the two tools in the tool placement scoped 217ToolSession. 218Tool Manager 219The Tool API is a kernel API that holds registrations of Tool objects and provides tool 220discovery for navigation and helper-tool clients. Tools are identified by a well-known id. 221This interface has no dependencies on the Servlet API. It is good for getting information 222about available tools. Use the ActiveTool interface to actually invoke tools. 223 224The Tool API is provided by the tool project of the kernel module. 225CurrentTool 226The ToolManager provides the “current” tool, i.e. the tool involved in the current 227request processing, i.e. a tool’s meta data, configuration and placement information. A 13 -5- 14 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 15
  • 6. 228tool can call the ToolManager.getCurrentTool() method. This is useful to get 229at the configuration parameters. 230 231Tool.getRegisteredConfig() provides those parameters set in the tool 232registration. Tool.getPlacementConfig() provides those parameters that are 233specific to this tool placement. This is mutable; the tool may change these Properties, 234expecting that the changes are permanent for this placement (other aspects of Tool are 235immutable). 236 237Tool.getConfig() gives another (read-only) view of the entire set of configuration 238properties for the tool, combining the registration and placement parameters. In this 239combination, the placement values override the registration value. 240 241The current Tool is also available from the request object in the “sakai.tool” 242attribute (Tool.TOOL). 243Active Tools 244The ActiveTool API is a kernel API that extends the Tool API to deliver 245ActiveTool objects (extensions of the Tool object) which can be invoked. 246 247The ActiveTool API is in the active-tool package of the kernel module. 248 249The ActiveToolManager is in fact a ToolManager. The default Sakai kernel 250registers the standard ActiveTool component as the implementation of both ToolManager 251and ActiveToolManager. 252 253Clients of the ActiveToolManager get ActiveTool instances. ActiveTools can be invoked 254with the include(), forward() or help() methods. The invocation uses the ActiveTool’s 255request dispatcher, and prepares the request object for the invocation. The particular 256context and Servlet path to show to the Tool, and the path information, are set as part of 257the tool invocation. This means that even a Servlet without Sakai awareness will likely 258form proper URLs if they base their URLs on the request information. 259Helper Tools 260Helper tools are tools that are designed to handle some smaller and common part of user 261interface that is found in many other tools. Examples include attachment choosers, 262options editors, and permissions editors. 263 264Tools that want a helper tool to handle a particular request find the helper tool from the 265ActiveTool registry. They place information for the helper into the ToolSession, which is 266shared between the client and the helper. Then they invoke the helper tool with the 267ActiveTool’s help() method. 268 269A Tool can map the helper to a part of the tool’s URL space. While requests come in to 270that space, the Tool can invoke the helper to handle the requests. 16 -6- 17 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 18
  • 7. 271 272When a tool invokes a helper, the current tool PlacementId and ToolSession remain the 273same, that of the client tool. The client tool and the helper tool use the ToolSession to 274communicate. Before invoking the helper, the client places certain attributes into the 275ToolSession. During and after processing of the helper tool, the client can read other 276attributes from the ToolSession to get information back from the helper. The attributes 277understood by each helper are determined by each helper and documented with the tool 278code. 279Tool Titlebars 280The portal is responsible for outputting a title bar for the tool. Several options in the tool 281registration (or tool placement) control how the title bar is output: 282 283 - "reset.button" - boolean - If true, a reset button will be rendered in the tool's 284 title bar. Defaults to true. Set to "false" for a tool that should not have a reset 285 button. 286 287 - "help.button" - boolean - If true, a help button will be rendered in the tool's 288 title bar. Defaults to true. Set to "false" for a tool that should not have a help 289 button. 290 291 - "help.id" - The Sakai help document ID for the help button. Defaults to the 292 tool ID. Used to link the help button into the Sakai help system. 293 294 - "help.url" - Alternative to "help.id". A URL to the help for this tool. 295 Allows the tool to host its help via a URL, in its own webapp or on an external 296 server. 297 298See section “Tool Registration” for an example of how to do this titlebar-related 299configuration. 300Tool- Portal Cooperation in HTML Generation 301Since a Sakai tool can output a complete HTML document, it must cooperate with the 302portal in generating the HTML. The tool must output certain HTML fragments that it 303receives from the portal. These fragments allow for tool skinning, as well as providing 304JavaScript hooks that the portal needs. 305 306Sakai-aware tools should use the Sakai CSS classes to style their HTML output. See the 307documents “Skinning Sakai Tools” and “Skinning Sakai Portal” for more information on 308skinning, including the specific CSS/HTML styles that tools should output. However, 309the portal is responsible for controlling skinning. The portal decides which CSS files 310Sakai-aware tools should output. The portal creates HTML fragments that include the 311<link>s for CSS styling, as well as <script>s for including portal JavaScript. The tool is 312responsible for outputting these fragments that it receives from the portal. 313 314To cooperate with the portal in HTML generation, all tools must use the 19 -7- 20 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 21
  • 8. 315“sakai.html.head” and “sakai.html.body.onload” request attributes as 316described below. 317 318sakai.html.head 319The tool should always inline the contents of the “sakai.html.head” request 320attribute in the HTML HEAD of the HTML documents it produces. This allows the 321portal to include JavaScript, CSS, and other fragments that it may need into the tool- 322generated HTML. For example, the Charon portal uses this mechanism to skin the tool. 323 324sakai.html.body.onload 325The tool should always inline the contents of the “sakai.html.body.onload” 326request attribute in the HTML BODY onload attribute of the HTML documents it 327produces. This allows the portal call JavaScript as needed. For example, the Charon 328portal uses this mechanism resize the tool’s frame to fit its content. 329 330For example, a JSF/JSP tool could include these attributes as follows: 331 332<html> 333<head> 334<%= request.getAttribute("sakai.html.head") %> 335Tool’s own head stuff here 336</head> 337<body onload="<%= request.getAttribute("sakai.html.body.onload") %>;foobar()"> 338Tool main output here 339</body> 340</html> 341 342sakai.html.head.css 343sakai.html.head.css.base 344sakai.html.head.css.skin 345sakai.html.head.js 346Most tools can safely ignore these request attributes. These attributes are subsets of the 347“sakai.html.head” attribute. If the tool needs fine-grained control of the skinning 348CSS files and JavaScript, it can use these attributes instead of the 349“sakai.html.head” attribute. 350 351Special Request Attributes 352Sakai-aware tools should be aware of several special HttpServletRequest attributes. 353These attributes are made available by the Sakai RequestFilter and the portal. 354 355HTML Fragment Mode 356Usually a tool should output a complete HTML document. However, if the 357“sakai.fragment” attribute is set in the request (Tool.FRAGMENT), the tool should 358produce an HTML fragment instead of a complete document. In this case, the tool 359should not output a <HTML>, <HEAD>, or <BODY> tag. 22 -8- 23 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 24
  • 9. 360 361Placement 362The Placement for the current request can be found in the 363“sakai.tool.placement” (Tool.PLACEMENT) attribute of the request. This is 364the basis of distinguishing one instance of a tool from another instance of the same tool, 365and the basis for selecting the proper ToolSession for this request. Configuration values 366can be read from the placement. Some configuration values may come from the tool 367registration, others from the particular instance of the tool. The opaque ID for the current 368placement can be found in the “sakai.tool.placement.id” 369(Tool.PLACEMENT_ID) attribute of the request. 370 371Tool Session 372The ToolSession object can be found in the “sakai.tool.session” 373(Tool.TOOL_SESSION) attribute. This is based on the request’s placement id, if 374present. This is also available from the SessionManager’s getCurrentToolSession() 375method. 376 377Sakai Session 378The Sakai-wide session is made available by the RequestFilter in the 379“sakai.session” (RequestFilter.ATTR_SESSION) attribute of the request. This is 380also available from the SessionManager’s getCurrentSession() method. 381Tool URLs 382When an ActiveTool is invoked, Sakai sets the context path, Servlet path and path info in 383the Request object that the tool sees. This is set to match the URL scheme of the invoker 384– that of the hierarchy browser or portal or navigator. It will not match any idea of the 385tool’s native context id or Servlet path (the tool usually has no Servlet path since it is 386usually not directly mapped to the URL space of the web application). It is set so that if 387the tool uses the normal means to produce a URL “back” to the tool, based on 388information from the request object, it will likely be as the navigation technology wishes 389it to be. 390 391The path info is of particular interest to the tool. Tools can map their various modes and 392functions to different URLs within this path part of the overall URL. The tool can use the 393path info it gets to figure out what to do. 394 395The full URL to a tool’s particular mode or function is a combination of the URL scheme 396of the navigation technology and that of the tool. For instance, a navigation component 397might define this URL to get to a particular tool placed for a particular part of the Sakai 398hierarchy: 399 400http://sakaiserver.org/umich/eecs/cs/311/001/chat/main 401 402The sakai.chat tool might define a URL scheme so that: 403 404/presence 25 -9- 26 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 27
  • 10. 405 406is interpreted to show the presence list, and 407 408/messages 409 410is interpreted to show the message list. The full URL to the part of the browser window 411showing a particular chat’s messages would then be: 412 413http://sakaiserver.org/umich/eecs/cs/311/001/chat/main/messages 414 415The navigation technology would interpret the beginning of the URL. When it sees the 416“chat” part, it maps that to the sakai.chat tool. When it sees the “main” part, it maps 417it to a particular placement of the chat tool (for this class section’s “main” chat). 418 419The navigation code now can invoke the tool with the proper placement id, ToolSession, 420context and Servlet paths, and the path info. 421 422The tool sees the path info: 423 424/messages 425 426when invoked, and has access to the Tool configuration, Placement configuration, and 427ToolSession data with any interaction state with this particular user at this instance of the 428tool. 429Integrating Servlet Technology Tools 430A Servlet, JSP or JSF system developed outside of Sakai can be used in Sakai as a tool 431with no or minor modification. 432 433At minimum, we must register the tool, using the tool registration .xml file and the 434ToolListener in the web.xml. And we must put the RequestFilter in front of all 435invocations of the Servlet, usually by mapping the filter to the Servlet name. 436 437The web.xml section that invokes our ToolListener looks like this: 438 439 <listener> 440 <listener-class> 441 org.sakaiproject.util.ToolListener 442 </listener-class> 443 </listener> 444 445This comes after all Servlet mapping entries. 446 447The request filter is registered like this: 448 449 <!-- Sakai request filter --> 450 <filter> 451 <filter-name>sakai.request</filter-name> 28 - 10 - 29 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 30
  • 11. 452 <filter-class> 453 org.sakaiproject.util.RequestFilter</filter-class> 454 </filter> 455 456And mapped for each tool Servlet defined, like this: 457 458 <filter-mapping> 459 <filter-name>sakai.request</filter-name> 460 <servlet-name>sakai.tool.well.known.id</servlet-name> 461 <dispatcher>REQUEST</dispatcher> 462 <dispatcher>FORWARD</dispatcher> 463 <dispatcher>INCLUDE</dispatcher> 464 </filter-mapping> 465 466See the request filter document for configuration details. 467 468A minimally integrated tool will be invokable for any non-fragment dispatch, and be tool 469session aware without knowing it by getting an HttpSession scoped to the tool placement. 470 471The problem likely to be found in this minimal integration is that the tool does not know 472anything about the context of the request, which becomes important when it selects which 473data items to work with. Context is usually found from a tool placement’s configuration, 474or the placement’s relation to the navigation path as established by the Sakai navigation 475component that invoked the tool. 476 477URLs generated by the tool will follow the navigation component’s scheme extended 478with the tool’s path, as described above, as long as the Servlet technology does not hard 479code the URLS, but uses the Request object fields (transport, server id, port, context path, 480Servlet path, path info) to form URL. The code must also properly call the Response 481object’s encodeURL methods(), as called for in the Servlet spec. 482 483Further integration, such as context awareness for data selection, fragment support, 484invocation of Sakai APIs, etc, can be added to the code when it recognizes it is running in 485Sakai. 486Integrating JSF Technology Tools 487JSF tools have special treatment in Sakai. The preferred method for Sakai tool 488development is based on JSF, using the Sakai custom UIComponents, JSP Tags and 489Renders. Sakai also provides integration projects to use Sun’s RI and MyFaces. 490 491JSF tools that are not fully Sakai compliant and dependent can be used in Sakai, much 492like Servlets can, using the same methods outlined in the previous section. But there are 493some additional integration features needed for JSF. 494 495To meet the needs of tool registration, where we have a Servlet name to associate with 496each Tool, we need a Servlet registration in the web.xml for each tool. Sakai provides a 497Servlet to use for each JSF tool, the JsfTool Servlet. This Servlet can be configured to 498customize it to each JSF tool view file location specifics. JsfTool also helps in the 31 - 11 - 32 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 33
  • 12. 499dispatching of tool requests to JSF tools. 500 501The JsfTool Servlet is in the tool project of the jsf module. 502 503A JsfTool based tool declaration in the web.xml for a JSF tool might look like this: 504 505 <!-- Sakai request filter, mapped to anything 506 that goes to the faces servlet --> 507 <filter> 508 <filter-name>sakai.request</filter-name> 509 <filter-class>org.sakaiproject.util.RequestFilter 510 </filter-class> 511 </filter> 512 513 <filter-mapping> 514 <filter-name>sakai.request</filter-name> 515 <servlet-name>Faces Servlet</servlet-name> 516 <dispatcher>REQUEST</dispatcher> 517 <dispatcher>FORWARD</dispatcher> 518 <dispatcher>INCLUDE</dispatcher> 519 </filter-mapping> 520 521 <!-- Sakai JSF Tool Servlet, for some tool --> 522 <servlet> 523 <servlet-name>sakai.well.known.tool.id</servlet-name> 524 <servlet-class>org.sakaiproject.jsf.util.JsfTool 525 </servlet-class> 526 <init-param> 527 <param-name>default</param-name> 528 <param-value>main</param-value> 529 </init-param> 530 <init-param> 531 <param-name>path</param-name> 532 <param-value>/test</param-value> 533 </init-param> 534 <load-on-startup> 1 </load-on-startup> 535 </servlet> 536 537 <!-- Faces Servlet --> 538 <servlet> 539 <servlet-name>Faces Servlet</servlet-name> 540 <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 541 <load-on-startup> 2 </load-on-startup> 542 </servlet> 543 544 <!-- Faces Servlet Mapping --> 545 <servlet-mapping> 546 <servlet-name>Faces Servlet</servlet-name> 547 <url-pattern>*.jsf</url-pattern> 548 </servlet-mapping> 549 550The FacesServlet and its mapping are registered in the normal way, using the *.jsf 551mapping form. 552 34 - 12 - 35 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 36
  • 13. 553In addition to the JsfTool Servlet, Sakai provides customization of the stock JSF 554implementations in the app project of the jsf module. This collection of application 555plugins, and a faces-config.xml to register them, work with our RequestFilter, ActiveTool 556dispatching, and JsfTool Servlet to enhance various aspects of JSF processing to support 557Sakai’s use of JSF (mostly in URL handling, and redirects after POST that don’t loose 558FacesMessages). To use these plugins, a set of .jar files from Sakai need to be bundled, 559along with the JSF api and implementation files, into each tool hosting webapp. For 560Sun’s RI, the webapp producing project’s project.xml would look like this: 561 562 <dependency> 563 <groupId>sakaiproject</groupId> 564 <artifactId>sakai2-jsf-tool</artifactId> 565 <version>sakai.2.0.0</version> 566 <properties> 567 <war.bundle>true</war.bundle> 568 </properties> 569 </dependency> 570 571 <dependency> 572 <groupId>sakaiproject</groupId> 573 <artifactId>sakai2-jsf-app</artifactId> 574 <version>sakai.2.0.0</version> 575 <properties> 576 <war.bundle>true</war.bundle> 577 </properties> 578 </dependency> 579 580 <dependency> 581 <groupId>sakaiproject</groupId> 582 <artifactId>sakai2-util-web</artifactId> 583 <version>sakai.2.0.0</version> 584 <properties> 585 <war.bundle>true</war.bundle> 586 </properties> 587 </dependency> 588 589 <!-- Sun JSF RI jars (jsf-impl, jsf-api) and 590 dependencies (commons-digester, commons-collections, 591 commons-digester, commons-beanutils) --> 592 <dependency> 593 <groupId>jsf</groupId> 594 <artifactId>jsf-impl</artifactId> 595 <version>1.1.01</version> 596 <properties> 597 <war.bundle>true</war.bundle> 598 </properties> 599 </dependency> 600 601 <dependency> 602 <groupId>jsf</groupId> 603 <artifactId>jsf-api</artifactId> 604 <version>1.1.01</version> 605 <properties> 606 <war.bundle>true</war.bundle> 37 - 13 - 38 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 39
  • 14. 607 </properties> 608 </dependency> 609 610 <dependency> 611 <groupId>commons-digester</groupId> 612 <artifactId>commons-digester</artifactId> 613 <version>1.6</version> 614 <properties> 615 <war.bundle>true</war.bundle> 616 </properties> 617 </dependency> 618 619 <dependency> 620 <groupId>commons-collections</groupId> 621 <artifactId>commons-collections</artifactId> 622 <version>3.1</version> 623 <properties> 624 <war.bundle>true</war.bundle> 625 </properties> 626 </dependency> 627 628 <dependency> 629 <groupId>commons-beanutils</groupId> 630 <artifactId>commons-beanutils</artifactId> 631 <version>1.7.0</version> 632 <properties> 633 <war.bundle>true</war.bundle> 634 </properties> 635 </dependency> 636 637 <dependency> 638 <groupId>taglibs</groupId> 639 <artifactId>standard</artifactId> 640 <version>1.0.4</version> 641 <properties> 642 <war.bundle>true</war.bundle> 643 </properties> 644 </dependency> 645 646 <dependency> 647 <groupId>jstl</groupId> 648 <artifactId>jstl</artifactId> 649 <version>1.0.2</version> 650 <properties> 651 <war.bundle>true</war.bundle> 652 </properties> 653 </dependency> 654 655JSF applications can choose to store the View between response and request on the server 656or in the client HTML. If stored on the server, it will be properly scoped to the tool 657placement because of Sakai’s HttpSession handling. Beans scoped for “session” which 658need instead to be scoped for tool placement are also properly handled by our scoped 659HttpSession. 660 40 - 14 - 41 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 42
  • 15. 661Support for fragment responses is provided, if desired, by using the Sakai View 662UIComponent (<sakai:view>) to wrap the entire response, instead of hard coding html 663header elements. This is recommended practice for Sakai tools, and is easily retrofitted 664to tools developed outside of Sakai. 665 666Support for direct access tool modes can be added using TBD. 667Tool Integration Chart 668Various features of Servlet or JSF tool integration are described in this chart on the left. 669The technologies that make this possible are listed on the right. 670 Placeable • Dispatch from a Sakai Navigator to get a placement id and configuration. The ability for the tool to exist in multiple • Include the RequestFilter with the places within Sakai, each with its own default tool placement detection and session and configuration tool scoped HttpSession • Access (if needed) the placement id and configuration objects in the Request. • Derive context from placement id or configuration. Tool • Include the ToolListener and a tool.xml file for each tool hosted by the webapp. The ability for the tool to be invoked and • Include the RequestFilter for session configured (default configuration) handling, etc. • Dispatch from a Sakai Navigator for default configuration. For JSF: • Include a JsfTool Servlet configuration for each tool hosted in the webapp, named to match the tool.xml registration. • Configure the JstTool with the path and default view for the tool. Redirect After Post For Servlet: • Respond to each POST with a redirect Part of Sakai standard URL handling, to the direct URL to the next tool mode. keeping the browser history clean. For JSF: • Use the <redirect /> in the JSF navigation rules. • Bundle the jsf-app project to get Sakai application plugins that help preserve FacesContext Messages between the redirect and the return call. Fragment For Servlet: • Recognize the sakai.fragment 43 - 15 - 44 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 45
  • 16. Produce a fragment of HTML that lives in attribute is set in the Request, and a <body> section, without header or footer. produce the fragment response. For JSF: • Use the Sakai View UIComponent instead of html header and footer code • Bundle the Sakai widgets in the webapp. Navigator URLs For Servlet: • Dynamically produce “return” URLs Produce URLs back to the tool that based on Request parameters (the Sakai matches the URL that the navigator Web util object can be useful). recognized as leading to the tool. Part of For JSF: Sakai standard URL handling. • bundle the jsf-app project to get Sakai applicaton plugins to control the URLs generated by Faces. Direct URLs TBD Produce URLs back to the tool, and recognize URLs to the tool that include complete information for view (mode) selection as well as “selector” information. Part of Sakai standard URL handling 671 672 673 674 675 676Glenn R. Golden.Sakai Tools.July 12, 6772005.https://source.sakaiproject.org/svn/reference/tags/sakai-2.5.4/docs/architecture/ 46 - 16 - 47 Copyright 2005, Sakai Foundation, Creative Commons Attribution 2.5 48