Modified: portals/site-live/jetspeed-2/j1-migration.html
URL: 
http://svn.apache.org/viewvc/portals/site-live/jetspeed-2/j1-migration.html?rev=1901428&r1=1901427&r2=1901428&view=diff
==============================================================================
--- portals/site-live/jetspeed-2/j1-migration.html (original)
+++ portals/site-live/jetspeed-2/j1-migration.html Tue May 31 02:15:08 2022
@@ -42,7 +42,7 @@
   
     
             <div class="xleft">
-        Last Published: 9 May 2016
+        Last Published: 26 May 2022
                       </div>
             <div class="xright">            <a 
href="http://portals.apache.org/applications/"; 
class="externalLink">Applications</a>
             |
@@ -253,11 +253,11 @@
     </div>
     <div id="bodyColumn">
       <div id="contentBox">
-        <subtitle></subtitle><authors><person name="David Sean Taylor" 
email="[email protected]"></authors><div class="section"><h2><a 
name="Overview"></a>Overview</h2>
+        <subtitle></subtitle><authors><person name="David Sean Taylor" 
email="[email protected]"></authors><div class="section"><h2><a 
name="Overview"></a>Overview</h2>
 <p>This migration guide will help you migrate from Jetspeed version 1 to 
Jetspeed version 2.
            Note that there are currently no migration tools, nor are the plans 
to create a migration tool to convert 
            portal resources from version 1  to version 2. This document 
provides only guidelines for migration.
-           </p>
+           </p>
 <p>
                With the development of the new portal standard (The Portlet 
API), the common portlet metaphor 
                has changed quite drastically from the Turbine-based origins in 
version 1.
@@ -266,47 +266,47 @@
                user attributes and init parameters that have no direct mapping 
from version 1. Creating a migration tool would 
                be a large undertaking. The Jetspeed development team is not 
prepared to make this investment.
                By following the guidelines provided here, you can easily 
migrate your Jetspeed 1.x applications to Jetspeed 2.  
-               For an overview of architectural differences, see the document 
<a href="j1-users.html">For Jetspeed-1 Users</a></p>
-</div>
-<div class="section"><h2><a name="Migration_Table"></a>Migration Table</h2>
-<p>The table below gives you an idea of how to migrate. We will cover each 
subject in more detail further on in this document.</p>
-<table class="bodyTable"><tr class="a"><th>1.x Feature</th>
-<th>2.x Feature</th>
-<th>Description</th>
-</tr>
-<tr class="b"><td>J1 Portlet Java Code</td>
-<td>Portlet API Standard Code</td>
+               For an overview of architectural differences, see the document 
<a href="j1-users.html">For Jetspeed-1 Users</a></p>
+</div>
+<div class="section"><h2><a name="Migration_Table"></a>Migration Table</h2>
+<p>The table below gives you an idea of how to migrate. We will cover each 
subject in more detail further on in this document.</p>
+<table class="bodyTable"><tr class="a"><th>1.x Feature</th>
+<th>2.x Feature</th>
+<th>Description</th>
+</tr>
+<tr class="b"><td>J1 Portlet Java Code</td>
+<td>Portlet API Standard Code</td>
 <td>Rewrite the java code to the new specification. 
-                   Involves replacing Turbine action with standard 
processAction, and replacing Rundata with PortletRequest/Response</td>
-</tr>
-<tr class="a"><td>XREG Portlet Registry</td>
-<td>portlet.xml deployment descriptor</td>
+                   Involves replacing Turbine action with standard 
processAction, and replacing Rundata with PortletRequest/Response</td>
+</tr>
+<tr class="a"><td>XREG Portlet Registry</td>
+<td>portlet.xml deployment descriptor</td>
 <td>There are pretty big differences here. Migrate &lt;portlet-entry&gt; to 
&lt;portlet&gt; entries, &lt;parameter&gt; to &lt;preference&gt; or 
&lt;init-param&gt;
-               </td>
-</tr>
-<tr class="b"><td>J1 PSML</td>
-<td>J2 PSML</td>
-<td>Migrate Tabs to Folders and Pages, migrate to new tag syntax</td>
-</tr>
-<tr class="a"><td>XREG Security Registry</td>
-<td>Security Constraints</td>
-<td>Migrate J1 security constraint format to J2 security constraint format</td>
-</tr>
-<tr class="b"><td>J1 Controllers</td>
-<td>J2 Layouts</td>
-<td>Controllers are deprecated. Recommend using the new Jetspeed-2 Layout 
portlets. If porting necessary, HTML portions of VM code may port, but not 
context model variables</td>
-</tr>
-<tr class="a"><td>J1 Controls</td>
-<td>J2 Portlet Decorators</td>
-<td>Controls are deprecated. Recommend using the new Jetspeed-2 Portlet 
Decorators. If porting necessary, HTML portions of VM code will port, but not 
context model variables</td>
-</tr>
-<tr class="b"><td>J1 Layouts, Screens, Navigations</td>
-<td>J2 Page (Layout) Decorators</td>
-<td>All deprecated. Recommend using the new Jetspeed-2 Page (Layout) 
Decorators as a starting point to writing your own page decorators. HTML 
portions of VM code will port, but not context model variables</td>
-</tr>
-</table>
-</div>
-<div class="section"><h2><a name="Portlet_Applications"></a>Portlet 
Applications</h2>
+               </td>
+</tr>
+<tr class="b"><td>J1 PSML</td>
+<td>J2 PSML</td>
+<td>Migrate Tabs to Folders and Pages, migrate to new tag syntax</td>
+</tr>
+<tr class="a"><td>XREG Security Registry</td>
+<td>Security Constraints</td>
+<td>Migrate J1 security constraint format to J2 security constraint format</td>
+</tr>
+<tr class="b"><td>J1 Controllers</td>
+<td>J2 Layouts</td>
+<td>Controllers are deprecated. Recommend using the new Jetspeed-2 Layout 
portlets. If porting necessary, HTML portions of VM code may port, but not 
context model variables</td>
+</tr>
+<tr class="a"><td>J1 Controls</td>
+<td>J2 Portlet Decorators</td>
+<td>Controls are deprecated. Recommend using the new Jetspeed-2 Portlet 
Decorators. If porting necessary, HTML portions of VM code will port, but not 
context model variables</td>
+</tr>
+<tr class="b"><td>J1 Layouts, Screens, Navigations</td>
+<td>J2 Page (Layout) Decorators</td>
+<td>All deprecated. Recommend using the new Jetspeed-2 Page (Layout) 
Decorators as a starting point to writing your own page decorators. HTML 
portions of VM code will port, but not context model variables</td>
+</tr>
+</table>
+</div>
+<div class="section"><h2><a name="Portlet_Applications"></a>Portlet 
Applications</h2>
 <p>One of the most important differences in writing Jetspeed-2/Portlet API 
portlets is that you must package your portlet code 
                separate from the Jetspeed portal. In Jetspeed-1, all the user 
code, the portlet business logic, is packaged in one big war file
                mixed in with the Jetspeed-1 implementation. The Portlet API 
clearly abolishes this practice of mixing the portal implementation with
@@ -315,39 +315,39 @@
                as a portlet application. A portlet application contains one or 
more portlets, along with a deployment descriptor, the portlet.xml.
                A portlet application is an extension of a web application. The 
portlet.xml holds the definitions of one or more portlets and is 
                analogous to the xreg files used in Jetspeed-1.
-               </p>
-</div>
-<div class="section"><h2><a name="Java_Code"></a>Java Code</h2>
+               </p>
+</div>
+<div class="section"><h2><a name="Java_Code"></a>Java Code</h2>
 <p>In this section we demonstrate how to convert a Jetspeed-1 portlet to a 
JSR-168 Java Standard Portlet.
                        This involves the following steps:
-                       </p>
-<ul><li>Converting the Portlet Init Java Code</li>
-<li>Converting the Portlet getContent Java Code</li>
-<li>Converting a Turbine Action</li>
-</ul>
+                       </p>
+<ul><li>Converting the Portlet Init Java Code</li>
+<li>Converting the Portlet getContent Java Code</li>
+<li>Converting a Turbine Action</li>
+</ul>
 <p>
                        Jetspeed-1 portlet implementations are normally 
separated between two different Java source files.
-                       </p>
-<ul><li>The Portlet Source Code</li>
-<li>The Turbine Action Source Code</li>
-</ul>
+                       </p>
+<ul><li>The Portlet Source Code</li>
+<li>The Turbine Action Source Code</li>
+</ul>
 <p>
                        The Portlet Source Code handles the <b>View</b> part of 
the MVC pattern. The <b>getContent</b> method
                        is the standard method in Jetspeed-1 to call to render 
the content of a portlet. The corresponding methods 
                        in Jetspeed-2 and in the Portlet API, the <b>doView, 
doEdit, doHelp</b>. In the Portlet API terminology,
                        this phase of portlet processing is known as the 
<b>render phase</b>. During the render phase, the portlet
                        should not perform any business logic or other 
manipulation on the <b>Model</b>. All model manipulation
-                       should be left to the <b>action phase</b></p>
+                       should be left to the <b>action phase</b></p>
 <p>The Turbine Action performs the <b>action phase</b> of the portlet 
processing. During the action phase of the Portlet API standard,
                        rendering of all other portlets is blocked until the 
action completes. This is also true in the Jetspeed-1/Turbine model.
-                       </p>
-<div class="section"><h3><a name="Creating_a_new_Portlet_Class"></a>Creating a 
new Portlet Class</h3>
+                       </p>
+<div class="section"><h3><a name="Creating_a_new_Portlet_Class"></a>Creating a 
new Portlet Class</h3>
 <p>The best place to get started in migrated your portlet is to create a new 
JSR-168 standard portlet.
                        Simply create a new Java class inheriting from the 
GenericPortlet interface provided by the Portlet API.
                        You can also use one of the frameworks or bridges 
available from Apache Portals or Spring MVC.
                        The example below writes directly to the Portlet API. 
The code below can be used a skeleton for writing
                        a portlet.
-                       </p>
+                       </p>
 <div class="source"><pre>
 
 import java.io.IOException;
@@ -383,35 +383,35 @@ public class HelloWorld extends GenericP
        }    
 }
                
-</pre>
-</div>
+</pre>
+</div>
 <p>To find out more about Portals Bridges and other Frameworks, explore these 
links:
-                       </p>
-<ul><li><a href="http://portals.apache.org/bridges/"; 
class="externalLink">Portals Bridges</a></li>
-<li><a 
href="http://portals.apache.org/bridges/multiproject/portals-bridges-jsf/index.html";
 class="externalLink">JSF Bridge</a></li>
-<li><a 
href="http://portals.apache.org/bridges/multiproject/portals-bridges-struts/index.html";
 class="externalLink">Struts Bridge</a></li>
-<li><a 
href="http://portals.apache.org/bridges/multiproject/portals-bridges-velocity/index.html";
 class="externalLink">Velocity Bridge</a></li>
-<li><a href="http://www.springframework.org/docs/reference/portlet.html"; 
class="externalLink">Spring Portlet MVC</a></li>
-</ul>
-</div>
-<div class="section"><h3><a 
name="Converting_the_Portlet_Init_Java_Code"></a>Converting the Portlet Init 
Java Code</h3>
+                       </p>
+<ul><li><a class="externalLink" 
href="http://portals.apache.org/bridges/";>Portals Bridges</a></li>
+<li><a class="externalLink" 
href="http://portals.apache.org/bridges/multiproject/portals-bridges-jsf/index.html";>JSF
 Bridge</a></li>
+<li><a class="externalLink" 
href="http://portals.apache.org/bridges/multiproject/portals-bridges-struts/index.html";>Struts
 Bridge</a></li>
+<li><a class="externalLink" 
href="http://portals.apache.org/bridges/multiproject/portals-bridges-velocity/index.html";>Velocity
 Bridge</a></li>
