Added: portals/site-live/pluto/v301/portlet-api.html URL: http://svn.apache.org/viewvc/portals/site-live/pluto/v301/portlet-api.html?rev=1834161&view=auto ============================================================================== --- portals/site-live/pluto/v301/portlet-api.html (added) +++ portals/site-live/pluto/v301/portlet-api.html Fri Jun 22 19:35:14 2018 @@ -0,0 +1,398 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + + + + + + + + + + + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>Pluto - Portlet Concepts</title> + <style type="text/css" media="all"> + @import url("../css/maven-base.css"); + @import url("../css/maven-theme.css"); + @import url("../css/site.css"); + </style> + <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" /> + </head> + <body class="composite"> + <div id="banner"> + <a href="http://portals.apache.org/pluto/" id="bannerLeft"> + + <img src="http://portals.apache.org/pluto/images/apache-portals.gif" alt="" /> + + </a> + <span id="bannerRight"> + + <img src="http://portals.apache.org/pluto/images/banner.png" alt="" /> + + </span> + <div class="clear"> + <hr/> + </div> + </div> + <div id="breadcrumbs"> + + + + + + + + + <div class="xleft"> + Last Published: 2018-06-22 + | + <a href="http://portals.apache.org/pluto" class="externalLink">Home</a> + </div> + <div class="xright"> <a href="../portlet-3.0-apidocs/index.html">Portlet 3.0 API</a> + | + <a href="../portlet-2.0-apidocs/index.html">Portlet 2.0 API</a> + | + <a href="../portlet-1.0-apidocs/index.html">Portlet 1.0 API</a> + | + <a href="http://jcp.org/en/jsr/detail?id=362" class="externalLink">JSR 362 JCP Page</a> + | + <a href="http://jcp.org/en/jsr/detail?id=286" class="externalLink">JSR 286 JCP Page</a> + | + <a href="http://jcp.org/en/jsr/detail?id=168" class="externalLink">JSR 168 JCP Page</a> + + + + + + + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + <div id="leftColumn"> + <div id="navcolumn"> + + + + + + + + + <h5>The Pluto Project</h5> + <ul> + + <li class="none"> + <a href="../index.html">About Pluto</a> + </li> + + <li class="none"> + <a href="../mission.html">Mission</a> + </li> + + <li class="none"> + <a href="../download.html">Download</a> + </li> + + <li class="none"> + <a href="../news.html">News</a> + </li> + + <li class="none"> + <a href="../security.html">Security</a> + </li> + + <li class="none"> + <a href="../status.html">Status</a> + </li> + + <li class="none"> + <a href="../architecture.html">Architecture</a> + </li> + + <li class="none"> + <a href="../resources.html">Resources</a> + </li> + + <li class="none"> + <a href="../faq.html">FAQ</a> + </li> + + <li class="none"> + <a href="http://wiki.apache.org/portals/Pluto" class="externalLink">Wiki</a> + </li> + + <li class="none"> + <a href="https://issues.apache.org/jira/browse/PLUTO" class="externalLink">Issue Tracker (JIRA)</a> + </li> + + <li class="none"> + <a href="../helping.html">Get Involved</a> + </li> + </ul> + <h5>Pluto 3.0</h5> + <ul> + + <li class="none"> + <a href="../v301/getting-started.html">Getting Started</a> + </li> + + <li class="none"> + <a href="../v301/deploying.html">Deploying Portlets</a> + </li> + + <li class="none"> + <strong>Portlet Concepts</strong> + </li> + + <li class="none"> + <a href="../v301/v3Features.html">Version 3 Features</a> + </li> + + <li class="none"> + <a href="../v301/tck.html">Using the TCK</a> + </li> + + <li class="none"> + <a href="../v301/release-notes.html">Release Notes</a> + </li> + </ul> + <h5>Pluto 2.0</h5> + <ul> + + <li class="none"> + <a href="../v20/getting-started.html">Getting Started</a> + </li> + + <li class="none"> + <a href="../v20/deploying.html">Deploying</a> + </li> + + <li class="none"> + <a href="../v20/embedding.html">Embedding</a> + </li> + + <li class="none"> + <a href="../v20/release-notes.html">Release Notes</a> + </li> + + <li class="none"> + <a href="../v20/app-servers.html">App Servers</a> + </li> + + <li class="none"> + <a href="../v20/powered.html">Powered By Pluto</a> + </li> + </ul> + <h5>Pluto 1.1</h5> + <ul> + + <li class="none"> + <a href="../v11/getting-started.html">Getting Started</a> + </li> + + <li class="none"> + <a href="../v11/deploying.html">Deploying</a> + </li> + + <li class="none"> + <a href="../v11/release-notes.html">Release Notes</a> + </li> + </ul> + <h5>Subprojects</h5> + <ul> + + <li class="none"> + <a href="../subprojects/subprojects.html">Overview</a> + </li> + </ul> + <h5>Project Info</h5> + <ul> + + <li class="none"> + <a href="../project-summary.html">Project Summary</a> + </li> + + <li class="none"> + <a href="../team-list.html">Project Team</a> + </li> + + <li class="none"> + <a href="../license.html">Project License</a> + </li> + + <li class="none"> + <a href="../mail-lists.html">Mailing Lists</a> + </li> + + <li class="none"> + <a href="../source-repository.html">Source Repository</a> + </li> + + <li class="none"> + <a href="../issue-tracking.html">Issue Tracking</a> + </li> + </ul> + <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> + <img alt="Built by Maven" src="../images/logos/maven-feather.png"></img> + </a> + + + + + + + + + </div> + </div> + <div id="bodyColumn"> + <div id="contentBox"> + <div class="section"><h2><a name="Portlet_Concepts"></a>Portlet Concepts</h2> +<div class="section"><h3><a name="The_Portlet_Phase_Model"></a>The Portlet Phase Model</h3> +<p> + When a request arrives at a portal targeted to a portlet, the portlet container + executes portlet code according to a phase model. + </p> +<img src="../images/phaseModel.png" /><p> + There are three processing stages containing five processing phases, defined as follows: + </p> +<p> + The portlet API allows creation of URLs that can be included into portlet + markup in order to activate the portlet processing stages. + </p> +<ul><li> + The Action URL, or Partial Action URL triggers preparation stage processing. + </li> +<li> + The Render URL triggers aggregation stage processing. + </li> +<li> + The Resource URL triggers resourec stage processing. + </li> +</ul> +<p> + When a stage is triggered, the processing phases within that stage are executed. + </p> +<dl><dt> + Action Phase + </dt> +<dd> + The portlet can perform updates and set up render state for the Aggregation Stage. + The action phase is initiated thru form post targeting the portlet. + During action phase processing, the portlet can fire events, resulting in event phase processing. + </dd> +<dt> + Event Phase + </dt> +<dd> + During event phase processing, the portlet container routes any fired events to + the portlets subscribed to the events. + Portlets define the events they can fire and receive through configuration. + </dd> +<dt> + Header Phase (new with V3): + </dt> +<dd> + Called for all portlets before the overall portal response is committed. + Portlets can contribute header values, cookies, and markup for the HEAD section + and can declare page resource dependencies. + </dd> +<dt> + Render Phase: + </dt> +<dd> + Called after the header phase for all portlets has been executed. + The portlet generates its markup for aggregation into the portal page. + During the render phase, the portlet may only generate markup that the portal + is able to integrate into the portal page. + </dd> +<dt> + Resource Stage + </dt> +<dd> + Initiated by an Ajax request from portlet JavaScript code using a resource URL. + During the resource phase, the portlet has nearly complete control over + the response returned to the client. + It may produce markup, JSON data, or binary data, for example. + </dd> +</dl> +<p> + The portlet container drives portlet phase execution + by setting up the execution environment for each portlet and phase and + calling the corresponding portlet lifecycle methods. + </p> +<p> + The portlet participates in the phase model + by implementing the corresponding lifecycle methods + and by using the portlet API to carry out the appropriate tasks. + </p> +</div> +<div class="section"><h3><a name="The_Portlet_Lifecyce_Methods"></a>The Portlet Lifecyce Methods</h3> +<img src="../images/lifecycleMethods.png" /><p> + Each portlet phase has a corresponding lifecycle method. + The portlet container executes the prrocessing phase by calling the portlet lifecycle method. + Each phase is provided with specific request and response objects. + Methods can implemented using the interfaces + <code>Portlet, ResourceServingPortlet, EventPortlet</code> and <code>HeaderPortlet</code>. + Portlets can be configured through annotation or using the portlet deployment descriptor. + </p> +<p> + Portlets can implement the lifecycle methods by extending the GenericPortlet class + or by using the extended method annotations. + </p> +<p> + When the extended method annotations are used, portlet lifecycle methods can be arbitrary methods in java classes. + The methods are identified by the portlet lifecycle method annotations and have + relaxed method signature requirements as compared to interface methods. + When the method annotations are used, portlets are implicitly configured if no + data beyond that provided in the annotation is required. + Additional configuration is possible through annotation or portlet deployment descriptor. + </p> +<ul><li> + Set up / tear down: @InitMethod, @DestroyMethod + </li> +<li> + Preparation stage: @ActionMethod, @EventMethod, + </li> +<li> + Aggregation stage: @HeaderMethod, @RenderMethod, + </li> +<li> + Resource stage: @ServeResourceMethod + </li> +</ul> +</div> +</div> + + </div> + </div> + <div class="clear"> + <hr/> + </div> + <div id="footer"> + <div class="xright">© + 2004-2018 + + Apache Software Foundation + + + + + + + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + </body> +</html>
Added: portals/site-live/pluto/v301/release-notes.html URL: http://svn.apache.org/viewvc/portals/site-live/pluto/v301/release-notes.html?rev=1834161&view=auto ============================================================================== --- portals/site-live/pluto/v301/release-notes.html (added) +++ portals/site-live/pluto/v301/release-notes.html Fri Jun 22 19:35:14 2018 @@ -0,0 +1,401 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + + + + + + + + + + + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>Pluto - Pluto Release Notes</title> + <style type="text/css" media="all"> + @import url("../css/maven-base.css"); + @import url("../css/maven-theme.css"); + @import url("../css/site.css"); + </style> + <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" /> + </head> + <body class="composite"> + <div id="banner"> + <a href="http://portals.apache.org/pluto/" id="bannerLeft"> + + <img src="http://portals.apache.org/pluto/images/apache-portals.gif" alt="" /> + + </a> + <span id="bannerRight"> + + <img src="http://portals.apache.org/pluto/images/banner.png" alt="" /> + + </span> + <div class="clear"> + <hr/> + </div> + </div> + <div id="breadcrumbs"> + + + + + + + + + <div class="xleft"> + Last Published: 2018-06-22 + | + <a href="http://portals.apache.org/pluto" class="externalLink">Home</a> + </div> + <div class="xright"> <a href="../portlet-3.0-apidocs/index.html">Portlet 3.0 API</a> + | + <a href="../portlet-2.0-apidocs/index.html">Portlet 2.0 API</a> + | + <a href="../portlet-1.0-apidocs/index.html">Portlet 1.0 API</a> + | + <a href="http://jcp.org/en/jsr/detail?id=362" class="externalLink">JSR 362 JCP Page</a> + | + <a href="http://jcp.org/en/jsr/detail?id=286" class="externalLink">JSR 286 JCP Page</a> + | + <a href="http://jcp.org/en/jsr/detail?id=168" class="externalLink">JSR 168 JCP Page</a> + + + + + + + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + <div id="leftColumn"> + <div id="navcolumn"> + + + + + + + + + <h5>The Pluto Project</h5> + <ul> + + <li class="none"> + <a href="../index.html">About Pluto</a> + </li> + + <li class="none"> + <a href="../mission.html">Mission</a> + </li> + + <li class="none"> + <a href="../download.html">Download</a> + </li> + + <li class="none"> + <a href="../news.html">News</a> + </li> + + <li class="none"> + <a href="../security.html">Security</a> + </li> + + <li class="none"> + <a href="../status.html">Status</a> + </li> + + <li class="none"> + <a href="../architecture.html">Architecture</a> + </li> + + <li class="none"> + <a href="../resources.html">Resources</a> + </li> + + <li class="none"> + <a href="../faq.html">FAQ</a> + </li> + + <li class="none"> + <a href="http://wiki.apache.org/portals/Pluto" class="externalLink">Wiki</a> + </li> + + <li class="none"> + <a href="https://issues.apache.org/jira/browse/PLUTO" class="externalLink">Issue Tracker (JIRA)</a> + </li> + + <li class="none"> + <a href="../helping.html">Get Involved</a> + </li> + </ul> + <h5>Pluto 3.0</h5> + <ul> + + <li class="none"> + <a href="../v301/getting-started.html">Getting Started</a> + </li> + + <li class="none"> + <a href="../v301/deploying.html">Deploying Portlets</a> + </li> + + <li class="none"> + <a href="../v301/portlet-api.html">Portlet Concepts</a> + </li> + + <li class="none"> + <a href="../v301/v3Features.html">Version 3 Features</a> + </li> + + <li class="none"> + <a href="../v301/tck.html">Using the TCK</a> + </li> + + <li class="none"> + <strong>Release Notes</strong> + </li> + </ul> + <h5>Pluto 2.0</h5> + <ul> + + <li class="none"> + <a href="../v20/getting-started.html">Getting Started</a> + </li> + + <li class="none"> + <a href="../v20/deploying.html">Deploying</a> + </li> + + <li class="none"> + <a href="../v20/embedding.html">Embedding</a> + </li> + + <li class="none"> + <a href="../v20/release-notes.html">Release Notes</a> + </li> + + <li class="none"> + <a href="../v20/app-servers.html">App Servers</a> + </li> + + <li class="none"> + <a href="../v20/powered.html">Powered By Pluto</a> + </li> + </ul> + <h5>Pluto 1.1</h5> + <ul> + + <li class="none"> + <a href="../v11/getting-started.html">Getting Started</a> + </li> + + <li class="none"> + <a href="../v11/deploying.html">Deploying</a> + </li> + + <li class="none"> + <a href="../v11/release-notes.html">Release Notes</a> + </li> + </ul> + <h5>Subprojects</h5> + <ul> + + <li class="none"> + <a href="../subprojects/subprojects.html">Overview</a> + </li> + </ul> + <h5>Project Info</h5> + <ul> + + <li class="none"> + <a href="../project-summary.html">Project Summary</a> + </li> + + <li class="none"> + <a href="../team-list.html">Project Team</a> + </li> + + <li class="none"> + <a href="../license.html">Project License</a> + </li> + + <li class="none"> + <a href="../mail-lists.html">Mailing Lists</a> + </li> + + <li class="none"> + <a href="../source-repository.html">Source Repository</a> + </li> + + <li class="none"> + <a href="../issue-tracking.html">Issue Tracking</a> + </li> + </ul> + <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> + <img alt="Built by Maven" src="../images/logos/maven-feather.png"></img> + </a> + + + + + + + + + </div> + </div> + <div id="bodyColumn"> + <div id="contentBox"> + <subtitle></subtitle><div class="section"><h2><a name="Release_Notes_-_Pluto_3.0.1"></a>Release Notes - Pluto 3.0.1</h2> +<p> + Pluto version 3.0.1 is a completely new release dedicated to the + implementation of JSR 362 (Portlet Specification), version 3.0. + </p> +<p></p> +<div class="section"><h3><a name="Bug"></a>Bug</h3> +<ul><li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-629">PLUTO-629</a>] - TCK: A forward after an include in the Action or Event phase results in a status=500 error +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-656">PLUTO-656</a>] - various portlet.xml files are not valid +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-657">PLUTO-657</a>] - pluto fails to add head scripts with CDATA +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-658">PLUTO-658</a>] - TCK: Contesting V2ADDLENVIRONMENTTESTS_SPEC2_10_CONTEXT_GETREALPATH +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-659">PLUTO-659</a>] - TCK: Contesting V2AddlFilterTests_SPEC2_20_Action_filter1 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-660">PLUTO-660</a>] - servlet-api should be scope "provided" +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-664">PLUTO-664</a>] - TCK: Contesting V2RequestTests_ClientDataRequest_ApiAction_getReader2 and _getPortletInputStream2 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-665">PLUTO-665</a>] - TCK: V3ResourceParametersTests copy+paste error leaves tests unimplemented +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-666">PLUTO-666</a>] - TCK: Contesting AddlResponseTests_SPEC2_12_Render +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-667">PLUTO-667</a>] - TCK: Contesting V2ResponseTests_MimeResponse_ApiRender_setContentType4 and V2ResponseTests_RenderResponse_ApiRender_setContentType2 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-668">PLUTO-668</a>] - TCK: Contesting V3URLTests_BaseURL_append and V3URLTests_BaseURL_append2 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-669">PLUTO-669</a>] - V3URLTests_BaseURL_append incorrectly calls BaseURL.append(Appendable, boolean) instead of BaseURL.append(Appendable) +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-670">PLUTO-670</a>] - TCK: Contesting getParameterMap tests that verify an "unmodifiable" Map object +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-671">PLUTO-671</a>] - TCK: Contesting V2AddlEnvironmentTests_SPEC2_17_EventPreferences_setValues4 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-672">PLUTO-672</a>] - TCK: Contesting tests that expect JspException to be thrown when the copyCurrentRenderParameters attribute contains a non-boolean value +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-673">PLUTO-673</a>] - TCK: Contesting V2EnvironmentTests_PortalContext_ApiRender_getPortalInfo1 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-674">PLUTO-674</a>] - TCK: Contesting V2EnvironmentTests_PortletContext_ApiRender_getServerInfo1 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-675">PLUTO-675</a>] - TCK: Improve V2EnvironmentTests_PortletContext_ApiRender_getPortletContextName1 and V2EnvironmentTests_PortletContext_ApiRender_getPortletContextName2 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-676">PLUTO-676</a>] - TCK: Contesting V2EnvironmentTests_PortletContext_ApiRender_getRealPath1 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-677">PLUTO-677</a>] - TCK: Contesting DispatcherTests3S_SPEC2_19_ForwardServletRender_dispatch4 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-678">PLUTO-678</a>] - TCK: Contesting V2AddlRequestTests_SPEC2_11_Render_parameters13 and V3HeaderPortletTests_SPEC15_Header_parameters13 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-679">PLUTO-679</a>] - TCK: Contesting V2RequestTests_PortletRequest_ApiAction_getContextPath1 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-680">PLUTO-680</a>] - TCK: Contesting tests that reference Pluto-specific security roles +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-683">PLUTO-683</a>] - TCK: Contesting tests that invoke a ResourceURL that was written to the response with BaseURL.write(Writer writer, boolean escapeXML) when passing escapeXML=true +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-686">PLUTO-686</a>] - TCK: Contesting tests that invoke portletConfig.getContainerRuntimeOptions +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-687">PLUTO-687</a>] - TCK: Contesting tests for the javax.portlet.actionScopedRequestAttributes runtime option +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-688">PLUTO-688</a>] - V3.0 Portlet Hub Demo tries to call nonexistent setValue function on PortletParameters object +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-689">PLUTO-689</a>] - Typo in javadoc for ActionResponse.createRedirectURL(MimeResponse.Copy) +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-691">PLUTO-691</a>] - PortletURL.setBeanParameter(PortletSerializable) missing "@since 3.0" in Javadoc +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-693">PLUTO-693</a>] - PortletURLImpl.setBeanParameter(PortletSerializable bean) does not attempt to determine the name of the specified bean +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-694">PLUTO-694</a>] - XML validation error in WEB-INF/portlet.xml descriptor in the generic-portlet-archetype +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-695">PLUTO-695</a>] - Missing class-level @since 3.0 in Javadoc for various new classes/interfaces/annotations introduced in Portlet 3.0 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-696">PLUTO-696</a>] - TCK: Contesting V2 tests that expect PortletURL.setParameter(String,String...) to remove the value when null is passed in a V2.0 portlet +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-698">PLUTO-698</a>] - TCK: Contesting V2AddlFilterTests which assume getInitParameterNames returns parameters in a particular order +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-701">PLUTO-701</a>] - Typo in javadoc for RenderStateScoped +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-702">PLUTO-702</a>] - Do not include beans.xml in PortletHubDemo since Pluto doesn't require CDI for portlet registration +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-706">PLUTO-706</a>] - Make TestResult serializable +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-707">PLUTO-707</a>] - Make V2EnvironmentTests_PortletSession_ApiRender_Binding serializable +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-711">PLUTO-711</a>] - AbstractPortletConfigImpl.getSupportedLocales() does not parse language an country codes +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-712">PLUTO-712</a>] - TCK: Contesting V3AnnotationPortletConfigTests_SPEC2_28_SupportedLocales_declaringSupportedLocales1 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-713">PLUTO-713</a>] - TCK: Contesting AnnotationPortletApplicationConfigTests_SPEC1_28_DefaultNamespaceURI +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-714">PLUTO-714</a>] - AnnotationPortletArtifactValidityTests redundantly specify the @PortletApplication annotation 4 times +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-715">PLUTO-715</a>] - TCK: Contesting AnnotationPortletApplicationConfigTests_SPEC1_28_PortletContainerRuntimeOptions +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-716">PLUTO-716</a>] - Release Preparation 3.0.1 +</li> +</ul> +</div> +<div class="section"><h3><a name="Improvement"></a>Improvement</h3> +<ul><li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-661">PLUTO-661</a>] - Enable the Portlet 3.0 TCK to use an alternate Firefox/Chrome browser binary and assume Chrome can be run headless +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-662">PLUTO-662</a>] - Introduce a liferay profile for the tck +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-663">PLUTO-663</a>] - Migrate Portlet 3.0 TCK and demos from java.util.logging to SLF4J +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-703">PLUTO-703</a>] - Extract PortletV3Demo TagLibPortlet.ActEvtProxyServlet inner-class into a separate ActEvtProxyServlet.java source file +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-704">PLUTO-704</a>] - PortletV3Demo RedirectPortlet has incomplete/non-validating definition in portlet.xml +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-705">PLUTO-705</a>] - Upgrade to Selenium 3 +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-708">PLUTO-708</a>] - Selenium should clear the TCK login username and password fields prior to entering text +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-709">PLUTO-709</a>] - Making TCKSimpleTestDriver extendable +</li> +<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/PLUTO-710">PLUTO-710</a>] - Adding a TCKLiferayTestDriver extension +</li> +</ul> +</div> +</div> + + </div> + </div> + <div class="clear"> + <hr/> + </div> + <div id="footer"> + <div class="xright">© + 2004-2018 + + Apache Software Foundation + + + + + + + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + </body> +</html> Added: portals/site-live/pluto/v301/tck.html URL: http://svn.apache.org/viewvc/portals/site-live/pluto/v301/tck.html?rev=1834161&view=auto ============================================================================== --- portals/site-live/pluto/v301/tck.html (added) +++ portals/site-live/pluto/v301/tck.html Fri Jun 22 19:35:14 2018 @@ -0,0 +1,626 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + + + + + + + + + + + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>Pluto - Using the JSR 362 TCK</title> + <style type="text/css" media="all"> + @import url("../css/maven-base.css"); + @import url("../css/maven-theme.css"); + @import url("../css/site.css"); + </style> + <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" /> + </head> + <body class="composite"> + <div id="banner"> + <a href="http://portals.apache.org/pluto/" id="bannerLeft"> + + <img src="http://portals.apache.org/pluto/images/apache-portals.gif" alt="" /> + + </a> + <span id="bannerRight"> + + <img src="http://portals.apache.org/pluto/images/banner.png" alt="" /> + + </span> + <div class="clear"> + <hr/> + </div> + </div> + <div id="breadcrumbs"> + + + + + + + + + <div class="xleft"> + Last Published: 2018-06-22 + | + <a href="http://portals.apache.org/pluto" class="externalLink">Home</a> + </div> + <div class="xright"> <a href="../portlet-3.0-apidocs/index.html">Portlet 3.0 API</a> + | + <a href="../portlet-2.0-apidocs/index.html">Portlet 2.0 API</a> + | + <a href="../portlet-1.0-apidocs/index.html">Portlet 1.0 API</a> + | + <a href="http://jcp.org/en/jsr/detail?id=362" class="externalLink">JSR 362 JCP Page</a> + | + <a href="http://jcp.org/en/jsr/detail?id=286" class="externalLink">JSR 286 JCP Page</a> + | + <a href="http://jcp.org/en/jsr/detail?id=168" class="externalLink">JSR 168 JCP Page</a> + + + + + + + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + <div id="leftColumn"> + <div id="navcolumn"> + + + + + + + + + <h5>The Pluto Project</h5> + <ul> + + <li class="none"> + <a href="../index.html">About Pluto</a> + </li> + + <li class="none"> + <a href="../mission.html">Mission</a> + </li> + + <li class="none"> + <a href="../download.html">Download</a> + </li> + + <li class="none"> + <a href="../news.html">News</a> + </li> + + <li class="none"> + <a href="../security.html">Security</a> + </li> + + <li class="none"> + <a href="../status.html">Status</a> + </li> + + <li class="none"> + <a href="../architecture.html">Architecture</a> + </li> + + <li class="none"> + <a href="../resources.html">Resources</a> + </li> + + <li class="none"> + <a href="../faq.html">FAQ</a> + </li> + + <li class="none"> + <a href="http://wiki.apache.org/portals/Pluto" class="externalLink">Wiki</a> + </li> + + <li class="none"> + <a href="https://issues.apache.org/jira/browse/PLUTO" class="externalLink">Issue Tracker (JIRA)</a> + </li> + + <li class="none"> + <a href="../helping.html">Get Involved</a> + </li> + </ul> + <h5>Pluto 3.0</h5> + <ul> + + <li class="none"> + <a href="../v301/getting-started.html">Getting Started</a> + </li> + + <li class="none"> + <a href="../v301/deploying.html">Deploying Portlets</a> + </li> + + <li class="none"> + <a href="../v301/portlet-api.html">Portlet Concepts</a> + </li> + + <li class="none"> + <a href="../v301/v3Features.html">Version 3 Features</a> + </li> + + <li class="none"> + <strong>Using the TCK</strong> + </li> + + <li class="none"> + <a href="../v301/release-notes.html">Release Notes</a> + </li> + </ul> + <h5>Pluto 2.0</h5> + <ul> + + <li class="none"> + <a href="../v20/getting-started.html">Getting Started</a> + </li> + + <li class="none"> + <a href="../v20/deploying.html">Deploying</a> + </li> + + <li class="none"> + <a href="../v20/embedding.html">Embedding</a> + </li> + + <li class="none"> + <a href="../v20/release-notes.html">Release Notes</a> + </li> + + <li class="none"> + <a href="../v20/app-servers.html">App Servers</a> + </li> + + <li class="none"> + <a href="../v20/powered.html">Powered By Pluto</a> + </li> + </ul> + <h5>Pluto 1.1</h5> + <ul> + + <li class="none"> + <a href="../v11/getting-started.html">Getting Started</a> + </li> + + <li class="none"> + <a href="../v11/deploying.html">Deploying</a> + </li> + + <li class="none"> + <a href="../v11/release-notes.html">Release Notes</a> + </li> + </ul> + <h5>Subprojects</h5> + <ul> + + <li class="none"> + <a href="../subprojects/subprojects.html">Overview</a> + </li> + </ul> + <h5>Project Info</h5> + <ul> + + <li class="none"> + <a href="../project-summary.html">Project Summary</a> + </li> + + <li class="none"> + <a href="../team-list.html">Project Team</a> + </li> + + <li class="none"> + <a href="../license.html">Project License</a> + </li> + + <li class="none"> + <a href="../mail-lists.html">Mailing Lists</a> + </li> + + <li class="none"> + <a href="../source-repository.html">Source Repository</a> + </li> + + <li class="none"> + <a href="../issue-tracking.html">Issue Tracking</a> + </li> + </ul> + <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> + <img alt="Built by Maven" src="../images/logos/maven-feather.png"></img> + </a> + + + + + + + + + </div> + </div> + <div id="bodyColumn"> + <div id="contentBox"> + <div class="section"><h2><a name="Using_the_JSR_362_TCK"></a>Using the JSR 362 TCK</h2> +<p> + The JSR 362 Technology Compliance Kit (TCK) is intended to be used by portal + vendors wishing to achieve JSR 362 compatibility for their product. + If you do not meet this description, you do not need to read this section. + </p> +<div class="section"><h3><a name="Overview"></a>Overview</h3> +<p> + The TCK contains portlets and a test driver that are used to perform the + compatibility test. The portlets contain the code that actually exercises the + portlet API. The driver uses Selenium 2 driven by Junit to access the system + under test through a selenium webdriver browser. + </p> +<p> + You can click through the tests on the portal pages displayed by the system under + test, or you can use the test driver to automatically click through the tests + and collect the results. Since there are many test cases (>6000), you will + generally use the test driver. + </p> +<p> + A test portlet may define multiple test cases. The test case names must be + unique in the system, and must be of a form that can be used as portlet names + and as Java Properties file keys. + </p> +<p> + Each portlet test module defines its own test case list and page file containing + the page definitions expected by the tests contained in the module. + </p> +<p> + The build process generates a consolidated test case list and consolidated page + file containing all test cases and page definitions for all test modules. The + consolidated test case list maps the test case to the name of the page on which + the test case is located. + </p> +<p> + The test driver works by reading the consolidated test case list. For each test + case, the driver accesses the specified page. It logs in if necessary, clicks + any available test case link, and collects the test case results from the + browser window. + </p> +<p> + The test driver accesses a TCK page by looking for and clicking a link whose + link text is equal to the page name. If the test driver cannot find the link on + current page, it will access the test server login URL configured in the + portlet-tck_3.0/POM.xml file. + </p> +<p> + The test driver checks whether a login is necessary by checking for the + existence of an entry field that has the HTML element ID for the user name + field. If the user name field is available, the driver enters the user name and + password into the corresponding entry fields and submits the form. The username + HTML element ID, password element ID, username and password are configurable + in the portlet-tck_3.0/POM.xml file. + </p> +<p> + The driver checks for links to be clicked and results to be collected by + checking for specific HTML element IDs on the page. The HTML element IDs are + based on the test case name. From the point of view of the test driver there can + be several relevant element IDs on the page for each test case: + </p> +<ul><li> + "<testcasename>-setup" - Test setup link + </li> +<li> + "<testcasename>-clickme" - Test execution link + </li> +<li> + "<testcasename>-results" - Test results field; "Succeeded" or "Failed" + </li> +<li> + "<testcasename>-details" - Test details field; provides failure reason + </li> +</ul> +<p> + After accessing the page on which the test case is to be found, the test driver + first looks for a setup link. If found, it clicks the link and waits for the + page to load. + </p> +<p> + The driver then looks for a test execution link. If found, + it clicks the link, waits for the new page to load, and then checks for the + result elements. + </p> +<p> + The driver reads the contents of the HTML elements that have the results and + details element IDs and analyzes the results string to determine test case + success or failure. + </p> +</div> +<div class="section"><h3><a name="Project_Structure"></a>Project Structure</h3> +<p> + The TCK source code is located in the subdirectory <code>./pluto/portlet-tck_3.0</code>. + The project consists of the following modules: + </p> +<dl><dt> + common + </dt> +<dd> + Common code used by the test portlets and the test driver. This + module also contains the XSL stylesheets used during the test + portlet module build to generate the test case list and page + configuration for the module. + </dd> +<dt> + deploy + </dt> +<dd> + The directory <code>deploy/target/deploy-files</code> contains the portlet war + files and the page file to be deployed on the system under test. + </dd> +<dt> + driver + </dt> +<dd> + The maven-based test driver. When this module is built, it + generates a consolidated test case list and page file for the test + cases and pages defined by all test case portlet modules. + </dd> +<dt> + TestModule1 + </dt> +<dd> + Intended to be a sample for writing TCK portlets. + Defines several portlets, each of which is placed on its own page. + </dd> +<dt> + TestModule2 + </dt> +<dd> + Intended to be a sample for writing TCK portlets. + Defines several portlets, all of which are placed on the same + portal page. Some tests produce links that are clicked by the test + driver when the test is run. Some tests set public render + parameters that are used by another test portlet. + </dd> +<dt> + TestModule3 + </dt> +<dd> + Intended to be a sample for writing TCK portlets. + Defines two portlets in separate portlet applications for public + render parameter testing. Both portlets are placed on the same + page. When the test driver clicks a test link in one portlet, the + test results are displayed in the second portlet. + </dd> +<dt> + V2*Tests + </dt> +<dd> + Modules with this naming scheme contain test cases to demostrate + backward compatibilty with the Portlet Specification version 2.0. + Portlets whose class names contain the string "_SIG_" contain + generated code for verifying the method signatures. These portlets + should not be changed by hand. The remaining portlets contain + additional V2 verification code. + </dd> +<dt> + V3*Tests + </dt> +<dd> + Modules with this naming scheme test v3.0 specific funtionality. + </dd> +</dl> +</div> +<div class="section"><h3><a name="The_Page_File"></a>The Page File</h3> +<p> + The page file defines the page names for the TCK and the portlets expected to + be on each page. This is an XML file in the form of a Pluto driver configuration + file. The schema for this file is located in the Pluto project at the following + location: + </p> +<p><code>./pluto/pluto-portal-driver/src/main/resources/pluto-portal-driver-config.xsd</code></p> +<p> + After the TCK has been built, complete page file for the TCK pages is contained + in the following file: + </p> +<p><code>./pluto/portlet-tck_3.0/deploy/target/deploy-files/pluto-portal-driver-config.xml</code></p> +<p> + It is expected that vendors will extract the portlet-to-page mapping information + from the page file in order to create the necessary configuration files for + the portal under test. + </p> +<p> + When creating pages for your system, note that the test driver expects links + to all test case pages to be available. + The test driver searches for the page links by link text, so it is important that + the links have the names defined in the page file. + </p> +</div> +<div class="section"><h3><a name="Accessing_the_version_3.0.1_TCK_Source_Code"></a>Accessing the version 3.0.1 TCK Source Code</h3> +<p> + The source code is located in the + <a class="externalLink" href="https://github.com/apache/portals-pluto">Apache Pluto repository</a>. + </p> +<p> + First, use git to clone the repository: + <code>git clone https://github.com/apache/portals-pluto.git pluto</code></p> +<p> + Then switch into the 'pluto' directory and checkout the source for Pluto 3.0.1: + </p> +<p><code>git checkout pluto-3.0.1</code></p> +<p> + The version 3.0.1 TCK source code is now located in the 'portlet-tck_3.0' directory. + </p> +</div> +<div class="section"><h3><a name="Building_the_TCK"></a>Building the TCK</h3> +<p> + Building the TCK produces the test portlets, a list of test cases in XML format, + an XML-based page file containing the page configuration expected by the test + cases, and the test driver itself. + </p> +<p> + To build portlet war files that do not contain any special configuration, use + the command: + </p> +<p><code>mvn clean install</code></p> +<p> + To build portlet war files that are configured for deployment on Pluto, use the + command: + </p> +<p><code>mvn clean install -Ppluto</code></p> +<p> + These commands can be executed either from the Pluto project base directory or + from the <code>./pluto/portlet-tck_3.0</code> directory. + </p> +</div> +<div class="section"><h3><a name="Deploying_the_TCK"></a>Deploying the TCK</h3> +<p> + Use the page file which has the default + name of <code>deploy/target/deploy-files/pluto-portal-driver-config.xml</code> to create + pages for your system. + The WAR files in the <code>deploy/target/deploy-files</code> + contain the test portlet code. Deploy these files on your system. + </p> +<p> + If you are testing with Apache Pluto, you can simply copy + the page file into the Pluto <code>webapps/pluto/WEB-INF</code> directory in order to set up the + pages. To deploy the WAR files on Pluto, copy them into the Pluto webapps directory. + </p> +</div> +<div class="section"><h3><a name="Running_the_TCK"></a>Running the TCK</h3> +<p> + Configure the parent POM file <code>./pluto/portlet-tck_3.0/pom.xml</code> to + address your system under test. See the properties section in the pom.xml file. + You can set the host name and port for the system under test, and can + also select the browser to be used by the Selenium WebDriver code. Note, + however, that if you use a browser other than "firefox" or "HTMLUnit" you will + have to download and install additional WebDriver software manually, and you may + need to add additional configuration properties (See the test.browser.webDriver + property in the parent POM). + </p> +<p> + At the time of this writing, the HTMLUnit driver does not support JavaScript + adequately for JSR 362 TCK purposes. You may need to try different drivers to + find the appropriate WebDriver driver for your environment. + </p> +<p> + All TCK tests were successfully executed through the test driver against Pluto + using the ChromeDriver web driver. See the portlet-tck_3.0/POM.xml file for + a configuration example. + </p> +<p> + Run the TCK by switching to the driver subdirectory and execute the command: + </p> +<p><code>mvn test -Prun-tck</code></p> +<p> + If you want to run a subset of the tests, use the "-Dtest.module=" option. The + driver will then only execute those tests whose test case name contains the + specified string. For example, if you want to run the signature verification + tests, use the command: + </p> +<p><code>mvn test -Prun-tck -Dtest.module=SIG</code></p> +<p> + You can also exclude specific tests by placing an exclamation point before the + text to be matched. For example, if you want to exclude the signature verification + tests, use the command: + </p> +<p><code>mvn test -Prun-tck -Dtest.module=!SIG</code></p> +<p> + The 'test.dryrun' flag will cause the test cases to be listed without executing them. + For example, the following command will list all of the test cases whose test + case name contains 'ResourceResponse', but will not execute them: + </p> +<p><code>mvn test -Prun-tck -Dtest.module=ResourceResponse -Dtest.dryrun=true</code></p> +<p> + The test driver will wait for a response for a default time of 3 seconds. If this + value proves to be too short, you can change it in the portlet-tck_3.0/POM.xml + file, or you can specify a timeout value using the 'test-timeout' command line + option. The timeout value is specified in seconds, as follows: + </p> +<p><code>mvn test -Prun-tck -Dtest.module=ResourceResponse -Dtest.timeout=5</code></p> +<p> + The test driver has an ignore list containing test case names that are not + required to pass in order for a portal product to be JSR 362 compliant. The + ignore list is an XML file in properties file format located at: + </p> +<p><code>portlet-tck_3.0/driver/src/main/resources/xml-resources/ignoredTestCases.xml</code></p> +<p> + By default, the test driver will ignore and will not execute all test cases + in the ignore list. If you wish to execute all test cases including those in + the ignore list, set the command line flag 'test.ignore' to false: + </p> +<p><code>mvn test -Prun-tck -Dtest.ignore=false</code></p> +</div> +<div class="section"><h3><a name="Passing_the_TCK"></a>Passing the TCK</h3> +<p> + TCK execution is self-policing. If you are a portal vendor and wish to claim + JSR 362 compatibility for your product, you should be able to demonstrate that + this TCK can be executed against your product with no errors. + </p> +</div> +<div class="section"><h3><a name="Contesting_a_Test_Case"></a>Contesting a Test Case</h3> +<p> + When defining and implementing the TCK test cases, care was taken to assure + proper implementation and to test only required functionality. + </p> +<p> + However, mistakes may have occurred. If you feel that a test case is incorrectly + implemented or is invalid as defined, please proceed as follows. + </p> +<p> + In either case, please open an issue at the Pluto Jira: + </p> +<p><code>https://issues.apache.org/jira/browse/PLUTO/</code></p> +<p> + Prefix the summary with 'TCK:' in order to allow TCK issues to be readily + identified. Please be sure to specify the exact name(s) of the test case(s) in + question. + </p> +<p> + If you feel that the test case was implemented incorrectly, you may correct the + implementation and issue a pull request through github here: + </p> +<p><code>https://github.com/apache/portals-pluto/pulls</code></p> +<p> + If you feel that the test case is invalid as defined, you may update the ignore + list and issue a pull request. + </p> +<p> + If we agree that the test case is invalid or incorrectly implemented, we will + fix it or integrate your fix into the Pluto master and version 3.0 branches. + </p> +</div> +</div> + + </div> + </div> + <div class="clear"> + <hr/> + </div> + <div id="footer"> + <div class="xright">© + 2004-2018 + + Apache Software Foundation + + + + + + + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + </body> +</html> Added: portals/site-live/pluto/v301/v3Features.html URL: http://svn.apache.org/viewvc/portals/site-live/pluto/v301/v3Features.html?rev=1834161&view=auto ============================================================================== --- portals/site-live/pluto/v301/v3Features.html (added) +++ portals/site-live/pluto/v301/v3Features.html Fri Jun 22 19:35:14 2018 @@ -0,0 +1,505 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + + + + + + + + + + + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>Pluto - Portlet API version 3.0 Overview</title> + <style type="text/css" media="all"> + @import url("../css/maven-base.css"); + @import url("../css/maven-theme.css"); + @import url("../css/site.css"); + </style> + <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" /> + </head> + <body class="composite"> + <div id="banner"> + <a href="http://portals.apache.org/pluto/" id="bannerLeft"> + + <img src="http://portals.apache.org/pluto/images/apache-portals.gif" alt="" /> + + </a> + <span id="bannerRight"> + + <img src="http://portals.apache.org/pluto/images/banner.png" alt="" /> + + </span> + <div class="clear"> + <hr/> + </div> + </div> + <div id="breadcrumbs"> + + + + + + + + + <div class="xleft"> + Last Published: 2018-06-22 + | + <a href="http://portals.apache.org/pluto" class="externalLink">Home</a> + </div> + <div class="xright"> <a href="../portlet-3.0-apidocs/index.html">Portlet 3.0 API</a> + | + <a href="../portlet-2.0-apidocs/index.html">Portlet 2.0 API</a> + | + <a href="../portlet-1.0-apidocs/index.html">Portlet 1.0 API</a> + | + <a href="http://jcp.org/en/jsr/detail?id=362" class="externalLink">JSR 362 JCP Page</a> + | + <a href="http://jcp.org/en/jsr/detail?id=286" class="externalLink">JSR 286 JCP Page</a> + | + <a href="http://jcp.org/en/jsr/detail?id=168" class="externalLink">JSR 168 JCP Page</a> + + + + + + + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + <div id="leftColumn"> + <div id="navcolumn"> + + + + + + + + + <h5>The Pluto Project</h5> + <ul> + + <li class="none"> + <a href="../index.html">About Pluto</a> + </li> + + <li class="none"> + <a href="../mission.html">Mission</a> + </li> + + <li class="none"> + <a href="../download.html">Download</a> + </li> + + <li class="none"> + <a href="../news.html">News</a> + </li> + + <li class="none"> + <a href="../security.html">Security</a> + </li> + + <li class="none"> + <a href="../status.html">Status</a> + </li> + + <li class="none"> + <a href="../architecture.html">Architecture</a> + </li> + + <li class="none"> + <a href="../resources.html">Resources</a> + </li> + + <li class="none"> + <a href="../faq.html">FAQ</a> + </li> + + <li class="none"> + <a href="http://wiki.apache.org/portals/Pluto" class="externalLink">Wiki</a> + </li> + + <li class="none"> + <a href="https://issues.apache.org/jira/browse/PLUTO" class="externalLink">Issue Tracker (JIRA)</a> + </li> + + <li class="none"> + <a href="../helping.html">Get Involved</a> + </li> + </ul> + <h5>Pluto 3.0</h5> + <ul> + + <li class="none"> + <a href="../v301/getting-started.html">Getting Started</a> + </li> + + <li class="none"> + <a href="../v301/deploying.html">Deploying Portlets</a> + </li> + + <li class="none"> + <a href="../v301/portlet-api.html">Portlet Concepts</a> + </li> + + <li class="none"> + <strong>Version 3 Features</strong> + </li> + + <li class="none"> + <a href="../v301/tck.html">Using the TCK</a> + </li> + + <li class="none"> + <a href="../v301/release-notes.html">Release Notes</a> + </li> + </ul> + <h5>Pluto 2.0</h5> + <ul> + + <li class="none"> + <a href="../v20/getting-started.html">Getting Started</a> + </li> + + <li class="none"> + <a href="../v20/deploying.html">Deploying</a> + </li> + + <li class="none"> + <a href="../v20/embedding.html">Embedding</a> + </li> + + <li class="none"> + <a href="../v20/release-notes.html">Release Notes</a> + </li> + + <li class="none"> + <a href="../v20/app-servers.html">App Servers</a> + </li> + + <li class="none"> + <a href="../v20/powered.html">Powered By Pluto</a> + </li> + </ul> + <h5>Pluto 1.1</h5> + <ul> + + <li class="none"> + <a href="../v11/getting-started.html">Getting Started</a> + </li> + + <li class="none"> + <a href="../v11/deploying.html">Deploying</a> + </li> + + <li class="none"> + <a href="../v11/release-notes.html">Release Notes</a> + </li> + </ul> + <h5>Subprojects</h5> + <ul> + + <li class="none"> + <a href="../subprojects/subprojects.html">Overview</a> + </li> + </ul> + <h5>Project Info</h5> + <ul> + + <li class="none"> + <a href="../project-summary.html">Project Summary</a> + </li> + + <li class="none"> + <a href="../team-list.html">Project Team</a> + </li> + + <li class="none"> + <a href="../license.html">Project License</a> + </li> + + <li class="none"> + <a href="../mail-lists.html">Mailing Lists</a> + </li> + + <li class="none"> + <a href="../source-repository.html">Source Repository</a> + </li> + + <li class="none"> + <a href="../issue-tracking.html">Issue Tracking</a> + </li> + </ul> + <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> + <img alt="Built by Maven" src="../images/logos/maven-feather.png"></img> + </a> + + + + + + + + + </div> + </div> + <div id="bodyColumn"> + <div id="contentBox"> + <div class="section"><h2><a name="Portlet_API_version_3.0_Overview"></a>Portlet API version 3.0 Overview</h2> +<p> + This section presents some of the main new features introduced by JSR 362. + JSR 362 Portlet Specification 3.0 introduces many improvements to the + portlet programming model. It adds configuration through annotation, + asynchronous support similar to the servlet asynchronous support, + multipart form support, support for CDI beans, method annotation support + allowing portlet methods to reside in different classes, and a JavaScript + API that allows portal pages to function as single-page applications. The + Pluto 3.0 portlet container implements all JSR 362 features and passes the + TCK. While doing so, Pluto 3.0 remains fully compliant to the 2.0 Portlet + Specification, meaning that version 2.0 portlets can run on the version + 3.0 portlet container. + </p> +<p> + Additional Resources: + </p> +<ul><li> + The + <a class="externalLink" href="http://jcp.org/en/jsr/detail?id=362">Java Community Process JSR 362 page</a> + will allow you to access the complete specification for full details. + </li> +<li> + The JavaOne 2016 presentation + <a class="externalLink" href="https://static.rainfocus.com/oracle/oow16/sess/1462801563632001pOv8/ppt/JSR362-JavaOne-2016a.pdf">"Portlet Specification 3.0 Is Here!"</a> + provides a version 3.0 overview. + </li> +<li> + The <a href="../portlet-3.0-apidocs/index.html">Portlet API Version 3.0</a> + page documents the portlet programming interface. + </li> +</ul> +<div class="section"><h3><a name="Configuration_by_Annotation"></a>Configuration by Annotation</h3> +<p> + The version 3.0 portlet API introduces the <code>@PortletApplication</code> + and <code>@PortletConfiguration</code> annotations to allow portlets to + be configured without using the deployment descriptor. + Note that the deployment descriptor can still be used. When both + configuration annotations and a portlet deployment descriptor are present, + values from the deployment descriptor override those provided + by annotation. + </p> +<pre> +@PortletApplication( + defaultNamespaceURI="https://www.java.net/", + events = { + @EventDefinition(qname=@PortletQName(namespaceURI="http://www.apache.org/", + localPart="event1") , payloadType = String.class), + @EventDefinition(qname=@PortletQName(namespaceURI="", + localPart="event4")) + } +) + + +@PortletConfiguration(portletName="Portlet1", + initParams = { + @InitParameter(name="color", value="#cafeba"), + }, + title={ + @LocaleString(locale = "EN", value="Annotated Portlet"), + } +) + </pre></div> +<div class="section"><h3><a name="Extended_Method_Annotations"></a>Extended Method Annotations</h3> +<p> + Version 3 extends the idea of method annotations introduced with version 2. + Portlet methods may now be located in classes that do not implement portlet + interfaces. + Also, lifecycle methods belonging to a single portlet need not be in the same + class. + </p> +<p> + The extended method annotations <code>@HeaderMethod</code>, <code>@RenderMethod</code>, + and <code>@ServeResourceMethod</code> have relaxed method signature requirements + as compared to the methods defined by the portlet interfaces. + See the portlet API documentation for details. + </p> +<p> + Use of the extended method annotation <code>@RenderMethod</code> implicitly + configures a portlet. No additional configuration is required. + The following example defines a simple portlet render method. + If this method were located in a class with a default constructor within + a web application deployed on a version 3 portal, it would define and automatically + configure a portlet by the name of "BeanPortletDemo". + </p> +<pre> +@RenderMethod(portletNames = "BeanPortletDemo") +public String simpleRender() { + return "Hello, World!"; +} + </pre></div> +<div class="section"><h3><a name="CDI_Support"></a>CDI Support</h3> +<p> + Version 3 provides support for CDI in several ways. + Portlet classes are instantiated through the CDI container + to enable dependency injection while respecting + scope annotations on the portlet classes. + Dependency injection supported in portlet filters and listeners as well as + in asynchronous threads started through the <code>PortletAsyncContext</code> + object. + Many portlet artifacts have been made injectable - the + request and response objects, parameter objects, the portlet configuration + object, etc. + </p> +<p> + Custom CDI scopes for portlets have also been introduced. + <ul><li> + The portlet session scope - @PortletSessionScoped + </li> +<li> + The portlet request scope - @PortletRequestScoped + </li> +<li> + The render state scope - @RenderStateScoped + </li> +</ul> +</p> +</div> +<div class="section"><h3><a name="Asynchronous_support"></a>Asynchronous support</h3> +<p> + The portlet programming model provides asynchronous support similar to + that provided by servlets. + Using asynchronous support, long-running requests can run in separate thread + in order to free up application server resources. + Asynchronous support is provided for resource requests only. + </p> +<p> + Asynchronous processing must be started within original resource request. + The asynchronous thread runs in context of original resource request, + providing that it is started through the <code>PortletAsyncContext#start(Runnable)</code> + method. + This means that CDI injection can be used within async thread + in the same manner as for the original request. + The asynchronous listener and any portlet filters also run in context of original request. + </p> +<p> + The asynchronous thread can dispatch directly to JSP or servlet for producing output + and can also dispatch back to the resource method, if desired. + </p> +<p> + The following diagram illustrates a sample asynchronous processing sequence. + Note that this shows only one of many possible scenarios. + When the portal receives a resource request targeted to the asnychronous + portlet, the portlet container invokes the portlet resource method. + The portlet starts asynchronous processing, adds an asynchronous listener, + uses the portlet asynchronous context object to start a thread, and + returns to the container. + The asynchronous thread does its long-running work and dispatches back to the + original resource method. + The resource method then includes a JSP to produce output and completes + asynchronous processing. + </p> +<img src="../images/async.png" /></div> +<div class="section"><h3><a name="The_Portlet_Hub_JavaScript_API"></a>The Portlet Hub JavaScript API</h3> +<p> + The portlet specification defines a JavaScript API that can be used by portlet + code running on the browser to read and set render parameters, carry out portlet + actions, and generate resource URLs while remaining in an Ajax paradigm. + Updating parameters and executing actions through the portlet hub does not + cause a page refresh. + Instead, the portlet hub communicates with the portal, causing the portal + to carry out any required portlet processing. + The portlet hub then informs the portlet client code running on the browser about + any new parameters. + The portlet client can then create a resource URL to obtain any data or + markup required to update the page. + The portal implementation is responsible for making the portlet hub + module available on the portal page. + </p> +<p> + The following diagram illustrates portlet action processing initiated through + the portlet hub. + In this scenario, the portal page contains three portlets that make use of + the portlet hub. + Portlet B initiates an Ajax action through the portlet hub. + The portlet hub transmits the action request along with any form data and action + parameters to the portal server. + On the server, action processing is executed for portlet B. + During action processing, portlet B fires an event that portlet A can process. + The server executes the event phase for the event and transmits the new render + state information to the portlet hub running on the browser. + The portlet hub fires onStateChange events to portlets A and B to inform them + of the updated render state information. + The portlets can now use the portlet hub API to create resource URLs in order + to retrieve information corresponding to the new render state. + </p> +<img src="../images/hubaction.png" /><p> + The main JavaScript functions provided by the portlet hub are listed below. + </p> +<dl><dt><code> + Promise(PortletInit) register(<Portlet ID>) + </code></dt> +<dd> + Registers a portlet client designated by portlet ID with the Portlet Hub and returns object that provides access to remaining Portlet Hub functions. + </dd> +<dt><code> + ListenerID addEventListener(<listener type>, <listener method>) + </code></dt> +<dd> + The Portlet Hub informs Portlet Client of state changes by calling the event listener function and passing the updated portlet state. + </dd> +<dt><code> + Promise(url) createResourceUrl(<resource parameters>, <cacheability>, <resource ID>) + </code></dt> +<dd> + Creates a resource URL containing the current page / portlet state. + The URL can be used with the framework of choice to retrieve the resource. + </dd> +<dt><code> + setPortletState(<new portlet state>) + </code></dt> +<dd> + Allows portlet client to set private and public parameters, portlet mode, window state + </dd> +<dt><code> + action(<action parameters>, <form element>) + </code></dt> +<dd> + Carries out a portlet action in Ajax mode (Ajax action) + </dd> +</dl> +<pre></pre></div> +</div> + + </div> + </div> + <div class="clear"> + <hr/> + </div> + <div id="footer"> + <div class="xright">© + 2004-2018 + + Apache Software Foundation + + + + + + + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + </body> +</html>