The Three P The Three P ’ ’ s s Portals, Portals, Portlets Portlets and and uPortal uPortal Matthew J. Dovey Matthew J. Dovey Oxford e Oxford e- Science Centre/RTS/OUCS Science Centre/RTS/OUCS [email protected] [email protected]
The Three PThe Three P’’ssPortals, Portals, PortletsPortlets and and uPortaluPortal
Matthew J. DoveyMatthew J. DoveyOxford eOxford e--Science Centre/RTS/OUCSScience Centre/RTS/OUCS
[email protected]@oucs.ox.ac.uk
PortalsPortals
Content SyndicationContent Syndication
Content Syndication Content Syndication –– Cocoon StyleCocoon Style
Portal EnginesPortal Engines
nn Commercial (more Commercial (more ““digital dashboardsdigital dashboards””))nn CA CA CleverPathCleverPath Portal (http://www3.ca.com/Solutions/Product.asp?ID=262)Portal (http://www3.ca.com/Solutions/Product.asp?ID=262)nn ElipvaElipva (http://(http://www.elipva.comwww.elipva.com))nn Epicentre (http://Epicentre (http://www.epicentric.comwww.epicentric.com))nn IBM IBM WebSphereWebSphere Portal (http://wwwPortal (http://www--4.ibm.com/software/webservers/portal)4.ibm.com/software/webservers/portal)nn JahiaJahia (http://www.xo3.com)(http://www.xo3.com)nn Mongoose Portal Studio (Mongoose Portal Studio (www.mongoosetech.com/products/portalstudio.htmlwww.mongoosetech.com/products/portalstudio.html))nn Sun Sun iPlanetiPlanet Portal Server (http://Portal Server (http://www.iplanet.com/products/iplanet_portalwww.iplanet.com/products/iplanet_portal))nn Oracle Portal (http://Oracle Portal (http://www.oracle.comwww.oracle.com))nn Microsoft Microsoft SharepointSharepoint ((http://www.microsoft.com/sharepointhttp://www.microsoft.com/sharepoint))
nn OpenSourceOpenSourcenn JetSpeedJetSpeed (http://(http://jakarta.apache.org/jetspeed/site/index.htmljakarta.apache.org/jetspeed/site/index.html))nn EnhydraEnhydra (http://(http://www.enhydra.orgwww.enhydra.org/)/)nn uPortaluPortal (http://mis105.mis.udel.edu/ja(http://mis105.mis.udel.edu/ja--sig/uportal/index.html)sig/uportal/index.html)nn The Grid Portal Development Kit (http://The Grid Portal Development Kit (http://dast.nlanr.net/Projects/GridPortaldast.nlanr.net/Projects/GridPortal/)/)
PortletsPortlets
PortletsPortlets –– Web ProxiesWeb Proxies
PortletsPortlets and Channelsand Channels
Data Source
ChannelPortlet
uPortaluPortal –– User PreferencesUser Preferences
uPortaluPortal –– User PreferencesUser Preferences
uPortaluPortal –– User PreferencesUser Preferences
uPortaluPortal –– User PreferencesUser Preferences
uPortaluPortal –– ““SkinsSkins””
uPortaluPortal –– ““SkinsSkins””
uPortaluPortal –– ProfilesProfiles
c.f. Window Managersc.f. Window Managers
uPortaluPortal -- ProfilesProfiles
uPortaluPortal –– Adding Adding PortletsPortlets
uPortaluPortal –– Adding Adding PortletsPortlets
uPortaluPortal –– Adding Adding PortletsPortlets
uPortaluPortal-- Adding Adding PortletsPortlets
uPortaluPortal –– Adding Adding PortletsPortlets
uPortaluPortal –– Adding Adding PortletsPortlets
PortletPortlet TypesTypes
nn Content Feed Content Feed portletsportletsnn External XML (RSS, XML)External XML (RSS, XML)
nn Proxy Proxy PortletsPortletsnn Web Proxy, Inline Frame, Image, AppletWeb Proxy, Inline Frame, Image, Applet
nn Interactive Interactive PortletsPortletsnn Local API (Local API (portletportlet API, API, uPortaluPortal channel)channel)nn Remote API (Remote API (uPortaluPortal SOAP, WSRP)SOAP, WSRP)
Anatomy of feed Anatomy of feed portletportlet
Web page
SSL
XML/RSS Source
XML/RSS Source
Formated HTML/WML
Formated HTML/WML
XSLT
CSS/Skin
XSLT
SSL
Select XSLT based on browser etc.
Select XSLT based on browser etc.
Sample SSLSample SSL<?xml version="1.0"?><?xml version="1.0"?>
<?xml<?xml--stylesheetstylesheet hrefhref="CGenericXSLT/RSS/rss="CGenericXSLT/RSS/rss--0_9x_webbrowser.xsl" type="text/0_9x_webbrowser.xsl" type="text/xslxsl" media="" media="netscapenetscape"?>"?>
<?xml<?xml--stylesheetstylesheet hrefhref="CGenericXSLT/RSS/rss="CGenericXSLT/RSS/rss--0_9x_webbrowser.xsl" type="text/0_9x_webbrowser.xsl" type="text/xslxsl" media="explorer"?>" media="explorer"?>
<?xml<?xml--stylesheetstylesheet hrefhref="CGenericXSLT/RSS/rss="CGenericXSLT/RSS/rss--0_9x_webbrowser.xsl" type="text/0_9x_webbrowser.xsl" type="text/xslxsl" media="opera"?>" media="opera"?>
<?xml<?xml--stylesheetstylesheet hrefhref="CGenericXSLT/RSS/rss="CGenericXSLT/RSS/rss--0_9x_pda.xsl" 0_9x_pda.xsl" type="text/type="text/xslxsl" media="" media="avantgoavantgo"?>"?>
<?xml<?xml--stylesheetstylesheet hrefhref="CGenericXSLT/RSS/rss="CGenericXSLT/RSS/rss--0_9x_wml.xsl" 0_9x_wml.xsl" type="text/type="text/xslxsl" media="WAP"?>" media="WAP"?>
<?xml<?xml--stylesheetstylesheet hrefhref="CGenericXSLT/RSS/rss="CGenericXSLT/RSS/rss--0_9x_wml.xsl" 0_9x_wml.xsl" type="text/type="text/xslxsl" media="up"?>" media="up"?>
RSS FeedsRSS Feeds<<rdf:RDFrdf:RDF xmlns:rdfxmlns:rdf="http://www.w3.org/1999/02/22="http://www.w3.org/1999/02/22--rdfrdf--syntaxsyntax--ns#" ns#"
xmlns:rssxmlns:rss="http://purl.org/rss/1.0/" ="http://purl.org/rss/1.0/" xmlns:dcxmlns:dc="http://purl.org/dc/elements/1.1/" ="http://purl.org/dc/elements/1.1/" xmlns:synxmlns:syn="http://purl.org/rss/1.0/modules/syndication/" ="http://purl.org/rss/1.0/modules/syndication/" xmlns:taxoxmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">="http://purl.org/rss/1.0/modules/taxonomy/"><<rss:channelrss:channel rdf:aboutrdf:about="http://="http://www.oucs.ox.ac.uk/rss/news.rsswww.oucs.ox.ac.uk/rss/news.rss">">
<<rss:titlerss:title>OUCS News</>OUCS News</rss:titlerss:title>><<rss:descriptionrss:description>http://>http://www.oucs.ox.ac.ukwww.oucs.ox.ac.uk/<//</rss:descriptionrss:description>><<rss:linkrss:link>Topical news from OUCS</>Topical news from OUCS</rss:linkrss:link>><<rss:itemsrss:items>>
<<rdf:Seqrdf:Seq>><<rdf:lirdf:li rdf:resourcerdf:resource="http://="http://www.oucs.ox.ac.ukwww.oucs.ox.ac.uk/courses"/>/courses"/><<rdf:lirdf:li rdf:resourcerdf:resource="http://="http://www.oucs.ox.ac.uk/opendaywww.oucs.ox.ac.uk/openday/"/>/"/>……
</</rdf:Seqrdf:Seq>></</rss:itemsrss:items>>
</</rss:channelrss:channel>><<rss:itemrss:item rdf:aboutrdf:about="http://="http://www.oucs.ox.ac.ukwww.oucs.ox.ac.uk/courses">/courses">
<<rss:titlerss:title>Trinity term course list now available</>Trinity term course list now available</rss:titlerss:title>><<rss:linkrss:link>http://>http://www.oucs.ox.ac.ukwww.oucs.ox.ac.uk/courses<//courses</rss:linkrss:link>><<rss:descriptionrss:description>Trinity term OUCS courses are now available for online booking.>Trinity term OUCS courses are now available for online booking. Click on Click on
the above title to view and book our courses. Our printed coursethe above title to view and book our courses. Our printed course brochure will also be available brochure will also be available from next week (7th April 2003).</from next week (7th April 2003).</rss:descriptionrss:description>>
<<dc:createddc:created>Mon 31 Mar 15:37</>Mon 31 Mar 15:37</dc:createddc:created>><<dc:creatordc:creator>senior</>senior</dc:creatordc:creator>>
</</rss:itemrss:item>>
RSS ModulesRSS Modules<?xml version="1.0" encoding="UTF<?xml version="1.0" encoding="UTF--8"?>8"?><<rdf:RDFrdf:RDF xmlns:ssxmlns:ss="http://purl.org/rss/1.0/modules/servicestatus/"="http://purl.org/rss/1.0/modules/servicestatus/"
xmlns:rssxmlns:rss="http://purl.org/rss/1.0/" ="http://purl.org/rss/1.0/" xmlns:rdfxmlns:rdf="http://www.w3.org/1999/02/22="http://www.w3.org/1999/02/22--rdfrdf--syntaxsyntax--ns#">ns#">
<<rss:channelrss:channel rdf:aboutrdf:about="http://="http://someurlsomeurl">"><<rss:titlerss:title>Services</>Services</rss:titlerss:title>><<rss:descriptionrss:description>Services</>Services</rss:descriptionrss:description>><<rss:linkrss:link>http://org</>http://org</rss:linkrss:link>><<ss:aboutStatsss:aboutStats>Percentage responses over last 100 samples</>Percentage responses over last 100 samples</ss:aboutStatsss:aboutStats>><<rss:itemsrss:items>>
<<rdf:Seqrdf:Seq>><<rdf:lirdf:li rss:resourcerss:resource="="urn:ceridwen.org:servicestatus:uidurn:ceridwen.org:servicestatus:uid=1"/>=1"/>
</</rdf:Seqrdf:Seq>></</rss:itemsrss:items>>
</</rss:channelrss:channel>>
<<rss:itemrss:item rdf:aboutrdf:about="="urn:ceridwen.org:servicestatus:uidurn:ceridwen.org:servicestatus:uid=1">=1"><<rss:titlerss:title>OLIS OPAC >OLIS OPAC -- telnet</telnet</rss:titlerss:title>><<rss:descriptionrss:description>Public access to OLIS via telnet (OPAC)</>Public access to OLIS via telnet (OPAC)</rss:descriptionrss:description>><<rss:linkrss:link>>urn:ceridwen.org:servicestatus:uidurn:ceridwen.org:servicestatus:uid=1</=1</rss:linkrss:link>><<ss:respondingss:responding>true</>true</ss:respondingss:responding>><<ss:lastCheckedss:lastChecked>2003>2003--0404--22T14:13:13Z</22T14:13:13Z</ss:lastCheckedss:lastChecked>><<ss:lastSeenss:lastSeen>2003>2003--0404--22T14:13:13Z</22T14:13:13Z</ss:lastSeenss:lastSeen>><<ss:availabilityss:availability>96.0</>96.0</ss:availabilityss:availability>>
</</rss:itemrss:item>>
Some Local FeedsSome Local Feeds
nn OUCSOUCSnn http://http://www.oucs.ox.ac.uk/rss/allnews.rsswww.oucs.ox.ac.uk/rss/allnews.rss
nn Oxford LibrariesOxford Librariesnn http://www.lib.ox.ac.uk/users/news/index.rsshttp://www.lib.ox.ac.uk/users/news/index.rss
nn EtcEtc……
Sample XSLTSample XSLT<<xsl:templatexsl:template match="match="rdf:RDFrdf:RDF" name="" name="documentNodedocumentNode">">
<!<!----<html><html><head><head><title><title>uPortaluPortal 2.0</title>2.0</title>
</head></head>
<body><body>---->><table width="100%" border="0" <table width="100%" border="0" cellspacingcellspacing="0" ="0" cellpaddingcellpadding="0">="0">
<<trtr align="left">align="left"><td width="100%" <td width="100%" valignvalign="bottom" class="="bottom" class="uportaluportal--channelchannel--subtitle">subtitle">
<<xsl:valuexsl:value--of select="./rss10:channel/rss10:description" />of select="./rss10:channel/rss10:description" /></td></td>
<<xsl:ifxsl:if test="./rss10:image != ''">test="./rss10:image != ''"><td><td>
<a target="_blank" <a target="_blank" hrefhref="{./rss10:image/rss10:link}">="{./rss10:image/rss10:link}"><<imgimg border="0" alt="{./rss10:image/rss10:title}" border="0" alt="{./rss10:image/rss10:title}" srcsrc="{./rss10:image/rss10:url}"/>="{./rss10:image/rss10:url}"/>
</a></a></td></td>
</</xsl:ifxsl:if>></</trtr>>
</table></table><<brbr />/>
<<xsl:applyxsl:apply--templates select="/rdf:RDF/rss10:item" />templates select="/rdf:RDF/rss10:item" /><<brbr />/>
<<xsl:applyxsl:apply--templates select="/rdf:RDF/rss10:textinput" />templates select="/rdf:RDF/rss10:textinput" /><!<!----</body></body>
</html></html>---->></</xsl:templatexsl:template>>
……
XML FeedXML Feednn Similar to RSSSimilar to RSSnn Need special XSLTNeed special XSLT
ProxiesProxies
nn Web ProxiesWeb Proxiesnn Need simple web pagesNeed simple web pagesnn Ideally use Ideally use uPortaluPortal CSS stylesCSS styles
nn IFramesIFramesnn Need newer browsersNeed newer browsersnn Potential security issuesPotential security issuesnn As per web proxies re contentAs per web proxies re content
nn AppletsAppletsnn ImagesImages
Web ProxyWeb Proxy
AppletApplet
ImageImage
Anatomy of Interactive Anatomy of Interactive PortletsPortlets
Web page
SSL
XML
Formated HTML/WML
XSLT
CSS/Skin
User Generated Events (from link clicks)
Select XSLT based on browser etc.
Local Java IChannel class or remoteSOAP WebService
Local Local PortletsPortlets
nn uPortaluPortal APIAPInn Proprietary Proprietary uPortaluPortal APIAPI
nn JAVA JAVA PortletPortlet APIAPInn Java Community SpecificationJava Community Specificationnn Implemented in Implemented in JetSpeedJetSpeednn Overtaken by WSRP/WSIAOvertaken by WSRP/WSIA
uPortaluPortal IChannelIChannel InterfaceInterfacepublic interface public interface IChannelIChannel{{public void public void setStaticData(ChannelStaticDatasetStaticData(ChannelStaticData sdsd) )
throws throws PortalExceptionPortalException;;public void public void setRuntimeData(ChannelRuntimeDatasetRuntimeData(ChannelRuntimeData
rd) throws rd) throws PortalExceptionPortalException;;public public ChannelRuntimePropertiesChannelRuntimeProperties
getRuntimePropertiesgetRuntimeProperties();();public void public void receiveEvent(PortalEventreceiveEvent(PortalEvent evev););public void public void renderXML(ContentHandlerrenderXML(ContentHandler out) throws out) throws
PortalExceptionPortalException;;}}
setRuntimeDatasetRuntimeData samplesamplethis.runtimeDatathis.runtimeData = rd;= rd;
String String sGuesssGuess = = runtimeData.getParameterruntimeData.getParameter ("guess");("guess");
if (if (sGuesssGuess != null)!= null){{
trytry{{
iGuessiGuess = = Integer.parseIntInteger.parseInt ((sGuesssGuess););}}catch (catch (NumberFormatExceptionNumberFormatException nfenfe)){{
// Assume that the guess was the same as last time// Assume that the guess was the same as last time}}
bFirstTimebFirstTime = false;= false;iGuessesiGuesses++;++;
renderXMLrenderXML samplesampleString String sSuggestsSuggest = null;= null;
if (if (iGuessiGuess < < iAnsweriAnswer))sSuggestsSuggest = "higher";= "higher";
else if (else if (iGuessiGuess > > iAnsweriAnswer))sSuggestsSuggest = "lower";= "lower";
StringWriterStringWriter w = new w = new StringWriterStringWriter ();();w.writew.write ("<?xml version='1.0'?>("<?xml version='1.0'?>\\n");n");w.writew.write ("<content>("<content>\\n");n");w.writew.write (" <(" <minNumminNum>" + >" + iMinNumiMinNum + "</+ "</minNumminNum>>\\n");n");w.writew.write (" <(" <maxNummaxNum>" + >" + iMaxNumiMaxNum + "</+ "</maxNummaxNum>>\\n");n");w.writew.write (" <guesses>" + (" <guesses>" + iGuessesiGuesses + "</guesses>+ "</guesses>\\n");n");w.writew.write (" <guess>" + (" <guess>" + iGuessiGuess + "</guess>+ "</guess>\\n");n");
if (if (bFirstTimebFirstTime)); // Do nothing; // Do nothing
else if (else if (iGuessiGuess == == iAnsweriAnswer)){{w.writew.write (" <answer>" + (" <answer>" + iAnsweriAnswer + "</answer>+ "</answer>\\n");n");bFirstTimebFirstTime = true;= true;iGuessesiGuesses = 0;= 0;iAnsweriAnswer = = getRandomNumbergetRandomNumber ((iMinNumiMinNum, , iMaxNumiMaxNum););
}}elseelsew.writew.write (" <suggest>" + (" <suggest>" + sSuggestsSuggest + "</suggest>+ "</suggest>\\n");n");
w.writew.write ("</content>("</content>\\n");n");
XSLT XSLT xsltxslt = new = new XSLT(thisXSLT(this););xslt.setXML(w.toStringxslt.setXML(w.toString());());xslt.setXSL(sslLocationxslt.setXSL(sslLocation, "main", , "main", runtimeData.getBrowserInforuntimeData.getBrowserInfo());());xslt.setTarget(outxslt.setTarget(out););xslt.setStylesheetParameter("baseActionURLxslt.setStylesheetParameter("baseActionURL", ", runtimeData.getBaseActionURLruntimeData.getBaseActionURL());());xslt.transformxslt.transform();();
Sample XSLTSample XSLT<<xsl:paramxsl:param name="name="baseActionURLbaseActionURL">default</">default</xsl:paramxsl:param>>
<<xsl:templatexsl:template match="content">match="content"><<xsl:choosexsl:choose>><<xsl:whenxsl:when test="suggest">test="suggest">Your guess of <Your guess of <xsl:valuexsl:value--of select="guess"/> was incorrect.of select="guess"/> was incorrect.Try again Try again ---- guess <span class="guess <span class="uportaluportal--channelchannel--strong"><strong"><xsl:valuexsl:value--of select="suggest"/></span>!<of select="suggest"/></span>!<brbr />/>You have made <You have made <xsl:valuexsl:value--of select="guesses"/> guesses.of select="guesses"/> guesses.
</</xsl:whenxsl:when>><<xsl:whenxsl:when test="answer">test="answer">You got it after <span class="You got it after <span class="uportaluportal--channelchannel--strong"><strong"><xsl:valuexsl:value--of select="guesses"/></span> tries!of select="guesses"/></span> tries!The answer was <span class="The answer was <span class="uportaluportal--channelchannel--strong"><strong"><xsl:valuexsl:value--of select="answer"/></span>!<of select="answer"/></span>!<brbr />/><p>Please play again...</p><p>Please play again...</p>
</</xsl:whenxsl:when>><<xsl:otherwisexsl:otherwise>This is a number guessing game.<>This is a number guessing game.<brbr /><//></xsl:otherwisexsl:otherwise>>
</</xsl:choosexsl:choose> >
I am thinking of a number between I am thinking of a number between <<xsl:valuexsl:value--of select="of select="minNumminNum"/> and "/> and <<xsl:valuexsl:value--of select="of select="maxNummaxNum"/>.<"/>.<brbr />/>What's your guess?What's your guess?<form action="{$<form action="{$baseActionURLbaseActionURL}" method="post">}" method="post"><input type="hidden" name="<input type="hidden" name="uP_rootuP_root" value="me"/>" value="me"/><input type="text" name="guess" size="4" class="<input type="text" name="guess" size="4" class="uportaluportal--inputinput--text"/>text"/><input type="submit" value="Submit" class="<input type="submit" value="Submit" class="uportaluportal--button"/>button"/>
</form></form></</xsl:templatexsl:template>>
Customisation Customisation –– IPersonIPerson InterfaceInterface
public interface public interface IPersonIPerson extends extends IAdditionalDescriptorIAdditionalDescriptor, , IBasicEntityIBasicEntity{{public static final String USERNAME = "username";public static final String USERNAME = "username";public void public void setIDsetID ((intint sIDsID););public public intint getIDgetID ();();public void public void setFullNamesetFullName (String (String sFullNamesFullName););public String public String getFullNamegetFullName ();();public Object public Object getAttributegetAttribute (String key);(String key);public void public void setAttributesetAttribute (String key, Object value);(String key, Object value);public Enumeration public Enumeration getAttributesgetAttributes ();();public Enumeration public Enumeration getAttributeNamesgetAttributeNames ();();public void public void setSecurityContextsetSecurityContext ((ISecurityContextISecurityContext securityContextsecurityContext););public public ISecurityContextISecurityContext getSecurityContextgetSecurityContext ();();public public booleanboolean isGuestisGuest ();();
}}
uPortaluPortal –– Adding Adding PortletsPortlets
Remote Remote PortletsPortlets
nn uPortaluPortal SOAP APISOAP APInn SOAP Version of SOAP Version of IChannelIChannel APIAPI
nn WSRP/WSIAWSRP/WSIAnn OASIS Standard for Interactive Applications OASIS Standard for Interactive Applications
and Remote Portalsand Remote Portalsnn http://www.oasishttp://www.oasis--
open.org/committees/tc_home.php?wg_abbrev=wsrpopen.org/committees/tc_home.php?wg_abbrev=wsrpnn 17 April 2003 Draft 17 April 2003 Draft --> 85 pages> 85 pages
Remote Remote PortletsPortlets AnatomyAnatomy
Web page
Formated HTML/WML
CSS/Skin
User Generated Events (from link clicks)
Local IChannel SOAP Stub SOAP WebService
Function Callsand Responses
over SOAP
Init: Browser Type/User Information etc
uPortaluPortal –– Adding Adding PortletsPortlets
uPortaluPortal Remote Channel InterfaceRemote Channel Interfacepublic interface public interface RemoteChannelRemoteChannel extends Remote {extends Remote {public void public void authenticate(Stringauthenticate(String username, String password) throws username, String password) throws
RemoteExceptionRemoteException, , org.jasig.portal.channels.remotechannel.Exceptionorg.jasig.portal.channels.remotechannel.Exception;;
public String public String instantiateChannel(StringinstantiateChannel(String fnamefname) throws ) throws RemoteExceptionRemoteException, , org.jasig.portal.channels.remotechannel.Exceptionorg.jasig.portal.channels.remotechannel.Exception;;
public Element public Element renderChannel(StringrenderChannel(String instanceIdinstanceId, , ChannelRuntimeDataChannelRuntimeDataruntimeDataruntimeData) throws ) throws RemoteExceptionRemoteException, , org.jasig.portal.channels.remotechannel.Exceptionorg.jasig.portal.channels.remotechannel.Exception;;
public void public void receiveEvent(StringreceiveEvent(String instanceIdinstanceId, , PortalEventPortalEvent portalEventportalEvent) ) throws throws RemoteExceptionRemoteException, , org.jasig.portal.channels.remotechannel.Exceptionorg.jasig.portal.channels.remotechannel.Exception;;
public void public void freeChannel(StringfreeChannel(String instanceIdinstanceId) throws ) throws RemoteExceptionRemoteException, , org.jasig.portal.channels.remotechannel.Exceptionorg.jasig.portal.channels.remotechannel.Exception;;
public void logout() throws public void logout() throws RemoteExceptionRemoteException, , org.jasig.portal.channels.remotechannel.Exceptionorg.jasig.portal.channels.remotechannel.Exception;;
}}
WSRP OverviewWSRP Overview
Perform Portlet Action
Destroy Portlet Instance
Create Portlet Instance
WSRP Consumer(Portal)
WSRP Producer(Service)Adds
Portlet
RemovesPortlet
ClicksAction
Get Portlet MarkupI S
S
User
ViewsPortlet
Allocate new Instance
Generate Markup,(opt: create Session)
Action Handling(opt: create Session)
I
I
A
I A
I
I A
I
I S
I
Destroy instance
I
AS
I A
Further ReadingFurther Reading
nn http://www.jahttp://www.ja--sig.orgsig.orgnn http://mis105.mis.udel.edu/jahttp://mis105.mis.udel.edu/ja--sig/uportal/sig/uportal/nn http://www.oasishttp://www.oasis--
open.org/committees/tc_home.php?wg_abbrevopen.org/committees/tc_home.php?wg_abbrev==wsrpwsrp
nn http://www.jisc.ac.uk/index.cfm?name=tehttp://www.jisc.ac.uk/index.cfm?name=techwatch_report_0103chwatch_report_0103