+<li><a class="externalLink" 
href="http://www.springframework.org/docs/reference/portlet.html";>Spring 
Portlet MVC</a></li>
+</ul>
+</div>
+<div class="section"><h3><a 
name="Converting_the_Portlet_Init_Java_Code"></a>Converting the Portlet Init 
Java Code</h3>
 <p>
                        The Portlet Source code handles the <b>Init</b> phase 
of a portlet lifecycle.
                        The init phase is very similar in both the Java Portlet 
API and in Jetspeed 1. 
                        Here we have an example of the init method of a  
Jetspeed-1 portlet:
-                       </p>
+                       </p>
 <div class="source"><pre>
 
     public void init() throws PortletException
     {
     }
 
-                       </pre>
-</div>
+                       </pre>
+</div>
 <p>
                        The equivalent method in the Portlet API (Jetspeed-2) 
would be, note the difference being the PortletConfig parameter
                        (although the exception classes are named the same, 
they are entirely different classes, one from Jetspeed-1, the other from the 
Portlet API):
-                       </p>
+                       </p>
 <div class="source"><pre>
 
     public void init(PortletConfig config) 
@@ -419,16 +419,16 @@ public class HelloWorld extends GenericP
     {
     }
 
-                       </pre>
-</div>
-<p>In Jetspeed-1, you would normally access Turbine Services with static 
acccessors, for example:</p>
+                       </pre>
+</div>
+<p>In Jetspeed-1, you would normally access Turbine Services with static 
acccessors, for example:</p>
 <div class="source"><pre>
 
             JetspeedSecurity.addUser(user);
 
-</pre>
-</div>
-<p>In Jetspeed-2, the standard way to access Jetspeed Services is to get a 
handle in the init phase, for example:</p>
+</pre>
+</div>
+<p>In Jetspeed-2, the standard way to access Jetspeed Services is to get a 
handle in the init phase, for example:</p>
 <div class="source"><pre>
 
     private UserManager userManager;
@@ -443,24 +443,24 @@ public class HelloWorld extends GenericP
         }    
     }
 
-</pre>
-</div>
-</div>
-<div class="section"><h3><a 
name="Converting_the_Portlet_getContent_Java_Code"></a>Converting the Portlet 
getContent Java Code</h3>
+</pre>
+</div>
+</div>
+<div class="section"><h3><a 
name="Converting_the_Portlet_getContent_Java_Code"></a>Converting the Portlet 
getContent Java Code</h3>
 <p>
                        In Jetspeed-1, the <b>getContent</b> method renders the 
content of your portlet. The render phase of Jetspeed-1 is implemented 
                        by the getContent method of your Portlet as defined by 
the Jetspeed-1 Portlet interface.
-                       </p>
+                       </p>
 <div class="source"><pre>
 
 public ConcreteElement getContent(RunData rundata);
 
-</pre>
-</div>
-<p>The only parameter passed in to the getContent method is a <b>RunData</b> 
parameter. RunData is a part of the <a 
href="http://jakarta.apache.org/turbine/"; class="externalLink">Turbine web 
framework</a>.
+</pre>
+</div>
+<p>The only parameter passed in to the getContent method is a <b>RunData</b> 
parameter. RunData is a part of the <a class="externalLink" 
href="http://jakarta.apache.org/turbine/";>Turbine web framework</a>.
 RunData is basically a wrapper around the Servlet request and response, along 
with other Turbine-specific information.
 When writing portlets for Jetspeed-2, you write to the Portlet API. 
-</p>
+</p>
 <div class="source"><pre>
 
 public void doView(RenderRequest request, RenderResponse response)
@@ -469,8 +469,8 @@ throws PortletException, IOException
     response.setContentType(&quot;text/html&quot;);
     ...
 
-</pre>
-</div>
+</pre>
+</div>
 <p>The <b>doView</b> method is the Portlet API equivalent of the 
<b>getContent</b> method of the Jetspeed-1 API.
 The Portlet API has the concept of <b>portlet modes</b>. There are three 
default portlet modes <b>view, edit, and help</b>.
 For each of these modes, there are three methods you can override in your 
portlet: <b>doView, doEdit and doHelp</b>.
@@ -478,21 +478,21 @@ Notice that where the Jetspeed-1 API has
 the <b>RenderRequest</b> and <b>RenderResponse</b>. One of the biggest parts 
of migrating your app will be to convert RunData references
 to RenderRequests and RenderResponses. Before starting, we recommend taking a 
training course on the Portlet API, or learning the API
 yourself by reading the Portlet specification as well as any articles or books 
on the subject. A good book to get started on the Portlet API
-is <a href="http://www.manning.com/hepper/"; class="externalLink">Portlets and 
Apache Portals</a>.
-</p>
+is <a class="externalLink" href="http://www.manning.com/hepper/";>Portlets and 
Apache Portals</a>.
+</p>
 <p>When rendering content, Jetspeed 1 makes use of a HTML construction kit 
called <b>ECS</b>. All rendering goes through Turbine and ECS.
 The return type of the getContent method is a <b>ConcreteElement</b>, which is 
defined in the ECS API. Here is the typical way to 
 generate output from a portlet in Jetspeed-1:
-</p>
+</p>
 <div class="source"><pre>
 
 ...
 String helloString = &quot;Hello World. This is the portlet output in view 
mode.&quot;;
 return new org.apache.jetspeed.util.JetspeedClearElement(helloString);        
 
-</pre>
-</div>
-<p>When rendering content in Jetspeed-2, the Portlet API uses a streaming 
interface:</p>
+</pre>
+</div>
+<p>When rendering content in Jetspeed-2, the Portlet API uses a streaming 
interface:</p>
 <div class="source"><pre>
 
 response.setContentType(&quot;text/html&quot;);
@@ -506,26 +506,26 @@ response.getWriter().println(helloString
 // using Java streaming
 response.getPortletOutputStream().write(helloString.getBytes());
 
-</pre>
-</div>
+</pre>
+</div>
 <p>Of course you can use JSPs or Velocity with either Jetspeed-1 or 
Jetspeed-2. 
 With Jetspeed-1, the common practice is to make use of the Jetspeed-1 
<b>GenericMVCPortlet</b> or one of its derivatives,
 the <b>VelocityPortlet</b> or the <b>JspPortlet</b>. Both the VelocityPortlet 
and JspPortlet are really just GenericMVCPortlets.
 Here is the xreg example of a WeatherPortlet which extends the 
GenericMVCPortlet by setting its parent to Velocity
-</p>
+</p>
 <div class="source"><pre>
 
     &lt;portlet-entry name=&quot;WeatherPortlet&quot; hidden=&quot;false&quot; 
type=&quot;ref&quot; parent=&quot;Velocity&quot; 
application=&quot;false&quot;&gt;
         &lt;parameter name=&quot;template&quot; value=&quot;weather&quot; 
hidden=&quot;true&quot;/&gt;
     &lt;/portlet-entry&gt;
 
-</pre>
-</div>
+</pre>
+</div>
 <p>The template parameter is named <b>weather</b>. Since this is a Velocity 
MVC portlet, Jetspeed-1 knows to look under 
 the <b>WEB-INF/templates/vm/portlets/html</b> directory to find 
<b>weather.vm</b>. The MVC portlet will automatically handle 
 the details of dispatching to this Velocity template to render your portlet. 
Here is the actual contents of the velocity template.
 Note that we don't have to write any portlet Java code in this case, but only 
the actual template.
-</p>
+</p>
 <div class="source"><pre>
 
 #if (!$weather_city_info)
@@ -536,11 +536,11 @@ target=&quot;_blank&quot;&gt;&lt;img src
 alt=&quot;Click for ${weather_city_info} Forecast&quot; 
border=&quot;0&quot;&gt;&lt;/a&gt;
 #end
 
-</pre>
-</div>
+</pre>
+</div>
 <p>With Jetspeed-2 and the Portlet API, we can make use of the Velocity Bridge 
or the JSP Bridge to delegate to portlets.
 The simplest case is just dispatching the call yourself to the JSP or Velocity 
servlet. Here is an example of dispatching to a JSP from the doView:
-</p>
+</p>
 <div class="source"><pre>
 
 protected void doView(RenderRequest request, RenderResponse response) throws 
PortletException, IOException
@@ -552,11 +552,11 @@ protected void doView(RenderRequest requ
     rd.include(request, response);
 }
 
-</pre>
-</div>
+</pre>
+</div>
 <p>And here is an example of the WeatherPortlet extending the Velocity Bridge, 
and making use of the Portlet API User Preferences feature,
 note that we do not directly create a dispatcher here, but the framework will 
do that automatically:
-</p>
+</p>
 <div class="source"><pre>
 
 import org.apache.portals.bridges.velocity.GenericVelocityPortlet;
@@ -587,9 +587,9 @@ public void doView(RenderRequest request
     super.doView(request, response);
 }
 
-</pre>
-</div>
-<p>And here is the Velocity template to render the portlet content:</p>
+</pre>
+</div>
+<p>And here is the Velocity template to render the portlet content:</p>
 <div class="source"><pre>
 
 #if (!$weather_city_info)
@@ -600,10 +600,10 @@ target=&quot;_blank&quot;&gt;&lt;img src
 alt=&quot;Click for $weather_city_info Forecast&quot; 
border=&quot;0&quot;&gt;&lt;/a&gt;
 #end
 
-</pre>
-</div>
-</div>
-<div class="section"><h3><a name="Converting_a_Turbine_Action"></a>Converting 
a Turbine Action</h3>
+</pre>
+</div>
+</div>
+<div class="section"><h3><a name="Converting_a_Turbine_Action"></a>Converting 
a Turbine Action</h3>
 <p>The Portlet API defines several phases of execution during the processing 
of a portlet page. The action phase is designed to be executed
 before the render phase of a portlet. There can only be one action phase 
targeting only one portlet. Once the action phase completes, then
 the render phase for all portlets on a page can be executed. Thus the action 
phase is said to be a <i>blocking</i> phase, meaning that it must
@@ -612,18 +612,18 @@ the <i>Model</i> of the MVC framework, s
 of actions ports fairly well from Turbine and Jetspeed-1 to Jetspeed-2 and the 
Portlet API. Whereas Turbine has the concept of one class per 
 action, the Portlet API has an entry point for all actions to come through as 
a method on your portlet. Frameworks such as the Spring MVC
 framework provide better abstractions for modeling one method per action.
-</p>
-<p>Lets again look at the WeatherPortlet with Jetspeed-1. First the xreg 
defines the actions:</p>
+</p>
+<p>Lets again look at the WeatherPortlet with Jetspeed-1. First the xreg 
defines the actions:</p>
 <div class="source"><pre>
 
         &lt;parameter name=&quot;action&quot; 
value=&quot;portlets.WeatherAction&quot; hidden=&quot;true&quot;/&gt;
 
-</pre>
-</div>
+</pre>
+</div>
 <p>
 We must then implement the action class which are usually placed in the 
Jetspeed-1 webapp class loader space.
 Here is the code for the WeatherAction, which extends a Jetspeed-1 framework 
class VelocityPortletAction:
-</p>
+</p>
 <div class="source"><pre>
 
 public class WeatherAction extends VelocityPortletAction
@@ -649,60 +649,60 @@ public class WeatherAction extends Veloc
         context.put(WEATHER_STYLE,style);
     }
 
-</pre>
-</div>
+</pre>
+</div>
 <p>
 In Jetspeed-1 there is some really bad architecture interfering with easily 
writing portlets.
 Here in our action, we are actually implementing the <b>View</b> portion of 
our code by populating the 
 Velocity context with <b>context.put</b> statements. Please beware that all 
code implemented in the 
 <b>buildNormalContext</b> method should be ported to the <b>doView</b> method 
of the Portlet API.
 Note how the actual portlet must be passed in as the first parameter to the 
buildNormalContext method.
-</p>
+</p>
 <p>The actual action code implemented as <b>do..</b> methods on your action 
class will need to be ported
 to the <b>processAction</b> method on the Portlet API.
-</p>
+</p>
 <div class="source"><pre>
 
     public void doInsert(RunData rundata, Context context)
         throws Exception
     {
 
-</pre>
-</div>
+</pre>
+</div>
 <p>The <b>doInsert</b> method is linked by Turbine to an action in the 
Velocity template with the <b>eventSubmit_</b> prefix:
-</p>
+</p>
 <div class="source"><pre>
 
 &lt;input type=&quot;submit&quot; name=&quot;eventSubmit_doInsert&quot; 
value=&quot;${l10n.USER_FORM_ADD_USER_VM}&quot;/&gt;
 
-</pre>
-</div>
-<p>Here is the equivalent in the Portlet API (Jetspeed-2):</p>
+</pre>
+</div>
+<p>Here is the equivalent in the Portlet API (Jetspeed-2):</p>
 <div class="source"><pre>
 
     public void processAction(ActionRequest actionRequest, ActionResponse 
actionResponse) 
         throws PortletException, IOException
 
-</pre>
-</div>
-<p>The Portlet API provides two parameters to the processAction method: the 
ActionRequest and ActionResponse.</p>
-</div>
-<div class="section"><h3><a 
name="Request_Parameters_Portlet_Modes_Window_States"></a>Request Parameters, 
Portlet Modes, Window States</h3>
-<p>Request parameters are accessed via RunData in Jetspeed-1:</p>
+</pre>
+</div>
+<p>The Portlet API provides two parameters to the processAction method: the 
ActionRequest and ActionResponse.</p>
+</div>
+<div class="section"><h3><a 
name="Request_Parameters_Portlet_Modes_Window_States"></a>Request Parameters, 
Portlet Modes, Window States</h3>
+<p>Request parameters are accessed via RunData in Jetspeed-1:</p>
 <div class="source"><pre>
 
        String name = rundata.getParameters().getString(&quot;username&quot;);
 
-</pre>
-</div>
-<p>With the Portlet API, portlet request parameters are accessed via the 
ActionRequest:</p>
+</pre>
+</div>
+<p>With the Portlet API, portlet request parameters are accessed via the 
ActionRequest:</p>
 <div class="source"><pre>
 
    String name = actionRequest.getParameter(&quot;username&quot;);
 
-</pre>
-</div>
-<p>With the Portlet API, you can check the Portlet Mode or Window State:</p>
+</pre>
+</div>
+<p>With the Portlet API, you can check the Portlet Mode or Window State:</p>
 <div class="source"><pre>
 
         if (actionRequest.getPortletMode() == PortletMode.EDIT)
@@ -711,12 +711,12 @@ to the <b>processAction</b> method on th
                {
                ...        
 
-</pre>
-</div>
+</pre>
+</div>
 <p>The basic Portlet API does not have a way to map actions to methods as in 
Jetspeed-1.
-                       If you would like this kind of behavior, we recommend 
using the <a href="http://www.springframework.org/docs/reference/portlet.html"; 
class="externalLink">Spring MVC Portlet framework</a>
+                       If you would like this kind of behavior, we recommend 
using the <a class="externalLink" 
href="http://www.springframework.org/docs/reference/portlet.html";>Spring MVC 
Portlet framework</a>
                        Here we demonstrate using portlet request parameters 
per form to map to specific actions:
-                       </p>
+                       </p>
 <div class="source"><pre>
 
                String action = 
actionRequest.getParameter(SecurityResources.PORTLET_ACTION);
@@ -734,28 +734,28 @@ to the <b>processAction</b> method on th
         }
                ...
 
-</pre>
-</div>
-</div>
-<div class="section"><h3><a 
name="Persisting_State:_The_Portlet_Session"></a>Persisting State: The Portlet 
Session</h3>
+</pre>
+</div>
+</div>
+<div class="section"><h3><a 
name="Persisting_State:_The_Portlet_Session"></a>Persisting State: The Portlet 
Session</h3>
 <p>The Portlet API provides built-in support for persistence of Portlet state 
in the session.
                        The Portlet Session is similar to the <b>setTemp</b> 
methods in Turbine/Jetspeed-1, or the session support built into the Servlet 
API.
                        The Session is for persisting state associated with the 
current user session. There are two kinds of session state supported by the 
Portlet API:                        
-                       </p>
-<ul><li>Application Session State: the session variable is shared by all 
portlets in a portlet application</li>
-<li>Portlet Session State: the session variable is specific to the one portlet 
instance window</li>
-</ul>
+                       </p>
+<ul><li>Application Session State: the session variable is shared by all 
portlets in a portlet application</li>
+<li>Portlet Session State: the session variable is specific to the one portlet 
instance window</li>
+</ul>
 <p>Here is how we would get and set session information in Jetspeed-1, using 
the Turbine RunData API. Note that for both Jetspeed-1 and Jetspeed-2, the
-                       object put in the session must be serializable:</p>
+                       object put in the session must be serializable:</p>
 <div class="source"><pre>
                        
              rundata.getUser().setTemp(ACCOUNT_INFO, accountInfo);
              ...
              AccountInfo accountInfo = 
(AccountInfo)rundata.getUser().getTemp(ACCOUNT_INFO);
 
-</pre>
-</div>
-<p>In here is the equivalent in Jetspeed-2 using the Portlet API:</p>
+</pre>
+</div>
+<p>In here is the equivalent in Jetspeed-2 using the Portlet API:</p>
 <div class="source"><pre>
        
         AccountInfo accountInfo = (AccountInfo)
@@ -770,23 +770,23 @@ to the <b>processAction</b> method on th
                -- or --
                session.setAttribute(ACCOUNT_INFO, accountInfo, 
PortletSession.APPLICATION_SCOPE);              
 
-</pre>
-</div>
-</div>
-<div class="section"><h3><a 
name="Persisting_State:_User_Preferences"></a>Persisting State: User 
Preferences</h3>
+</pre>
+</div>
+</div>
+<div class="section"><h3><a 
name="Persisting_State:_User_Preferences"></a>Persisting State: User 
Preferences</h3>
 <p>The Portlet API provides a second persistence mechanism: User Preferences. 
User Preferences are fields of information stored on a per user/per portlet 
window basis.
                        The equivalent in Jetspeed-1 is Portlet Instance data, 
which is stored in the Jetspeed-1 Portlet Registry as name/value pair 
<b>parameter</b> XML elements.
                        Looking at the XREG file in Jetspeed-1, we have:        
                
-                       </p>
+                       </p>
 <div class="source"><pre>
        
         &lt;parameter name=&quot;weather_city_info&quot; 
value=&quot;US/IN/Bloomington&quot; hidden=&quot;true&quot;/&gt;
 
-</pre>
-</div>
+</pre>
+</div>
 <p>The Portlet API allows you to define default values for preferences in the 
portlet.xml deployment descriptor. The user-specific values are stored in the 
Jetspeed Preferences database.
                        Here is an example of the default value for a 
preference as it would be defined in the deployment descriptor:
-                       </p>
+                       </p>
 <div class="source"><pre>
        
             &lt;preference&gt;
@@ -794,14 +794,14 @@ to the <b>processAction</b> method on th
                 &lt;value&gt;Oakland&lt;/value&gt;
             &lt;/preference&gt;
 
-</pre>
-</div>
+</pre>
+</div>
 <p>Jetspeed-1 provides the <b>PortletInstance</b> interface on every portlet 
for accessing preference-like information. Whereas the preference information 
is per-user and per-instance in 
                Jetspeed-2, in Jetspeed-1 preference information accessed via 
the PortletInstance interface is only per-instance(per PortletWindow) specific. 
These values are stored in the PSML file associated
                with the PortletWindow. Please note that the values can still 
be <i>user-specific</i> when you are using the default mechanism for locating 
pages, which is by user. This means that in Jetspeed-1
                preferences (or parameters) are made user-specific by the 
nature of how pages are retrieved. Since a page is located under a user home 
directory, then the preference is naturally per user.
-               </p>
-<p>With Jetspeed-1, here we can retrieve PortletInstance data:</p>
+               </p>
+<p>With Jetspeed-1, here we can retrieve PortletInstance data:</p>
 <div class="source"><pre>
 
         // where &quot;this&quot; is a Jetspeed-1 Portlet object
@@ -816,10 +816,10 @@ to the <b>processAction</b> method on th
        -- or --
        this.setAttribute(&quot;favoriteColor&quot;, &quot;red&quot;, rundata);
 
-</pre>
-</div>
+</pre>
+</div>
 <p>With the Portlet API in Jetspeed-2, we can use the Portlet Preferences in a 
more direct manner. 
-               Remember that the store() method must always be called after 
all modifications to the prefs during a request:</p>
+               Remember that the store() method must always be called after 
all modifications to the prefs during a request:</p>
 <div class="source"><pre>
 
         PortletPreferences prefs = actionRequest.getPreferences();
@@ -834,455 +834,455 @@ to the <b>processAction</b> method on th
         // or retrieve all preferences as a Map
         Map allPrefs = actionRequest.getPreferences().getMap();        
 
-</pre>
-</div>
-</div>
-</div>
-<div class="section"><h2><a name="Registries"></a>Registries</h2>
-<p>The Jetspeed-1 Registries hold the following information:</p>
-<ul><li>Portlet Definitions</li>
-<li>Security Definitions</li>
-<li>Web Clients and Media Type Registries</li>
-<li>Skins Definitions</li>
-<li>Controller Definitions</li>
-<li>Control Definitions</li>
-</ul>
-<p>This section will guide you through how to migrate each of these registries 
from Jetspeed-1 to Jetspeed-2</p>
-<div class="section"><h3><a name="Portlet_Definitions"></a>Portlet 
Definitions</h3>
+</pre>
+</div>
+</div>
+</div>
+<div class="section"><h2><a name="Registries"></a>Registries</h2>
+<p>The Jetspeed-1 Registries hold the following information:</p>
+<ul><li>Portlet Definitions</li>
+<li>Security Definitions</li>
+<li>Web Clients and Media Type Registries</li>
+<li>Skins Definitions</li>
+<li>Controller Definitions</li>
+<li>Control Definitions</li>
+</ul>
+<p>This section will guide you through how to migrate each of these registries 
from Jetspeed-1 to Jetspeed-2</p>
+<div class="section"><h3><a name="Portlet_Definitions"></a>Portlet 
Definitions</h3>
 <p>Jetpeed-1 requires that all portlets are defined in an XML file known as an 
XREG file (XML Registry). Jetspeed-2 stores its portlet registry in the 
database.
                 In Jetspeed-1, the XML registry is on the file system under 
the jetspeed webapp under WEB-INF/conf.
                There can be one or more portlet registry entries. All portlets 
are defined with the element type <b>portlet-entry</b>.
-               </p>
+               </p>
 <p>Migrating your Jetspeed-1 portlet registries to Jetspeed-2 registries 
requires writing a new Portlet API standard <b>portlet.xml</b> definition file. 
We do not provide an XSLT transform to do this for you.
                Whereas the portlet.xml is defined by the Java Standard Portlet 
API, Jetspeed allows for additional information to be defined specific to the 
Jetspeed portal: the <b>jetspeed-portlet.xml</b> can hold Jetspeed-specific
                deployment configurations. Some of the XREG elements map to the 
portlet.xml, whereas others will map to the jetspeed-portlet.xml as noted in 
the tables below.
                The table below describes how to map each XML attribute of the 
<b>portlet-entry</b> element to its equivalent in the Portlet API portlet.xml 
or jetspeed-portlet.xml.
                Note that we are mapping in this table from XML attributes to 
XML elements in the portlet.xml or jetspeed-portlet.xml:
-               </p>
-<table class="bodyTable"><tr class="a"><th>J1 Attribute</th>
-<th>J2 Element</th>
-<th></th>
-</tr>
-<tr class="b"><td>name</td>
-<td>portlet-name</td>
-<td>The name of the portlet. This name is unique to each portlet application, 
but not unique system-wide.</td>
-</tr>
-<tr class="a"><td>hidden</td>
-<td></td>
-<td>No equivalent in the Portlet API, not applicable.</td>
-</tr>
-<tr class="b"><td>type</td>
-<td></td>
-<td>No equivalent in the Portlet API, not applicable.</td>
-</tr>
-<tr class="a"><td>parent</td>
-<td></td>
-<td>No equivalent in the Portlet API, not applicable.</td>
-</tr>
-<tr class="b"><td>application</td>
-<td></td>
-<td>No equivalent in the Portlet API, not applicable.</td>
-</tr>
-</table>
+               </p>
+<table class="bodyTable"><tr class="a"><th>J1 Attribute</th>
+<th>J2 Element</th>
+<th></th>
+</tr>
+<tr class="b"><td>name</td>
+<td>portlet-name</td>
+<td>The name of the portlet. This name is unique to each portlet application, 
but not unique system-wide.</td>
+</tr>
+<tr class="a"><td>hidden</td>
+<td></td>
+<td>No equivalent in the Portlet API, not applicable.</td>
+</tr>
+<tr class="b"><td>type</td>
+<td></td>
+<td>No equivalent in the Portlet API, not applicable.</td>
+</tr>
+<tr class="a"><td>parent</td>
+<td></td>
+<td>No equivalent in the Portlet API, not applicable.</td>
+</tr>
+<tr class="b"><td>application</td>
+<td></td>
+<td>No equivalent in the Portlet API, not applicable.</td>
+</tr>
+</table>
 <p>
                Continuing with the Portlet XREG conversion, lets now look at 
how to convert the XML elements of the <b>portlet-entry</b> element.
                The table below describes how to map each XML element to its 
equivalent in the Portlet API portlet.xml:
-               </p>
-<table class="bodyTable"><tr class="a"><th>J1 Element</th>
-<th>J2 Element</th>
-<th></th>
-</tr>
-<tr class="b"><td>classname</td>
-<td>portlet-class</td>
-<td>The implementing Java class. This class will need to be ported at the 
source level.</td>
-</tr>
-<tr class="a"><td>media-type</td>
-<td>supports, supports/mime-type, supports/portlet-mode</td>
-<td>Media types supported by the portlet must be mapped to one or more 
<i>supports</i> elements, with subelements of <i>mime-type</i> and 
<i>portlet-mode</i> pairs.</td>
-</tr>
-<tr class="b"><td>meta-info/title</td>
-<td>title</td>
-<td>The title of the Portlet.</td>
-</tr>
-<tr class="a"><td>meta-info/description</td>
-<td>description</td>
-<td>The description of the portlet</td>
-</tr>
-<tr class="b"><td>category</td>
-<td>portlet-info/keywords</td>
-<td>Where there are multiple categories elements, keywords are 
comma-separated. In Jetspeed-2, you can configure categories in the 
Portlet-Selector administrative portlet based on keywords.</td>
-</tr>
-<tr class="a"><td>security-ref</td>
-<td>jetspeed-portlet.xml: js:security-constraint-ref</td>
-<td>If you port your Security constraints definitions, you can keep the same 
security definition names. Just note that security constraint definitions are 
referenced from the jetspeed-portlet.xml, not portlet.xml</td>
-</tr>
-<tr class="b"><td>parameter</td>
-<td>init-param</td>
-<td>Parameters in Jetspeed-1 should normally map to <i>init-param</i>s in the 
Portlet API. These are read only values that can only be changed by the 
administrator</td>
-</tr>
-<tr class="a"><td>parameter@name</td>
-<td>init-param/name</td>
-<td>The name of the init parameter</td>
-</tr>
-<tr class="b"><td>parameter@value</td>
-<td>init-param/value</td>
-<td>The value of the init parameter</td>
-</tr>
-<tr class="a"><td>parameter/meta-info/description</td>
-<td>init-param/description</td>
-<td>The description of the init parameter</td>
-</tr>
-<tr class="b"><td>parameter</td>
-<td>portlet-preferences/preference</td>
-<td>As well as migrating to init-params, parameters may also be migrated as 
default preferences. Note that preferences can optionally be read-only.</td>
-</tr>
-<tr class="a"><td>parameter@name</td>
-<td>portlet-preferences/preference/name</td>
-<td>The name of the preference</td>
-</tr>
-<tr class="b"><td>parameter@value</td>
-<td>portlet-preferences/preference/value</td>
-<td>The value of the preference</td>
-</tr>
-<tr class="a"><td>parameter@hidden</td>
-<td>portlet-preferences/preference/read-only</td>
-<td>Optionally you map want to map hidden values to read-only (true/false)</td>
-</tr>
-</table>
-</div>
-<div class="section"><h3><a name="Security_Definitions"></a>Security 
Definitions</h3>
+               </p>
+<table class="bodyTable"><tr class="a"><th>J1 Element</th>
+<th>J2 Element</th>
+<th></th>
+</tr>
+<tr class="b"><td>classname</td>
+<td>portlet-class</td>
+<td>The implementing Java class. This class will need to be ported at the 
source level.</td>
+</tr>
+<tr class="a"><td>media-type</td>
+<td>supports, supports/mime-type, supports/portlet-mode</td>
+<td>Media types supported by the portlet must be mapped to one or more 
<i>supports</i> elements, with subelements of <i>mime-type</i> and 
<i>portlet-mode</i> pairs.</td>
+</tr>
+<tr class="b"><td>meta-info/title</td>
+<td>title</td>
+<td>The title of the Portlet.</td>
+</tr>
+<tr class="a"><td>meta-info/description</td>
+<td>description</td>
+<td>The description of the portlet</td>
+</tr>
+<tr class="b"><td>category</td>
+<td>portlet-info/keywords</td>
+<td>Where there are multiple categories elements, keywords are 
comma-separated. In Jetspeed-2, you can configure categories in the 
Portlet-Selector administrative portlet based on keywords.</td>
+</tr>
+<tr class="a"><td>security-ref</td>
+<td>jetspeed-portlet.xml: js:security-constraint-ref</td>
+<td>If you port your Security constraints definitions, you can keep the same 
security definition names. Just note that security constraint definitions are 
referenced from the jetspeed-portlet.xml, not portlet.xml</td>
+</tr>
+<tr class="b"><td>parameter</td>
+<td>init-param</td>
+<td>Parameters in Jetspeed-1 should normally map to <i>init-param</i>s in the 
Portlet API. These are read only values that can only be changed by the 
administrator</td>
+</tr>
+<tr class="a"><td>parameter@name</td>
+<td>init-param/name</td>
+<td>The name of the init parameter</td>
+</tr>
+<tr class="b"><td>parameter@value</td>
+<td>init-param/value</td>
+<td>The value of the init parameter</td>
+</tr>
+<tr class="a"><td>parameter/meta-info/description</td>
+<td>init-param/description</td>
+<td>The description of the init parameter</td>
+</tr>
+<tr class="b"><td>parameter</td>
+<td>portlet-preferences/preference</td>
+<td>As well as migrating to init-params, parameters may also be migrated as 
default preferences. Note that preferences can optionally be read-only.</td>
+</tr>
+<tr class="a"><td>parameter@name</td>
+<td>portlet-preferences/preference/name</td>
+<td>The name of the preference</td>
+</tr>
+<tr class="b"><td>parameter@value</td>
+<td>portlet-preferences/preference/value</td>
+<td>The value of the preference</td>
+</tr>
+<tr class="a"><td>parameter@hidden</td>
+<td>portlet-preferences/preference/read-only</td>
+<td>Optionally you map want to map hidden values to read-only (true/false)</td>
+</tr>
+</table>
+</div>
+<div class="section"><h3><a name="Security_Definitions"></a>Security 
Definitions</h3>
 <p>Jetspeed-1 supports a Security Constraint XML definition language that is 
very similiar to the XML security constraint definitions in Jetspeed-2.
                Jetpeed-1 requires that all security definitions are defined in 
an XML file known as an XREG file (XML Registry). Jetspeed-2 stores its 
security registry either in an XML file or in the database.
                 In Jetspeed-1, the XML registry is on the file system under 
the jetspeed webapp under WEB-INF/conf.
                There can be one or more security registry entries. All 
security constraints are defined with the element type <b>security-entry</b>.
-               </p>
+               </p>
 <p>Migrating your Jetspeed-1 security constraints registries to Jetspeed-2 
registries requires writing a new <b>page.security</b> XML definition file. We 
do not provide an XSLT transform to do this for you.
                The table below describes how to map each XML attribute of the 
<b>security-entry</b> element to its equivalent in the Portlet API portlet.xml 
or jetspeed-portlet.xml.
                Note that we are mapping in this table from XML attributes to 
XML elements in the portlet.xml or jetspeed-portlet.xml:
-               </p>
-<table class="bodyTable"><tr class="b"><th>J1 Attribute</th>
-<th>J2 Attribute</th>
-<th></th>
-</tr>
-<tr class="a"><td>security-entry@name</td>
-<td>security-constraints-def@name</td>
-<td>The name of the security constraint definition. This name is unique to the 
entire page.security file.</td>
-</tr>
-<tr class="b"><td>meta-info/title</td>
-<td></td>
-<td>No equivalent in Jetspeed-2, not applicable.</td>
-</tr>
-<tr class="a"><td>meta-info/description</td>
-<td></td>
-<td>No equivalent in Jetspeed-2, not applicable.</td>
-</tr>
-<tr class="b"><td>access</td>
-<td>security-constraint</td>
-<td>Jetspeed-1 security-entries contain 0..n <i>access</i> elements, 
Jetspeed-2 security-constraint-defs contain 0..n <i>security-constraint</i> 
elements.</td>
-</tr>
-<tr class="a"><td>access@action</td>
-<td>security-constraint/permissions</td>
+               </p>
+<table class="bodyTable"><tr class="b"><th>J1 Attribute</th>
+<th>J2 Attribute</th>
+<th></th>
+</tr>
+<tr class="a"><td>security-entry@name</td>
+<td>security-constraints-def@name</td>
+<td>The name of the security constraint definition. This name is unique to the 
entire page.security file.</td>
+</tr>
+<tr class="b"><td>meta-info/title</td>
+<td></td>
+<td>No equivalent in Jetspeed-2, not applicable.</td>
+</tr>
+<tr class="a"><td>meta-info/description</td>
+<td></td>
+<td>No equivalent in Jetspeed-2, not applicable.</td>
+</tr>
+<tr class="b"><td>access</td>
+<td>security-constraint</td>
+<td>Jetspeed-1 security-entries contain 0..n <i>access</i> elements, 
Jetspeed-2 security-constraint-defs contain 0..n <i>security-constraint</i> 
elements.</td>
+</tr>
+<tr class="a"><td>access@action</td>
+<td>security-constraint/permissions</td>
 <td>
                Actions in Jetspeed-1 are called Permissions in Jetspeed-2.
                Both versions support wildcarding with the * character.
-               <ul><li>Jetspeed-1 default actions are view, customize, 
maximize, minimize, info, close.</li>
-<li>Jetspeed-2 default permissions are view, edit, help, print</li>
-</ul>
-</td>
-</tr>
-<tr class="b"><td>access/allow-if@role</td>
-<td>security-constraint/roles</td>
+               <ul><li>Jetspeed-1 default actions are view, customize, 
maximize, minimize, info, close.</li>
+<li>Jetspeed-2 default permissions are view, edit, help, print</li>
+</ul>
+</td>
+</tr>
+<tr class="b"><td>access/allow-if@role</td>
+<td>security-constraint/roles</td>
 <td>Jetspeed-1 constrains by role through <i>allow-if</i> elements with a 
<i>role</i> attribute.
-               Jetspeed-2 constrains by role with the <i>roles</i> element and 
a comma-separated list of one or more roles</td>
-</tr>
-<tr class="a"><td>access/allow-if@group</td>
-<td>security-constraint/groups</td>
+               Jetspeed-2 constrains by role with the <i>roles</i> element and 
a comma-separated list of one or more roles</td>
+</tr>
+<tr class="a"><td>access/allow-if@group</td>
+<td>security-constraint/groups</td>
 <td>Jetspeed-1 constrains by group through <i>allow-if</i> elements with a 
<i>group</i> attribute.
-               Jetspeed-2 constrains by group with the <i>groups</i> element 
and a comma-separated list of one or more groups</td>
-</tr>
-<tr class="b"><td>access/allow-if@user</td>
-<td>security-constraint/users</td>
+               Jetspeed-2 constrains by group with the <i>groups</i> element 
and a comma-separated list of one or more groups</td>
+</tr>
+<tr class="b"><td>access/allow-if@user</td>
+<td>security-constraint/users</td>
 <td>Jetspeed-1 constrains by user through <i>allow-if</i> elements with a 
<i>user</i> attribute.
-               Jetspeed-2 constrains by user with the <i>users</i> element and 
a comma-separated list of one or more users, or the wildcard * to specify all 
users.</td>
-</tr>
-<tr class="a"><td>access/allow-if-owner</td>
-<td>security-constraints/owner</td>
+               Jetspeed-2 constrains by user with the <i>users</i> element and 
a comma-separated list of one or more users, or the wildcard * to specify all 
users.</td>
+</tr>
+<tr class="a"><td>access/allow-if-owner</td>
+<td>security-constraints/owner</td>
 <td>You can set the constraint to be only accessible by the owner of the page. 
In Jetspeed-1, this is implied by the location of the page.
-               With Jetspeed-2 you must explicity name the owner in the 
element text of the owner element.</td>
-</tr>
-</table>
-</div>
-<div class="section"><h3><a 
name="Web_Clients_and_Media_Type_Registries"></a>Web Clients and Media Type 
Registries</h3>
+               With Jetspeed-2 you must explicity name the owner in the 
element text of the owner element.</td>
+</tr>
+</table>
+</div>
+<div class="section"><h3><a 
name="Web_Clients_and_Media_Type_Registries"></a>Web Clients and Media Type 
Registries</h3>
 <p>The Web Clients and Media Type registries are already ported to Jetspeed-2 
and a part of the core system.
                Jetspeed-2 stores these registries in the database. However 
these tables can be populated using seed data
-               as described in the section below on seed data.</p>
-</div>
-<div class="section"><h3><a name="Skins"></a>Skins</h3>
+               as described in the section below on seed data.</p>
+</div>
+<div class="section"><h3><a name="Skins"></a>Skins</h3>
 <p>The Skin registries are not directly portable to Jetspeed-2. Jetspeed-2 has 
moved towards a more standard CSS based 
                skinning approach. There are two basic skinning techniques 
which can be combined:
-               </p>
-<ul><li>1. Portlet API Standard Skins - see PLT.C of the portlet 
specification. A standard set of CSS styles are defined for global skinning of 
portlet content.</li>
-<li>2. Jetspeed Decorators - Decorators can define their own skins which can 
then be leveraged by portlets by accessing these styles. The default decorators 
in Jetspeed also define the PLT.C styles as well</li>
-</ul>
-</div>
-<div class="section"><h3><a name="Controllers"></a>Controllers</h3>
+               </p>
+<ul><li>1. Portlet API Standard Skins - see PLT.C of the portlet 
specification. A standard set of CSS styles are defined for global skinning of 
portlet content.</li>
+<li>2. Jetspeed Decorators - Decorators can define their own skins which can 
then be leveraged by portlets by accessing these styles. The default decorators 
in Jetspeed also define the PLT.C styles as well</li>
+</ul>
+</div>
+<div class="section"><h3><a name="Controllers"></a>Controllers</h3>
 <p>Controllers are deprecated in Jetspeed-2. There is no direct mapping for 
converting the Java code. Instead you will need to rewrite a new Layout 
portlet, or more likely simply use
                one of the existing Layout Portlets that come with Jetspeed, 
which are quite flexible. The default layout portlets in Jetspeed support 
multi-column grids, nesting portlets, and complete
                customization using the Portlet Customizer.
-               </p>
-</div>
-<div class="section"><h3><a name="Controls"></a>Controls</h3>
+               </p>
+</div>
+<div class="section"><h3><a name="Controls"></a>Controls</h3>
 <p>Controls are deprecated in Jetspeed-2. There is no direct mapping for 
converting the Java code. Instead you will need to rewrite a new Portlet 
decorator, or more likely simply use
                one of the existing Portlet decorators that come with Jetspeed, 
which are quite flexible. 
-               </p>
-</div>
-</div>
-<div class="section"><h2><a name="PSML"></a>PSML</h2>
-<div class="section"><h3><a name="The_Jetspeed_Sitemap"></a>The Jetspeed 
Sitemap</h3>
+               </p>
+</div>
+</div>
+<div class="section"><h2><a name="PSML"></a>PSML</h2>
+<div class="section"><h3><a name="The_Jetspeed_Sitemap"></a>The Jetspeed 
Sitemap</h3>
 <p>The Jetspeed Sitemap defines the navigational space of all pages in the 
portal.
                                Both versions 1 and 2 have similiar hiearchical 
file system-like site maps.
                                Both contain a root folder /, which in turn 
contains a tree of subfolders, where each subfolder 
-                               can contain pages or more subfolders.</p>
-</div>
-<div class="section"><h3><a name="Site_Resources"></a>Site Resources</h3>
+                               can contain pages or more subfolders.</p>
+</div>
+<div class="section"><h3><a name="Site_Resources"></a>Site Resources</h3>
 <p>In Jetspeed-2, there is a well-defined portal resources that do not always 
have equivalents in Jetspeed-1:
-                               <table class="bodyTable"><tr 
class="b"><th>2.x</th>
-<th>1.x</th>
-<th>File</th>
-</tr>
-<tr class="a"><td>Page</td>
-<td>Page</td>
-<td>A <b>.psml</b> file.</td>
-</tr>
-<tr class="b"><td>Folder</td>
-<td>--</td>
-<td>A <b>folder.metadata</b> file, one per folder, N/A in Jetspeed-1</td>
-</tr>
-<tr class="a"><td>Link</td>
-<td>--</td>
-<td>A <b>.link</b> file, N/A in Jetspeed-1</td>
-</tr>
-<tr class="b"><td>Menu</td>
-<td>--</td>
-<td>Menus are defined in folder.metadata, N/A in Jetspeed-1</td>
-</tr>
-</table>
-</p>
-</div>
-<div class="section"><h3><a name="Reserved_Directories"></a>Reserved 
Directories</h3>
+                               <table class="bodyTable"><tr 
class="b"><th>2.x</th>
+<th>1.x</th>
+<th>File</th>
+</tr>
+<tr class="a"><td>Page</td>
+<td>Page</td>
+<td>A <b>.psml</b> file.</td>
+</tr>
+<tr class="b"><td>Folder</td>
+<td>--</td>
+<td>A <b>folder.metadata</b> file, one per folder, N/A in Jetspeed-1</td>
+</tr>
+<tr class="a"><td>Link</td>
+<td>--</td>
+<td>A <b>.link</b> file, N/A in Jetspeed-1</td>
+</tr>
+<tr class="b"><td>Menu</td>
+<td>--</td>
+<td>Menus are defined in folder.metadata, N/A in Jetspeed-1</td>
+</tr>
+</table>
+</p>
+</div>
+<div class="section"><h3><a name="Reserved_Directories"></a>Reserved 
Directories</h3>
 <p>There are reserved directories available in both versions. The naming is a 
little different.
                                  Any directory starting with an underscore (_) 
in Jetspeed-2 is considered a control directory
                                  and can be used by the profiler (see below) 
to locate special directories based on runtime criteria
                                  such as the user name or the roles of the 
user. Jetspeed-1 has a hard-coded set of reserved (control) 
                                  directories that are hard-coded into the 
profiling rules.
-                                 </p>
-<table class="bodyTable"><tr class="a"><th>1.x</th>
-<th>2.x</th>
-<th></th>
-</tr>
-<tr class="b"><td>user</td>
-<td>_user</td>
-<td>Holds all user folders</td>
-</tr>
-<tr class="a"><td>role</td>
-<td>_role</td>
-<td>Holds all role folders</td>
-</tr>
-<tr class="b"><td>group</td>
-<td>_group</td>
-<td>Holds all group folders</td>
-</tr>
-<tr class="a"><td>{mediatype}</td>
-<td>_mediatype</td>
-<td>Content per mime/mediatype</td>
-</tr>
-<tr class="b"><td>{language}</td>
-<td>_lanaguage</td>
-<td>Content per language</td>
-</tr>
-<tr class="a"><td>{country}</td>
-<td>_country</td>
-<td>Content per country code</td>
-</tr>
-</table>
+                                 </p>
+<table class="bodyTable"><tr class="a"><th>1.x</th>
+<th>2.x</th>
+<th></th>
+</tr>
+<tr class="b"><td>user</td>
+<td>_user</td>
+<td>Holds all user folders</td>
+</tr>
+<tr class="a"><td>role</td>
+<td>_role</td>
+<td>Holds all role folders</td>
+</tr>
+<tr class="b"><td>group</td>
+<td>_group</td>
+<td>Holds all group folders</td>
+</tr>
+<tr class="a"><td>{mediatype}</td>
+<td>_mediatype</td>
+<td>Content per mime/mediatype</td>
+</tr>
+<tr class="b"><td>{language}</td>
+<td>_lanaguage</td>
+<td>Content per language</td>
+</tr>
+<tr class="a"><td>{country}</td>
+<td>_country</td>
+<td>Content per country code</td>
+</tr>
+</table>
 <p>
                                  Where the J1 directory names are actually the 
names of the reserved directory, such as 
                                  {mediatype} would be actually <b>html</b> or 
{language} would be <b>en</b>. J2 requires 
-                                 specifing control directories (_) such as 
<b>_mediatype/html</b>, or <b>_language/en</b></p>
-</div>
-<div class="section"><h3><a name="Profiling"></a>Profiling</h3>
+                                 specifing control directories (_) such as 
<b>_mediatype/html</b>, or <b>_language/en</b></p>
+</div>
+<div class="section"><h3><a name="Profiling"></a>Profiling</h3>
 <p>The Profiling algorithm discovers the correct page to display during a 
request.
-                               J1 has only two hard-coded algorithm for 
finding pages:</p>
-<ul><li>J1 user/mediatype/language/country fallback</li>
-<li>J1 rollback</li>
-</ul>
+                               J1 has only two hard-coded algorithm for 
finding pages:</p>
+<ul><li>J1 user/mediatype/language/country fallback</li>
+<li>J1 rollback</li>
+</ul>
 <p>Note that these settings are system wide and must be changed on a per 
portal basis.
                                J1 expects an explicit container order of 
mediatype / language / country
-                               </p>
+                               </p>
 <p>
                                  J2 has a profiling rules engine that takes 
dynamic runtime user information, and using profiling rules
                                  discovers the rules based on the algorithm 
defined in the rules.
                                  In J2 profiling rules are defined on a per 
user basis, although there is a system-wide default profiling rule.
-                               </p>
-</div>
-<div class="section"><h3><a name="Differences_in_PSML_Page"></a>Differences in 
PSML Page</h3>
+                               </p>
+</div>
+<div class="section"><h3><a name="Differences_in_PSML_Page"></a>Differences in 
PSML Page</h3>
 <p>Jetpeed-1 requires that all portlets are defined in an XML file known as an 
XREG file (XML Registry). Jetspeed-2 stores its portlet registry in the 
database.
                 In Jetspeed-1, PSML files can be stored under the jetspeed 
webapp under WEB-INF/psml. Or, Jetspeed-1 supports storing PSML files in the 
database.
                 In Jetspeed-2, PSML files can be stored under the jetspeed 
webapp under WEB-INF/pages or WEB-INF/min-pages. Or, Jetspeed-2 supports 
storing PSML files in the database.                 
-               </p>
+               </p>
 <p>Migrating your Jetspeed-1 PSML files to Jetspeed-2 PSML files requires 
porting the files manually, or writing a database conversion utility or XSLT 
transform. We do not provide an XSLT transform to do this for you.
                The table below describes how to map each XML element or 
attribute from Jetspeed-1 to Jetspeed-2:
-               </p>
-<table class="bodyTable"><tr class="b"><th>J1 Element</th>
-<th>J2 Element</th>
-<th></th>
-</tr>
-<tr class="a"><td>portlets</td>
-<td>page</td>
-<td>The outermost container of all content found on a PSML page.</td>
-</tr>
-<tr class="b"><td>portlets@id</td>
-<td>page@id</td>
-<td>System wide unique identifier for this page.</td>
-</tr>
-<tr class="a"><td>metainfo/title</td>
-<td>title</td>
-<td>The Page Title.</td>
-</tr>
-<tr class="b"><td>security-ref</td>
-<td>security-constraints/security-constraints-ref</td>
-<td>The security constraint reference (0..1 in Jetspeed-1, 0..n in 
Jetspeed-2)</td>
-</tr>
-<tr class="a"><td>control</td>
-<td>defaults/portlet-decorator</td>
-<td>Requires porting your controls to J2 portlet decorators, or at least 
mapping the names to existing decorators in Jetspeed-2. Or you can use a global 
portlet decorator and ignore this optional setting.</td>
-</tr>
-<tr class="b"><td>controller</td>
-<td>defaults/layout-decorator</td>
+               </p>
+<table class="bodyTable"><tr class="b"><th>J1 Element</th>
+<th>J2 Element</th>
+<th></th>
+</tr>
+<tr class="a"><td>portlets</td>
+<td>page</td>
+<td>The outermost container of all content found on a PSML page.</td>
+</tr>
+<tr class="b"><td>portlets@id</td>
+<td>page@id</td>
+<td>System wide unique identifier for this page.</td>
+</tr>
+<tr class="a"><td>metainfo/title</td>
+<td>title</td>
+<td>The Page Title.</td>
+</tr>
+<tr class="b"><td>security-ref</td>
+<td>security-constraints/security-constraints-ref</td>
+<td>The security constraint reference (0..1 in Jetspeed-1, 0..n in 
Jetspeed-2)</td>
+</tr>
+<tr class="a"><td>control</td>
+<td>defaults/portlet-decorator</td>
+<td>Requires porting your controls to J2 portlet decorators, or at least 
mapping the names to existing decorators in Jetspeed-2. Or you can use a global 
portlet decorator and ignore this optional setting.</td>
+</tr>
+<tr class="b"><td>controller</td>
+<td>defaults/layout-decorator</td>
 <td>Requires porting your Turbine controllers, screens navigations to J2 
layout(page) decorators, or at least mapping the names to existing page 
decorators in Jetspeed-2. 
-               Or you can use a global portlet decorator and ignore this 
optional setting.</td>
-</tr>
-<tr class="a"><td>portlets/portlets/...</td>
-<td>page/fragment/..., type=&quot;layout&quot;</td>
-<td>Sub-containers of fragments or portlets. In Jetspeed-2, fragments can be 
either containers or portlet definitions. Only fragments with the type of 
<b>layout</b> can be a container holding more fragments and containers.</td>
-</tr>
-<tr class="b"><td>portlets/portlets/controller</td>
-<td>page/fragment@type=layout@name={layout-name}</td>
-<td>Controllers roughly map to fragments of type = layout, named by the name 
attribute. Note that layouts are implemented as portlets and must be specified 
as PA::portlet-name.</td>
-</tr>
-<tr class="a"><td>portlets/entry</td>
-<td>page/fragment/fragment@type=&quot;portlet&quot;</td>
-<td>A portlet window on a page.</td>
-</tr>
-<tr class="b"><td>entry@id</td>
-<td>fragment@id</td>
-<td>The system-wide unique ID of the portlet window.</td>
-</tr>
-<tr class="a"><td>entry@parent</td>
-<td>fragment@name</td>
-<td>The portlet registry reference. In Jetspeed-2 the name of the portlet must 
be specified as PA::portlet-name</td>
-</tr>
-<tr 
class="b"><td>entry/layout/property@name=&quot;column&quot;@value={column}</td>
-<td>fragment/property@name=&quot;column&quot;@value={column}</td>
-<td>The property containing the column position</td>
-</tr>
-<tr class="a"><td>entry/layout/property@name=&quot;row&quot;@value={row}</td>
-<td>fragment/property@name=&quot;row&quot;@value={row}</td>
-<td>The property containing the row position</td>
-</tr>
-</table>
-</div>
-<div class="section"><h3><a name="Menus_vs_Tabs"></a>Menus vs Tabs</h3>
+               Or you can use a global portlet decorator and ignore this 
optional setting.</td>
+</tr>
+<tr class="a"><td>portlets/portlets/...</td>
+<td>page/fragment/..., type=&quot;layout&quot;</td>
+<td>Sub-containers of fragments or portlets. In Jetspeed-2, fragments can be 
either containers or portlet definitions. Only fragments with the type of 
<b>layout</b> can be a container holding more fragments and containers.</td>
+</tr>
+<tr class="b"><td>portlets/portlets/controller</td>
+<td>page/fragment@type=layout@name={layout-name}</td>
+<td>Controllers roughly map to fragments of type = layout, named by the name 
attribute. Note that layouts are implemented as portlets and must be specified 
as PA::portlet-name.</td>
+</tr>
+<tr class="a"><td>portlets/entry</td>
+<td>page/fragment/fragment@type=&quot;portlet&quot;</td>
+<td>A portlet window on a page.</td>
+</tr>
+<tr class="b"><td>entry@id</td>
+<td>fragment@id</td>
+<td>The system-wide unique ID of the portlet window.</td>
+</tr>
+<tr class="a"><td>entry@parent</td>
+<td>fragment@name</td>
+<td>The portlet registry reference. In Jetspeed-2 the name of the portlet must 
be specified as PA::portlet-name</td>
+</tr>
+<tr 
class="b"><td>entry/layout/property@name=&quot;column&quot;@value={column}</td>
+<td>fragment/property@name=&quot;column&quot;@value={column}</td>
+<td>The property containing the column position</td>
+</tr>
+<tr class="a"><td>entry/layout/property@name=&quot;row&quot;@value={row}</td>
+<td>fragment/property@name=&quot;row&quot;@value={row}</td>
+<td>The property containing the row position</td>
+</tr>
+</table>
+</div>
+<div class="section"><h3><a name="Menus_vs_Tabs"></a>Menus vs Tabs</h3>
 <p>There is a big difference with the navigational aspects, or menus, between 
Jetspeed-1 and Jetspeed-2.
                Jetspeed-1 restricts menus navigation to navigation amongst 
<i>tabs</i>. Tabs are defined within a PSML page. 
                Tabs are simply subcontainers in the PSML page, defined by the 
<b>portlets</b> element.
                Whereas Jetspeed-1 does support navigation to other pages, the 
Tabbing Menus do not directly support it without
-               writing a specific  portlet to act as an external link.</p>
+               writing a specific  portlet to act as an external link.</p>
 <p>Jetspeed-2 menu navigations map directly onto the Portal Site. Thus menu 
tabs represent portal resources.
                Menus in Jetspeed-2 can point to folders, pages or links. This 
more naturally allows the user to navigate
                over the entire portal site. 
-               </p>
+               </p>
 <p>When migrating PSML files from Jetspeed-1 to Jetspeed-2, depending on 
whether you use advanced Jetspeed-1 controllers such as 
                Card or Tab controllers, you may find that the pages do not 
port to Jetspeed-2 very well. In consideration of the lack of migration tools,
                this leaves two immediate options:
-               </p>
-<ul><li>Rewrite your PSML files to better map to the Jetspeed-2 site 
constructs, folders and multiple pages.</li>
-<li>Enhance Jetspeed-2 to support card and tab controller behavior</li>
-</ul>
-</div>
-</div>
-<div class="section"><h2><a name="XML_API_-_Seed_Data"></a>XML API - Seed 
Data</h2>
+               </p>
+<ul><li>Rewrite your PSML files to better map to the Jetspeed-2 site 
constructs, folders and multiple pages.</li>
+<li>Enhance Jetspeed-2 to support card and tab controller behavior</li>
+</ul>
+</div>
+</div>
+<div class="section"><h2><a name="XML_API_-_Seed_Data"></a>XML API - Seed 
Data</h2>
 <p>Jetspeed-2 defines an XML API for populating the initial &quot;Seed&quot; 
data for your portal.  
                Populating your seed data via the XML API provides an 
alternative to populating database data with database-specific and hard to read 
SQL scripts.
                Additionally, the XML API can be used for importing and 
exporting data, or backing up and restoring from your Jetspeed-2 database. 
-               </p>
+               </p>
 <p>
                The XML API also provides a migration path over the maintenance 
cycle of your Jetspeed portal. 
                The XML API was first implemented in version 2.1. To migrate 
your data from version 2.1 to 2.2, (if there are any database schema changes), 
                the XML API can be used to migrate (by exporting and importing) 
across versions.                
-               </p>
-<p>As of 2.1, the Jetspeed API supports the following elements:</p>
-<table class="bodyTable"><tr class="b"><th>Element</th>
-<th>Description</th>
-</tr>
-<tr class="a"><td>MimeTypes</td>
-<td>Mime Types supported by the portal such as text/html, text/xhtml....</td>
-</tr>
-<tr class="b"><td>MediaTypes</td>
-<td>Mediat Types supported by the portal such as html, xml, wml...</td>
-</tr>
-<tr class="a"><td>Capabilities</td>
-<td>General capabilities of web clients that access the portal</td>
-</tr>
-<tr class="b"><td>Clients</td>
-<td>Supported Web Clients by the portal</td>
-</tr>
-<tr class="a"><td>Roles</td>
-<td>Define all roles defined to the initial configuration of the portal</td>
-</tr>
-<tr class="b"><td>Groups</td>
-<td>Define all groups defined to the initial configuration of the portal</td>
-</tr>
-<tr class="a"><td>Users</td>
-<td>Define all initial users defined to the initial configuration of the 
portal, minimally admin and guest(anon) users</td>
-</tr>
-<tr class="b"><td>Permissions</td>
-<td>Define initial J2EE security policy for this portal. Note that permissions 
are turned off by default.</td>
-</tr>
-<tr class="a"><td>ProfilingRules</td>
-<td>Define all the profiling rules in the initial portal such as role 
fallback, user-role-fallback, j1-emulation, default-j2, subsites and more</td>
-</tr>
-<tr class="b"><td></td>
-<td></td>
-</tr>
-</table>
-</div>
-<div class="section"><h2><a name="XML_Schemas"></a>XML Schemas</h2>
-<p>Reference for Jetspeed-2 XML schemas:</p>
-<table class="bodyTable"><tr class="a"><td>Jetspeed-2 PSML</td>
-<td><a href="http://portals.apache.org/jetspeed-2/2.1/schemas/psml.xsd"; 
class="externalLink">http://portals.apache.org/jetspeed-2/2.1/schemas/psml.xsd</a></td>
-</tr>
-<tr class="b"><td>Jetspeed-2 Folder Metadata</td>
-<td><a 
href="http://portals.apache.org/jetspeed-2/2.1/schemas/folder-metadata.xsd"; 
class="externalLink">http://portals.apache.org/jetspeed-2/2.1/schemas/folder-metadata.xsd</a></td>
-</tr>
-<tr class="a"><td>Jetspeed-2 Seed Data</td>
-<td><a href="http://portals.apache.org/jetspeed-2/2.1/schemas/j2-seed.xsd"; 
class="externalLink">http://portals.apache.org/jetspeed-2/2.1/schemas/j2-seed.xsd</a></td>
-</tr>
-<tr class="b"><td>Jetspeed-2 Security Constraints</td>
-<td><a 
href="http://portals.apache.org/jetspeed-2/2.1/schemas/page-security.xsd"; 
class="externalLink">http://portals.apache.org/jetspeed-2/2.1/schemas/page-security.xsd</a></td>
-</tr>
-<tr class="a"><td>Jetspeed-2 Links</td>
-<td><a href="http://portals.apache.org/jetspeed-2/2.1/schemas/link.xsd"; 
class="externalLink">http://portals.apache.org/jetspeed-2/2.1/schemas/link.xsd</a></td>
-</tr>
-<tr class="b"><td>Jetspeed-2 Extended Portlet Descriptor</td>
-<td><a 
href="http://portals.apache.org/jetspeed-2/2.1/schemas/jetspeed-portlet.xsd"; 
class="externalLink">http://portals.apache.org/jetspeed-2/2.1/schemas/jetspeed-portlet.xsd</a></td>
-</tr>
-</table>
-</div>
-<div class="section"><h2><a name="Where_to_Get_Started"></a>Where to Get 
Started?</h2>
-<p>The best place to get started is to create your own custom portal. This 
process is defined online at Apache. The <a 
href="http://portals.apache.org/tutorials/jetspeed-2/"; 
class="externalLink">Jetspeed Tutorial</a> will take you through 
-               the initial steps of setting up your own (custom) Jetspeed 
portal, including setting up XML seed data, PSML, custom decorations and 
portlet applications.</p>
-</div>
+               </p>
+<p>As of 2.1, the Jetspeed API supports the following elements:</p>
+<table class="bodyTable"><tr class="b"><th>Element</th>
+<th>Description</th>
+</tr>
+<tr class="a"><td>MimeTypes</td>
+<td>Mime Types supported by the portal such as text/html, text/xhtml....</td>
+</tr>
+<tr class="b"><td>MediaTypes</td>
+<td>Mediat Types supported by the portal such as html, xml, wml...</td>
+</tr>
+<tr class="a"><td>Capabilities</td>
+<td>General capabilities of web clients that access the portal</td>
+</tr>
+<tr class="b"><td>Clients</td>
+<td>Supported Web Clients by the portal</td>
+</tr>
+<tr class="a"><td>Roles</td>
+<td>Define all roles defined to the initial configuration of the portal</td>
+</tr>
+<tr class="b"><td>Groups</td>
+<td>Define all groups defined to the initial configuration of the portal</td>
+</tr>
+<tr class="a"><td>Users</td>
+<td>Define all initial users defined to the initial configuration of the 
portal, minimally admin and guest(anon) users</td>
+</tr>
+<tr class="b"><td>Permissions</td>
+<td>Define initial J2EE security policy for this portal. Note that permissions 
are turned off by default.</td>
+</tr>
+<tr class="a"><td>ProfilingRules</td>
+<td>Define all the profiling rules in the initial portal such as role 
fallback, user-role-fallback, j1-emulation, default-j2, subsites and more</td>
+</tr>
+<tr class="b"><td></td>
+<td></td>
+</tr>
+</table>
+</div>
+<div class="section"><h2><a name="XML_Schemas"></a>XML Schemas</h2>
+<p>Reference for Jetspeed-2 XML schemas:</p>
+<table class="bodyTable"><tr class="a"><td>Jetspeed-2 PSML</td>
+<td><a class="externalLink" 
href="http://portals.apache.org/jetspeed-2/2.1/schemas/psml.xsd";>http://portals.apache.org/jetspeed-2/2.1/schemas/psml.xsd</a></td>
+</tr>
+<tr class="b"><td>Jetspeed-2 Folder Metadata</td>
+<td><a class="externalLink" 
href="http://portals.apache.org/jetspeed-2/2.1/schemas/folder-metadata.xsd";>http://portals.apache.org/jetspeed-2/2.1/schemas/folder-metadata.xsd</a></td>
+</tr>
+<tr class="a"><td>Jetspeed-2 Seed Data</td>
+<td><a class="externalLink" 
href="http://portals.apache.org/jetspeed-2/2.1/schemas/j2-seed.xsd";>http://portals.apache.org/jetspeed-2/2.1/schemas/j2-seed.xsd</a></td>
+</tr>
+<tr class="b"><td>Jetspeed-2 Security Constraints</td>
+<td><a class="externalLink" 
href="http://portals.apache.org/jetspeed-2/2.1/schemas/page-security.xsd";>http://portals.apache.org/jetspeed-2/2.1/schemas/page-security.xsd</a></td>
+</tr>
+<tr class="a"><td>Jetspeed-2 Links</td>
+<td><a class="externalLink" 
href="http://portals.apache.org/jetspeed-2/2.1/schemas/link.xsd";>http://portals.apache.org/jetspeed-2/2.1/schemas/link.xsd</a></td>
+</tr>
+<tr class="b"><td>Jetspeed-2 Extended Portlet Descriptor</td>
+<td><a class="externalLink" 
href="http://portals.apache.org/jetspeed-2/2.1/schemas/jetspeed-portlet.xsd";>http://portals.apache.org/jetspeed-2/2.1/schemas/jetspeed-portlet.xsd</a></td>
+</tr>
+</table>
+</div>
+<div class="section"><h2><a name="Where_to_Get_Started"></a>Where to Get 
Started?</h2>
+<p>The best place to get started is to create your own custom portal. This 
process is defined online at Apache. The <a class="externalLink" 
href="http://portals.apache.org/tutorials/jetspeed-2/";>Jetspeed Tutorial</a> 
will take you through 
+               the initial steps of setting up your own (custom) Jetspeed 
portal, including setting up XML seed data, PSML, custom decorations and 
portlet applications.</p>
+</div>
 
       </div>
     </div>
@@ -1291,7 +1291,7 @@ to the <b>processAction</b> method on th
     </div>
     <div id="footer">
       <div class="xright">&#169;  
-          2004-2016
+          2004-2022
     
           Apache Software Foundation
           

Modified: portals/site-live/jetspeed-2/j1-users.html
URL: 
http://svn.apache.org/viewvc/portals/site-live/jetspeed-2/j1-users.html?rev=1901428&r1=1901427&r2=1901428&view=diff
==============================================================================
--- portals/site-live/jetspeed-2/j1-users.html (original)
+++ portals/site-live/jetspeed-2/j1-users.html Tue May 31 02:15:08 2022
@@ -42,7 +42,7 @@
   
     
             <div class="xleft">
-        Last Published: 9 May 2016
+        Last Published: 26 May 2022
                       </div>
             <div class="xright">            <a 
href="http://portals.apache.org/applications/"; 
class="externalLink">Applications</a>
             |
@@ -253,7 +253,7 @@
     </div>
     <div id="bodyColumn">
       <div id="contentBox">
-        <subtitle></subtitle><authors><person name="David Le Strat" 
email="[email protected]"></authors><div class="section"><h2><a 
name="For_Jetspeed-1_Users"></a>For Jetspeed-1 Users</h2>
+        <subtitle></subtitle><authors><person name="David Le Strat" 
email="[email protected]"></authors><div class="section"><h2><a 
name="For_Jetspeed-1_Users"></a>For Jetspeed-1 Users</h2>
 <p>Jetspeed-2 is a new project, written from groundup and does not have any 
dependencies on Jetspeed-1.                   
                   Jetspeed-2 is based on industry standards, designed for 
high-volume enterprise portals applications.
                   The foremost difference is Jetspeeds Component Oriented 
Architecture, all assembled together with Spring.
@@ -262,69 +262,69 @@
                   is implemented to the Portlet API specification. Turbines 
file-based configuration 
                   for properties are replaced managed components. Jetspeed-2 
is fully decoupled from 
                   the legacy projects that were intertwined in the Jetspeed-1 
architecture.
-                  </p>
-</div>
-<div class="section"><h2><a name="Whats_New_in_Jetspeed-2"></a>Whats New in 
Jetspeed-2</h2>
-<ul><li>1.     Fully Compliant with Java Portlet API Standard</li>
-<li>2. Separation of Portlet Applications From Portal</li>
-<li>3. Live Deployment Model for Portlet Applications and Portal Layouts</li>
-<li>4. Spring Component Based Architecture</li>
-<li>5. Multi-threaded Portlet Aggregation Engine</li>
-<li>6. Scalable Architecture</li>
-<li>7. Pipeline-based Request Processing</li>
-<li>8. JAAS Security</li>
-<li>9. Bridges Integration with Struts, JSF, PHP, Perl, Velocity</li>
-<li>19.        CMS-based Site Navigations</li>
-</ul>
-</div>
-<div class="section"><h2><a name="Whats_the_same_in_Jetspeed-2"></a>Whats the 
same in Jetspeed-2</h2>
-<p>Not much.</p>
+                  </p>
+</div>
+<div class="section"><h2><a name="Whats_New_in_Jetspeed-2"></a>Whats New in 
Jetspeed-2</h2>
+<ul><li>1.     Fully Compliant with Java Portlet API Standard</li>
+<li>2. Separation of Portlet Applications From Portal</li>
+<li>3. Live Deployment Model for Portlet Applications and Portal Layouts</li>
+<li>4. Spring Component Based Architecture</li>
+<li>5. Multi-threaded Portlet Aggregation Engine</li>
+<li>6. Scalable Architecture</li>
+<li>7. Pipeline-based Request Processing</li>
+<li>8. JAAS Security</li>
+<li>9. Bridges Integration with Struts, JSF, PHP, Perl, Velocity</li>
+<li>19.        CMS-based Site Navigations</li>
+</ul>
+</div>
+<div class="section"><h2><a name="Whats_the_same_in_Jetspeed-2"></a>Whats the 
same in Jetspeed-2</h2>
+<p>Not much.</p>
 <p>
                        In fact Jetspeed-2 does not re-use any of the code in 
Jetspeed-1. 
                        Some concepts are continued in Jetspeed-2, but with new 
design and implementations. 
                        The table below shows some of the concepts continued in 
Jetspeed-2 from Jetspeed-1. 
                        Note that even though the concepts are continued, they 
are have changed, 
                        in some cases significantly:
-                               </p>
+                               </p>
 <ul><li>1.     PSML  -  Portlet Structured Markup Language. 
                                    Defines the layout of portlets on a page. 
                                    While the purpose is still the same, the 
XML format has changed. 
                                    Porting is possible, requires a migration 
tool. 
                                    PSML now fits into an overall Jetspeed 
Navigation Site as a page-type resource.
                                    No PSML porting tool is currently 
available. However, an XSLT transform could be a good choice.
-                       </li>
+                       </li>
 <li>2. Portal Wide Security Policy and Constraints  -  Jetspeed-2 has two 
kinds of security 
                                    mechanisms: JAAS-based security policies, 
and declarative security constraints 
                                    much like Jetspeed-1 constraints. Where as 
Jetspeed-1 constraints were limited
                                    to PSML, Jetspeed-2 declarative security 
constraints are also applied to folders
-                                   and links.</li>
+                                   and links.</li>
 <li>3. Portlets  -  Portlets now must adhere to the new Portlet API. 
                                    No porting tool is currently available. 
                                    The Jetspeed-1 Portlet API will not be 
continued in Jetspeed-2.
-                                   </li>
-<li>4.  Turbine Services are out (Fulcrum). Jetspeed-2 is based on Spring 
components.</li>
+                                   </li>
+<li>4.  Turbine Services are out (Fulcrum). Jetspeed-2 is based on Spring 
components.</li>
 <li>5.  Registries  -  The Jetspeed-1 Registries are discontinued in 
Jetspeed-2. 
                                    All portlets are now stored in a Registry 
database in Jetspeed-2. 
                                    No porting tool is available. 
                                    Recommend converting your portlets to 
JSR-168 portlets, 
                                   packaging all portlets in a portlet 
application, 
                                   and deploying as standard WAR file. 
-                                  Other registries are all deprecated.</li>
+                                  Other registries are all deprecated.</li>
 <li>6. JSP and Velocity Templates  -  Templates can be re-used to some extend. 
                                   Any references to Rundata or any other 
Turbine or Jetspeed-1 tools or 
-                                  tags must be converted.</li>
+                                  tags must be converted.</li>
 <li>7. Controls and Controllers  -  These concepts have changed, and are now 
called 
                                   decorators and layouts. The Turbine module 
concept, which backed controls 
                                   and controllers, is no longer supported. 
Layouts and decorators are now 
                                   only implemented as portlets, or as just 
plain markup. Layouts and templates 
-                                  can be deployed to the portal as a 
deployable unit.</li>
+                                  can be deployed to the portal as a 
deployable unit.</li>
 <li>8. Jetspeed Configurations and Jetspeed Component Assemblies replace 
Property Files. 
                                   Component (services) should be assembled, 
not defined in property files. 
                                   Many of the features in Jetspeed-1 were 
represented as read-only properties in 
-                                  the Jetspeed-1 static property files. 
Jetspeed-2 components can be configured with JMX.</li>
-</ul>
-</div>
-<div class="section"><h2><a name="Turbine_Gone"></a>Turbine Gone</h2>
+                                  the Jetspeed-1 static property files. 
Jetspeed-2 components can be configured with JMX.</li>
+</ul>
+</div>
+<div class="section"><h2><a name="Turbine_Gone"></a>Turbine Gone</h2>
 <p>
                                Jetspeed-1 is tightly coupled to the Turbine 
MVC-2 framework, and this coupling permeates 
                                many areas of the Jetspeed API.  Jetspeed-2 
does not rely on Turbine as the MVC-2 controller. 
@@ -335,101 +335,101 @@
                                of the servlet architecture, and delegating the 
actual rendering of portlets to portlet application frameworks.  
                                These portlet applications can in turn have 
their own MVC frameworks, such as Struts portlet applications, 
                                JSF portlet applications, or Turbine portlet 
application frameworks.                            
-                               </p>
-</div>
-<div class="section"><h2><a name="RunData_No_More"></a>RunData No More</h2>
+                               </p>
+</div>
+<div class="section"><h2><a name="RunData_No_More"></a>RunData No More</h2>
 <p>
                                Most notably missing from Portlet API portlets 
is the RunData class. 
                                The Jetspeed-1 API uses the RunData class 
ubiquitously, serving as a wrapper for both the servlet request and response. 
                                Other dependencies on Turbine include Portlet 
Actions, Portlet Aggregation Engine (ECS), 
                                the Service Architecture, Configuration and 
Turbine Modules. None of these exist in the newer version.
-                               </p>
-<table class="bodyTable"><tr class="a"><th>Jetspeed-1</th>
-<th>Jetspeed-2</th>
-</tr>
-<tr class="b"><td>Run Data</td>
-<td>Portlet API: Portlet Request and Portlet Response</td>
-</tr>
-<tr class="a"><td>Portlet Aggregation Engine (ECS)</td>
-<td>Jetspeed-2 Multi-threaded Portlet Container Engine</td>
-</tr>
-<tr class="b"><td>Turbine Service Architecture</td>
-<td>Jetspeed-2 Components</td>
-</tr>
-<tr class="a"><td>Property Configuration Files</td>
-<td>Spring Configurations, JMX</td>
-</tr>
-<tr class="b"><td>Turbine Modules (Actions)</td>
-<td>Portlet API Actions </td>
-</tr>
-</table>
-</div>
-<div class="section"><h2><a name="Pluto_is_the_Portlet_Container"></a>Pluto is 
the Portlet Container</h2>
+                               </p>
+<table class="bodyTable"><tr class="a"><th>Jetspeed-1</th>
+<th>Jetspeed-2</th>
+</tr>
+<tr class="b"><td>Run Data</td>
+<td>Portlet API: Portlet Request and Portlet Response</td>
+</tr>
+<tr class="a"><td>Portlet Aggregation Engine (ECS)</td>
+<td>Jetspeed-2 Multi-threaded Portlet Container Engine</td>
+</tr>
+<tr class="b"><td>Turbine Service Architecture</td>
+<td>Jetspeed-2 Components</td>
+</tr>
+<tr class="a"><td>Property Configuration Files</td>
+<td>Spring Configurations, JMX</td>
+</tr>
+<tr class="b"><td>Turbine Modules (Actions)</td>
+<td>Portlet API Actions </td>
+</tr>
+</table>
+</div>
+<div class="section"><h2><a name="Pluto_is_the_Portlet_Container"></a>Pluto is 
the Portlet Container</h2>
 <p>The Jetspeed-2 portal does not implement the Portlet container. 
-                                       <a 
href="http://portals.apache.org/pluto"; class="externalLink">Pluto</a> 
implements the JSR 168 interface 
+                                       <a class="externalLink" 
href="http://portals.apache.org/pluto";>Pluto</a> implements the JSR 168 
interface 
                                        contract for portlets running inside 
our portal.
                                        The Pluto container handles all 
communication with portlets for the portal.                                     
                                                                        
-                               </p>
-</div>
-<div class="section"><h2><a name="Aggregating_Isnt_It"></a>Aggregating, Isnt 
It?</h2>
+                               </p>
+</div>
+<div class="section"><h2><a name="Aggregating_Isnt_It"></a>Aggregating, Isnt 
It?</h2>
 <p>The aggregation engine and the Jetspeed-1 Portlet API are both coupled to a 
deprecated Jakarta package ECS 
                                        (Element Construction Set). ECS 
generates HTML with Java code, storing the content in temporary 
                                        Java objects before sending the HTML 
out to the servlet output stream. This wasteful use of Java objects 
                                        leads to fragmentation on memory, 
accelerated garbage collection, and paging in high volume sites. 
                                        The servlet API clearly provides a 
content stream for streaming out portlet content.  Jetspeed-2 models 
                                        its aggregation engine upon the Portlet 
APIs streams and readers, analogous to the stream-based Servlet 
-                                       API for rendering content.</p>
-</div>
-<div class="section"><h2><a name="State_and_Life_Cycle"></a>State and Life 
Cycle</h2>
+                                       API for rendering content.</p>
+</div>
+<div class="section"><h2><a name="State_and_Life_Cycle"></a>State and Life 
Cycle</h2>
 <p>The Portlet API clearly defines the lifecycle of a portlet, the event 
sequences for actions, 
                                   and how the container can cache content from 
a portlet. The Portlet Lifecycle was not clearly 
                                   defined in Jetspeed-1. The portlet API 
clearly states that only one instance of a portlet will 
                                   reside in memory inside a container. The 
state of the portlet is directly related to the servlet state 
                                   for the current user session. While this may 
seem obvious, portlet state and lifetime was not clearly 
                                   defined in Jetspeed-1.                       
                
-                               </p>
-</div>
-<div class="section"><h2><a name="Actions"></a>Actions</h2>
+                               </p>
+</div>
+<div class="section"><h2><a name="Actions"></a>Actions</h2>
 <p>In version 1, actions were coupled to Turbine and not properly integrated 
into the Portlet class. 
                                        In fact, actions were separate objects 
from portlets. In the Portlet API, actions are methods on the portlet. 
-                                       Action event handling and sequencing is 
clearly defined in the specification.</p>
-</div>
-<div class="section"><h2><a name="Standard_Deployment"></a>Standard 
Deployment</h2>
+                                       Action event handling and sequencing is 
clearly defined in the specification.</p>
+</div>
+<div class="section"><h2><a name="Standard_Deployment"></a>Standard 
Deployment</h2>
 <p>Jetspeed-1 does not have a standardized method of deploying portlets and 
their supporting files, 
                                        commonly referred to as portlet 
applications. In order to import an application, one must package 
-                                       registry files, class and jar files, 
PSML and templates so that they match the Jetspeed web application format.</p>
+                                       registry files, class and jar files, 
PSML and templates so that they match the Jetspeed web application format.</p>
 <p>In Jetspeed-2, the Portlet API defines a standard deployment descriptor for 
deploying Portal Applications into Jetspeed. 
                                        Portal applications must be deployed to 
the portal. Analogous to the servlets packaged in a web-application (WAR)
                                         deployment model, portals support 
portlets packaged in a portal-application deployment model. 
                                        The Portal Application archive follows 
the same format as the WAR format defined in the Servlet specification 
                                        with an additional Portlet deployment 
descriptor file. The clear advantage in Jetspeed-2 is the ability to deploy 
-                                       live portlet applications to the server 
in a standardized format.</p>
-</div>
-<div class="section"><h2><a name="Resources_and_Deployment"></a>Resources and 
Deployment</h2>
+                                       live portlet applications to the server 
in a standardized format.</p>
+</div>
+<div class="section"><h2><a name="Resources_and_Deployment"></a>Resources and 
Deployment</h2>
 <p>Jetspeed-1 resources such as portal templates, images, skins, controllers, 
controls, are all merged into the single 
                                   Jetspeed web application with no deployment 
model. For example, to override the default skin or top banner, the 
                                   resource files are copied into the portal 
directory, property files updated to point to the new resources, and the 
                                   server must be restarted. This made for the 
process of tailoring Jetspeed-1 portals to real production portals 
                                   a process of property and file merging. In 
fact Jetspeed-1 now has a Maven plug-in to manage production portals 
                                   separately from the core Jetspeed-1 portal. 
The need for this kind of tool covers up the fact that Jetspeed-1 
-                                       is missing a good deployment model for 
portal resources, requiring difficult portal maintenance procedures.</p>
+                                       is missing a good deployment model for 
portal resources, requiring difficult portal maintenance procedures.</p>
 <p>For a Jetspeed-2 production portal, portal resources are packaged in a 
Jetspeed-specific archive format. 
                                        Thus portal resources (top banners, 
skins, images, style sheets) can all be deployed to dynamically tailor 
-                                       the portal at runtime.</p>
-</div>
-<div class="section"><h2><a name="the_Standard"></a>the Standard</h2>
+                                       the portal at runtime.</p>
+</div>
+<div class="section"><h2><a name="the_Standard"></a>the Standard</h2>
 <p>JSR168 is the Portlet specification enables interoperability between 
Portlets and Portals. 
                                        The specification defines a set of APIs 
that addresses standardization of portlet aggregation, 
-                                       personalization, presentation and 
security.  The goals of JSR168 are to: </p>
-<ul><li>Define common Portal metaphor </li>
-<li>Define a standard Portlet Java API </li>
-<li>Ensure interoperability and portability</li>
-<li>Enable multiple markups support </li>
-<li>Ensure compatibility with other technologies </li>
-</ul>
+                                       personalization, presentation and 
security.  The goals of JSR168 are to: </p>
+<ul><li>Define common Portal metaphor </li>
+<li>Define a standard Portlet Java API </li>
+<li>Ensure interoperability and portability</li>
+<li>Enable multiple markups support </li>
+<li>Ensure compatibility with other technologies </li>
+</ul>
 <p>The Jetspeed-2 Portlet Server supports the JSR 168 standard. 
-                                  This is an important initiative, introducing 
true portlet portability.</p>
-</div>
+                                  This is an important initiative, introducing 
true portlet portability.</p>
+</div>
 
       </div>
     </div>
@@ -438,7 +438,7 @@
     </div>
     <div id="footer">
       <div class="xright">&#169;  
-          2004-2016
+          2004-2022
     
           Apache Software Foundation
           

Modified: portals/site-live/jetspeed-2/license.html
URL: 
http://svn.apache.org/viewvc/portals/site-live/jetspeed-2/license.html?rev=1901428&r1=1901427&r2=1901428&view=diff
==============================================================================
--- portals/site-live/jetspeed-2/license.html (original)
+++ portals/site-live/jetspeed-2/license.html Tue May 31 02:15:08 2022
@@ -42,7 +42,7 @@
   
     
             <div class="xleft">
-        Last Published: 9 May 2016
+        Last Published: 26 May 2022
                       </div>
             <div class="xright">            <a 
href="http://portals.apache.org/applications/"; 
class="externalLink">Applications</a>
             |
@@ -253,7 +253,7 @@
     </div>
     <div id="bodyColumn">
       <div id="contentBox">
-        <div class="section"><h2><a 
name="Apache_License_version_2.0"></a>Apache License, version 2.0</h2>
+        <div class="section"><h2><a 
name="Apache_License_version_2.0"></a>Apache License, version 2.0</h2>
 <pre>
 Apache License
 Version 2.0, January 2004
@@ -444,7 +444,7 @@ same &quot;printed page&quot; as the cop
 identification within third-party archives.
 
 Copyright 2004 The Apache Software Foundation
-                       </pre></div>
+                       </pre></div>
 
       </div>
     </div>
@@ -453,7 +453,7 @@ Copyright 2004 The Apache Software Found
     </div>
     <div id="footer">
       <div class="xright">&#169;  
-          2004-2016
+          2004-2022
     
           Apache Software Foundation
           


Reply via email to