Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/deploying-jetspeed-to-websphere.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/deploying-jetspeed-to-websphere.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/deploying-jetspeed-to-websphere.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/deploying-jetspeed-to-websphere.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,755 @@ +<?xml version="1.0"?> +<document> + <!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version + 2.0 (the "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 Unless required by + applicable law or agreed to in writing, software distributed under the + License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. See the License for + the specific language governing permissions and limitations under the + License. + --> + <properties> + <title>Deploying Jetspeed to Websphere</title> + <subtitle>With Websphere 6.1</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + </authors> + </properties> + <body> + <section name='Deploying Jetspeed to Websphere - With Websphere 6.1'> + <ol> + <li> + <a href="#section_1">Introduction</a> + <ol> + <li><a href="#section_1_1">Purpose</a></li> + <li><a href="#section_1_2">Should I deploy Jetspeed as a WAR file or embedded in an EAR file?</a></li> + </ol> + </li> + <li> + <a href="#section_2">Getting Started with Websphere 6.1 and Jetspeed</a> + <ol> + <li><a href="#section_2_1">Required Fix Pack</a></li> + <li><a href="#section_2_2">Verifying Websphere Version</a></li> + <li><a href="#section_2_3">Debugging</a></li> + </ol> + </li> + <li><a href="#section_3">Database Configuration</a> + <ol> + <li><a href="#section_3_1">Creating a JAAS User Identity in Websphere</a></li> + <li><a href="#section_3_2">Creating a JDBC Data Provider</a></li> + <li><a href="#section_3_3">Creating an Oracle JDBC Provider</a></li> + <li><a href="#section_3_4">Configuring an Oracle Data Source</a></li> + <li><a href="#section_3_5">Restart Websphere (optional)</a></li> + </ol> + </li> + <li><a href="#section_4">WAR Deployment</a> + <ol> + <li><a href="#section_4_1">The WAR Files</a></li> + <li><a href="#section_4_2">Shared Libraries</a></li> + <li><a href="#section_4_3">Add a Shared Library Reference to the Application Server Class Loader</a></li> + <li><a href="#section_4_4">Install the Jetspeed Portal WAR file</a></li> + <li><a href="#section_4_5">Install the Jet Express Demo Portlet Application</a></li> + <li><a href="#section_4_6">Install the Jetspeed Admin Portlet Application</a></li> + <li><a href="#section_4_7">Starting the Applications</a></li> + </ol> + </li> + <li><a href="#section_5">EAR Deployment</a> + <ol> + <li><a href="#section_5_1">The EAR File</a></li> + <li><a href="#section_5_2">Shared Libraries</a></li> + <li><a href="#section_5_3">Remove any old shared libraries</a></li> + <li><a href="#section_5_4">Installing the EAR File</a></li> + </ol> + </li> + <li><a href="#section_6">Two or more EAR Deployment Files</a></li> + <li><a href="#section_7">Websphere Application Server Additional Information</a> + <ol> + <li><a href="#section_7_1">Websphere Application Server Portlet Extensions</a></li> + <li><a href="#section_7_2">Patch to Portlet and Servlet Names being different</a></li> + </ol> + </li> + <li><a href="#section_8">Revision History</a></li> + </ol> + </section> + <section name='Introduction'> + <p> + <a name="section_1"></a> + This document is a step by step guide to deploying your custom Apache Jetspeed-2 portal and portlet applications on a Websphere Application Server. This solution provided here is tested on Websphere version 6.1. + </p> + <p> + For building a Jetspeed Portal, please read the accompanying documents "Building Jetspeed for Websphere with Maven-1" and "Building Jetspeed for Websphere with Maven-2". + </p> + <p> + Jetspeed is an open source project, thus all source code is freely available from Apache. See the website for more details: <a href="http://portals.apache.org/jetspeed-2/">http://portals.apache.org/jetspeed-2/</a>. + </p> + <subsection name='Purpose'> + <p> + <a name="section_1_1"></a> + This document will teach you how to deploy a Jetspeed Portal and one or more portlet applications to Websphere in a web application archive or an enterprise archive (EAR). + </p> + <p> + The custom portal used in this document is an example tutorial portal named Jet Express. Jet Express is a customized version of the Jetspeed portal. Additionally, we will deploy the Jetspeed Administrative portlet application and a sample portlet application named Express Demo. The purpose of using a sample custom portal is to teach you how to deploy your own custom portal for a production system. + </p> + </subsection> + <subsection name='Should I deploy Jetspeed as a WAR fiel or embedded in an EAR file?'> + <p> + <a name="section_1_2"></a> + There are benefits to both approaches. Deploying the Jetspeed portal as a WAR may be a better approach for incremental development of portlet applications. By deploying Jetspeed as a WAR file once, you will not have to redeploy it as often as your portlet application(s). This can separate the deployment cycle of your portlet application from the Jetspeed portalâs deployment cycle. + </p> + <p> + The benefits of deploying an EAR are: + <ul> + <li>You only have to deal with one deployment unit</li> + <li>In a production environment, this may make more sense</li> + <li>The shared libraries are easier to configure</li> + <li>You can configure resources such as JDBC data sources in the EAR</li> + </ul> + </p> + <p> + The procedure for deploying as all WAR files is different from the procedure for deploying in a single EAR file. + </p> + <p> + The WAR procedure is defined in <a href="#">section 4</a>. + </p> + <p> + The EAR procedure is defined in <a href="#">section 5</a>. + </p> + <p> + The third choice is to deploy Jetspeed and the Jetspeed Administrative application as an EAR file, and then deploy your portlet applications as external EAR files. See <a href="#">section 6</a> for details on deploying two or more EAR files. + </p> + </subsection> + </section> + <section name='Getting Started with Websphere 6.1 and Jetspeed'> + <p> + <a name="section_2"></a> + This guide assumes that you are using Websphere version 6.1. Although Jetspeed run on Websphere 5.x, and Websphere Express, this guide is targeted specifically to the Websphere 6.1 environment. + </p> + <subsection name='Required Fix Pack'> + <a name="section_2_1"></a> + <p> + If you are running version 6.1.0.0 or version 6.1.0.1, Fix Pack 2 must be installed in order for Jetspeed to run. Without this fix pack, portlets can not be correctly rendered. Download the fix pack from here: + <br/><br/> + <a href="http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg27004980#ver61">http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg27004980#ver61</a> + <br/><br/> + Installing the fix pack will require the installing the IBM Update Installer program. + </p> + </subsection> + <subsection name='Verifying Websphere Version'> + <a name="section_2_2"></a> + <p> + Start up Websphere. Go to the administrative console with a web browser, and verify that you are running the correct version of Websphere. + </p> + <p> + <code>http://localhost:9060/ibm/console/</code> + </p> + <p> + You should a split page, with navigations on the left, and details on the right. Click on the first navigation on the left-hand-side: "Welcome". + </p> + <p> + <img src="images/websphere/22-1.png"/> + </p> + <p> + Ensure that you are running the correct version of Websphere, 6.1.0.2 or higher: + </p> + <p> + <img src="images/websphere/22-2.png"/> + </p> + <p> + Websphere must be running version 6.1.0.2 or higher. If you are on version 6.1.0.1 or lower, then please follow the instructions in section 2.1 before continuing. + </p> + </subsection> + <subsection name='Debugging'> + <p> + <a name="section_2_3"></a> + If you would like to attach to Websphere with Eclipse or RAD, you can turn on debugging to debug your portlets. Navigate to the <i>Servers -> Application servers</i> menu; select the server you would like to debug. Under the <i>Additional Properties</i> section, click on <i>Debugging Service</i> link. + </p> + <p> + <img src="images/websphere/23-1.png"/> + </p> + <p> + From here you can enable debugging by clicking <i>Enable service at server startup</i>, press OK, and then restarting your server: + </p> + <p> + <img src="images/websphere/23-2.png"/> + </p> + </subsection> + </section> + <section name='Database Configuration'> + <p> + <a name="section_3"></a> + Jetspeed requires a relational database for storing portlet information such as portlet preferences, pages, and the portlet registry. Jetspeed supports many of the most popular commercial and open source databases including: + <ul> + <li>Oracle</li> + <li>DB2</li> + <li>MySQL</li> + <li>MS SQL Server</li> + <li>Derby</li> + <li>SAP DB</li> + <li>PostgreSQL</li> + </ul> + Documentation for configuration MySQL data providers with Websphere can be found here: + <br/><br/> + <a href="http://www.devx.com/Java/Article/31571">http://www.devx.com/Java/Article/31571</a><br/> + <a href="http://www.hackedby.us/2006/04/discovering-portals-jetspeed-with.html">http://www.hackedby.us/2006/04/discovering-portals-jetspeed-with.html</a> + <br/><br/> + WAS 5.x<br/> + <a href="http://www.webspherepower.com/issuesprint/issue200403/00001236.html">http://www.webspherepower.com/issuesprint/issue200403/00001236.html</a> + </p> + <p> + In this example, we will configure an Oracle JDBC data provider. Before proceeding, please configure a Jetspeed database in an Oracle instance. Make sure that you have already: + <ol> + <li>Created an Oracle user (schema) configured to hold the Jetspeed tables.</li> + <li>Built the Custom Portal. The Jetspeed tables must be pre-created and pre-populated with default data. The Custom Portal build does this for you. See the build guides for more information on pre-populating the database.</li> + <li>The Oracle/JDBC connection string to connect to the database.</li> + </ol> + <i>Note</i>: if you are sharing schemas amongst one or more developers, you could be overwriting the development environment of another developer. Thus it is recommended that each developer has an allocated schema. Developers configure their database configuration in their build properties file. See the Jetspeed build documents for more information + </p> + <p> + <source> +org.apache.jetspeed.production.database.default.name = oracle +org.apache.jetspeed.production.database.url = jdbc:oracle:thin:@localhost:1521:fep +org.apache.jetspeed.production.database.driver = oracle.jdbc.driver.OracleDriver +org.apache.jetspeed.production.database.user = fep +org.apache.jetspeed.production.database.password = xxxxx +org.apache.jetspeed.production.jdbc.drivers.path = ${was.root}/lib/OptionalLibraries/oracle/ojdbc14.jar + </source> + </p> + <subsection name='Creating a JAAS User Identity in Websphere'> + <p> + <a name="section_3_1"></a> + First, create a user identity and password in the JAAS Java 2 connector. Navigate to the "Security" menu in the LHS menu of Websphere: + <br/> + <img src="images/websphere/31-1.png"/> + </p> + <p> + Select "Secure administration, applications, and infrastructure", which leads to the Authentication page. Expand the "Java Authentication and Authorization Service" section: + <br/> + <img src="images/websphere/31-2.png"/> + </p> + <p> + Select "J2C authentication data"... to create a new JAAS J2C User identity, select "New": + <br/> + <img src="images/websphere/31-3.png"/> + </p> + <p> + And then enter your credentials. Note we have called the user alias "JetExpressLogin". It is not required to name it "JetExpressLogin"; but make sure you use the same name when configuring your JDBC data source in the next section. + <br/> + <img src="images/websphere/31-4.png"/> + </p> + <p> + Press OK, and complete the Save dialogs. + </p> + </subsection> + <subsection name='Creating a JDBC Data Provider'> + <p> + <a name="section_3_2"></a> + In the default configuration of Jetspeed, Jetspeed prefers to get its database connections from a connection pool provided by the application server using a JNDI name. This section demonstrates how to configure a Websphere 6.1 JDBC Data Provider. In Websphere, a data provider can hold one or more data sources. Jetspeed actually connects to the data source, but first we need to define a generalize data provider. + </p> + </subsection> + <subsection name='Creating an Oracle JDBC Data Provider'> + <p> + <a name="section_3_3"></a> + Second, navigate to the "Resources" menu in the LHS menu of Websphere: + <br/> + <img src="images/websphere/33-1.png"/> + </p> + <p> + Click on JDBC Providers, you should see some a list of all your pre-installed JDBC providers. If you have already installed an Oracle JDBC provider, skip to the next section on configuring a JDBC Data Source. Otherwise, click "New" as shown below: + <br/> + <img src="images/websphere/33-2.png"/> + </p> + <p> + We can then create a new Oracle JDBC provider: + <br/><img src="images/websphere/33-3.png"/> + </p> + <p> + Select the "Database type" of Oracle, provider type of "Oracle JDBC driver", and "Connection pool data source". Give the provider a name or use the default values (Oracle JDBC Driver). + <br/><br/> + Make sut that you have a driver configured in Websphere: + <br/><img src="images/websphere/33-4.png"/> + <br/> + Here we hard-coded the path to a driver that we downloaded from Oracle and installed onto our system: + <br/><br/> + <code>/opt/IBM/WebSphere/AppServer/lib/ext/ojdbc14.jar</code> + <br/><br/> + Click next, and go with the default values for everything else. When you get to the end, press "Finish" and then "Save" as shown below: + <br/><img src="images/websphere/33-5.png"/><br/><br/> + You should now see Oracle in the list of known JDBC providers on Websphere: + <br/><img src="images/websphere/33-6.png"/> + </p> + </subsection> + <subsection name='Configuring an Oracle Data Source'> + <p> + <a name="section_3_4"></a> + Next, we will need to create an Oracle data source. Before continuing with this step, please make sure to properly configure your Oracle database as described in section 3. Navigate to the Oracle JDBC provider, and click on "Data sources" in the Additional Properties area: + <br/><img src="images/websphere/34-1.png"/> + </p> + <p> + Enter: + <ol> + <li>Data source name -rename it to <b>jetspeed</b></li> + <li>JNDI name - this value must be <b>jdbc/jetspeed</b></li> + <li>Select the default CMA alias <br/> + <img src="images/websphere/34-2.png"/></li> + <li>Enter the Oracle JDBC URL connection string, usually the string looks something like:<br/><br/> + <code>jdbc:oracle:thin:@localhost:1521:XE</code><br/><br/></li> + <li>Select a Data store helper class for either Oracle 9i or Oracle 10g</li> + <li>Select the JAAC J2C identity configured in section 3.1 from the Component-managed authentication alias:<br/> + <img src="images/websphere/34-3.png"/> + </li> + </ol> + Press the <b>"Test connection"</b> button to ensure that your connection is correct. Do not proceed to section 4 until you can connect to the database with the Test connection button. Press <b>"Save"</b> at the top of the page to complete the JDBC Data source configuration and complete the Save dialogs. + <br/> + <img src="images/websphere/34-4.png"/> + </p> + </subsection> + <subsection name='Restart Websphere'> + <p> + <a name="section_3_5"></a> + On Websphere 5.1.1.3, it was required to restart Websphere after installing the data source definitions. Otherwise, the data source definitions were not available to Jetspeed when first deployed. With version 6.1.0.2 or greater, restarting is not required. + </p> + </subsection> + </section> + <section name='WAR Deployment'> + <p> + <a name="section_4"></a> + This section covers deploying Jetspeed to Websphere with WAR files. If you prefer to deploy using EAR files, skip down to <a href="#">section 5</a>. + </p> + <p> + The deployment artifacts are created developers or a build team. In this example, we will assume that you have used the demo custom portal "Jet Express". See the accompanying build documents for instructions on how to build the Jet Express portal artifacts. + </p> + <subsection name='The WAR Files'> + <p> + <a name="section_4_1"></a> + The WAR file deployment for Jet Express consists of three war files: + <ul> + <li><b>jetexpress.war</b> - the custom Jetspeed portal</li> + <li><b>j2-admin.war</b> - the administrative portlets that come with Jetspeed</li> + <li><b>expressdemo.war</b> - the sample portlet application</li> + </ul> + These three war files must be deployed in the order above to Websphere using the administrative console. + </p> + </subsection> + <subsection name='Shared Libraries'> + <p> + <a name="section_4_2"></a> + The following jar files must be in a shared class loader used by Jetspeed and all portlet applications: + <ol> + <li>jetspeed-api-2.1-dev.jar</li> + <li>jetspeed-commons-2.1-dev.jar</li> + <li>pluto-1.0.1.jar</li> + <li>portals-bridges-common-1.0.jar</li> + <li>portlet-api-1.0.jar</li> + </ol> + </p> + <p> + The 6th jar file, derby-10.1.1.0.jar, should not be copied in. If you are going to use the Derby (Cloudscape) database with Jetspeed, <br/>create a JDBC data source in Websphere and connect it into Jetspeed via the JNDI procedure described in <a href="#">section 3</a>. + <br/><br/> + These 6 files are creating during the build process described in the accompanying build document. + <br/><br/> + Websphere 6 has a new feature specifically for sharing libraries (jars) amongst applications. Websphere has a directory for storing shared libraries. Your Websphere installation should have a directory: <b>${WAS_INSTALL_ROOT}/optionalLibraries/Apache/</b>. + <br/><br/> + Create a directory underneath the Apache directory named "Jetspeed-2": + <br/><br/> + <code>${WAS_INSTALL_ROOT}/optionalLibraries/Apache/Jetspeed-2/jetspeed-api-2.1-dev.jar</code> + <br/> + <source> +cd ${WAS_INSTALL_ROOT}/optionalLibraries/Apache +mkdir Jetspeed-2</source> + Copy the five jar files above into the Jetspeed-2 shared library directory. Then from the Websphere Admin, go to the LHS menu option <i>Environment -> Shared Libraries</i>, and click "New": + <br/><img src="images/websphere/42-1.png"/> + </p> + <p> + Here we create a new Shared Library for use by deployed applications:<br/> + <img src="images/websphere/42-2.png"/> + </p> + <p> + Make sure to enter the five jars into the Classpath multi-line edit as shown above, with a CRLF to separate each jar file: + <source> +${WAS_INSTALL_ROOT}/optionalLibraries/Apache/Jetspeed-2/jetspeed-api-2.1-dev.jar +${WAS_INSTALL_ROOT}/optionalLibraries/Apache/Jetspeed-2/jetspeed-commons-2.1-dev.jar +${WAS_INSTALL_ROOT}/optionalLibraries/Apache/Jetspeed-2/pluto-1.0.1.jar +${WAS_INSTALL_ROOT}/optionalLibraries/Apache/Jetspeed-2/portals-bridges-common-1.0.jar +${WAS_INSTALL_ROOT}/optionalLibraries/Apache/Jetspeed-2/portlet-api-1.0.jar</source> + Notice that we have named the Shared Library "JetspeedSharedLib". Donât forget to reference this shared library when installing the Jetspeed application and all other portlet applications. + </p> + </subsection> + <subsection name='Add a Shared Library Reference to the Application Server Class Loader'> + <p> + <a name="section_4_3"></a> + In order to share the Jetspeed shared libraries installed in <a href="#">section 4.2</a> system-wide across WAR or EAR deployments, you will need to add a shared library reference to the application serverâs class loader. This shared library reference points to <i>JetspeedSharedLib</i> shared library configured in <a href="#">section 4.2</a>. + </p> + <p> + To install a shared library reference, go to the <i>Server -> Application</i> servers menu:<br/> + <img src="images/websphere/43-1.png"/> + </p> + <p> + Select the server to install Jetspeed on, and then expand the <i>Java and Process Management</i> item on the right side of the page, then click <i>Class loader</i>: + <br/> <img src="images/websphere/43-2.png"/> + </p> + <p> + From the Class loader page, click New:<br/> + <img src="images/websphere/43-3.png"/> + </p> + <p> + On General Properties, set <i>Class loader order</i> to <i>Classes loaded with parent class loader last</i>: + <br/> <img src="images/websphere/43-4.png"/> + </p> + <p> + Click OK, and then Save. Click on your new Class loader: + <br/> <img src="images/websphere/43-5.png"/> + </p> + <p> + Click on the <i>Shared libraries references</i> link: + <br/> <img src="images/websphere/43-6.png"/> + </p> + <p> + Created a new shared library reference by clicking New: + <br/> <img src="images/websphere/43-7.png"/> + </p> + <p> + Select the <i>JetspeedSharedLib</i> library name, press OK and continue with saving to the master configuration. + <br/> <img src="images/websphere/43-8.png"/> + </p> + <p> + You are now ready to deploy the Jetspeed portal and portlet application WAR files. + </p> + </subsection> + <subsection name='Install the Jetspeed Portal WAR file'> + <p> + <a name="section_4_4"></a> + The next step is to install the Jetspeed Portal WAR file. Jetspeed must always be installed and running before attempting to install any portlet applications. In our example, the name of the jetspeed war file is <i>"jetexpress.war"</i>. + </p> + <p> + Navigate to <i>Applications -> Install New Application</i>: + <br/> <img src="images/websphere/44-1.png"/> + <br/><br/> + <ol> + <li>Select the browse button, and load the <b>jetexpress.war</b> file from your local file system.</li> + <li>Enter a Context Root of <b>/jetexpress</b></li> + <li>Press Next, leading to a series of dialogs</li> + <li>On the Step 1 dialog, go with the defaults and press Next</li> + <li>On the Step 2 dialog, go with the defaults and press Next</li> + <li>On theStep 3 dialog, specify authentication method as ânoneâ and select your JDBC data source: + <br/> <img src="images/websphere/44-2.png"/> <br/> + Hit Browse and select the preconfigured Oracle JDBC data source from section 3, and Apply then Next: + </li> + <li>On the Step 4 dialog, "Map Virtual hosts..", click the check box, and press Next</li> + <li>On the Step 5 dialog, press Finish, then on the next dialog, press Save</li> + </ol> + </p> + <p> + If you go to the <i>Applications -> Enterprise Applications</i> page, you should see your application deployed: + <br/> <img src="images/websphere/44-3.png"/> + </p> + </subsection> + <subsection name='Install the Jet Express Demo Portlet Application'> + <p> + <a name="section_4_5"></a> + Here we will install the Jet Express demo portlet application. This procedure is the same for all portlet applications. + In our example, the name of the application war file is <i>"expressdemo.war"</i>. + </p> + <p> + Navigate to Applications->Install New Application: <br/> + <img src="images/websphere/45-1.png"/> + <ol> + <li>Select the browse button, and load the <b>expressdemo.war</b> file from your local file system.</li> + <li>Enter a Context Root of <b>/expressdemo</b></li> + <li>Press Next, leading to a series of dialogs</li> + <li>On the Steps 1 through 4 dialogs, go with the defaults and press Next and then Finish</li> + <li>Save the changes to the Master Configuration</li> + </ol> + </p> + <p> + If you go to the <i>Applications -> Enterprise Applications</i> page, you should see your application deployed:<br/> + <img src="images/websphere/45-2.png"/> + </p> + </subsection> + <subsection name='Install the Jetspeed Admin Portlet Application'> + <p> + <a name="section_4_6"></a> + Here we will install the Jetspeed Admin portlet application. This procedure is the same for all portlet applications. In our example, the name of the jetspeed war file is <i>"j2-admin.war"</i>. + </p> + <p> + Navigate to <i>Applications -> Install New Application</i>:<br/> + <img src="images/websphere/46-1.png"/> + <ol> + <li>Select the browse button, and load the <b>j2-admin.war</b> file from your local file system.</li> + <li>Enter a Context Root of <b>/j2-admin</b></li> + <li>Press Next, leading to a series of dialogs</li> + <li>On the Steps 1 through 4 dialogs, go with the defaults and press Next and then Finish</li> + <li>Save the changes to the Master Configuration</li> + </ol> + </p> + <p> + If you go to the <i>Applications -> Enterprise Applications</i> page, you should see your application deployed: <br/> + <img src="images/websphere/46-2.png"/> + </p> + </subsection> + <subsection name='Starting the Applications'> + <p> + From the <i>Applications -> Enterprise Applications</i> menu, you can start and stop all of your deployed applications. Start the Jetspeed application (<i>jetexpress_war</i>) first by clicking the checkbox next to it then pressing <i>Start</i>. + <br/> + <img src="images/websphere/46-3.png"/> + </p> + <p> + Once you see all "green statuses", you are then ready to test your portal. + </p> + <p> + Go to this link: + </p> + <p> + <a href="http://localhost:9080/jetexpress/portal">http://localhost:9080/jetexpress/portal</a> + </p> + <p> + You should see the example Jet Express custom portal:<br/> + <img src="images/websphere/46-4.png"/> + </p> + </subsection> + </section> + <section name='EAR Deployment'> + <p> + <a name="section_5"></a> + This section covers deploying Jetspeed to Websphere within one EAR file. If you prefer to deploy using WAR files, go to <a href="#section_4">section 4</a>. + </p> + <p> + The deployment artifacts are created by developers or a build team. In this example, we will assume that you have used the demo custom portal "Jet Express". See the accompanying build documents for instructions on how to build the Jet Express portal artifacts. + </p> + <subsection name='The EAR File'> + <p> + <a name="section_5_1"></a> + The EAR file deployment for Jet Express consists of one EAR file: + <ul> + <li><b>jetexpress.ear</b> - the custom Jetspeed portal and sample portlet application</li> + </ul> + </p> + <p> + The EAR File contains:<br/> + <ul> + <li><b>jetexpress.war</b> - the custom Jetspeed portal</li> + <li><b>j2-admin.war</b> - the administrative portlets that come with Jetspeed</li> + <li><b>expressdemo.war</b> - the sample portlet application</li> + <li><b>shared library files</b> - the shared libraries used by the three war files above</li> + <li><b>application.xml</b> - the EAR deployment descriptor</li> + </ul> + </p> + </subsection> + <subsection name='Shared Libraries'> + <p> + <a name="section_5_2"></a> + The following jar files must be in a shared class loader used by Jetspeed and all portlet applications: + <ol> + <li>jetspeed-api-2.1-dev.jar</li> + <li>jetspeed-commons-2.1-dev.jar</li> + <li>pluto-1.0.1.jar</li> + <li>portals-bridges-common-1.0.jar</li> + <li>portlet-api-1.0.jar</li> + </ol> + </p> + <p> + With an EAR file, shared jar files can simply be placed in the root of the EAR distribution. These files are then shared in the same class loader across all web applications deployed in this EAR distribution. + </p> + <p> + The 6th jar file, derby-10.1.1.0.jar, should not be copied in. If you are going to use the Derby (Cloudscape) database with Jetspeed, create a JDBC data source in Websphere and connect it into Jetspeed via the JNDI procedure described in section 3. + </p> + <p> + The shared jar files are creating during the build process described in the accompanying build document. The build will automatically place the shared jar files into the root of the EAR file. In fact, all three WAR files are also contained in the root of the EAR file. Thus the EAR file contains 5 jar files and 3 war files in the root directory, and one deployment descriptor under the META-INF directory (<i>application.xml</i>). + </p> + <p> + The EAR file should look something like this: + </p> + <p> + <source> +META-INF/ +META-INF/MANIFEST.MF +expressdemo.war +j2-admin.war +jetexpress.war +jetspeed-api-2.1-dev.jar +jetspeed-commons-2.1-dev.jar +pluto-1.0.1.jar +portals-bridges-common-1.0.jar +portlet-api-1.0.jar +META-INF/application.xml + </source> + </p> + </subsection> + <subsection name='Remove any old shared libraries'> + <p> + <a name="section_5_3"></a> + If you deploy the shared jar files into your EAR file, you will want to remove any application server-wide shared libraries such as the one configured in <a href="#section_4_3">section 4.3</a> #Add a Shared Library Reference to the Application Server Class Loader. + </p> + </subsection> + <subsection name='Installing the EAR File'> + <p> + <a name="section_5_4"></a> + EAR files are installed in the same manner as WAR files. + </p> + <p> + Navigate to <i>Applications -> Install New Application</i>: <br/> + <img src="images/websphere/54-1.png"/> + <ol> + <li>Select the browse button, and load the <b>jetexpress.ear</b> file from your local file system.</li> + <li>Leave the context root blank</li> + <li>Press Next, leading to a series of dialogs</li> + <li>On the Step 1 dialog, go with the defaults and press Next</li> + <li>On the Step 2, select the three web applications to map them to the server + <br/> + <img src="images/websphere/54-2.png"/> + </li> + <li>On the Step 3 dialog, specify authentication method as "none" and select your JDBC data source:<br/> + <img src="images/websphere/54-3.png"/> <br/> + Hit Browse and select the preconfigured Oracle JDBC data source from section 3, and Apply then Next: <br/> + <img src="images/websphere/54-4.png"/></li> + <li>On the Step 4 dialog, select the three web applications to map the to a virtual host:<br/> + <img src="images/websphere/54-5.png"/> + </li> + <li>On the Step 5 dialog, press Finish, then on the next dialog, press Save</li> + </ol> + </p> + <p> + If you go to the <i>Applications -> Enterprise Applications</i> page, you should see your application deployed:<br/> + <img src="images/websphere/54-6.png"/> + </p> + <p> + If the Application Status is not started (red, not green), then click on the checkbox next to <b>jetexpress</b> link, and click the Start button to start it. Once you see all "green statuses", you are then ready to test your portal. + </p> + <p> + Go to this link: + </p> + <p> + <a href="http://localhost:9080/jetexpress/portal">http://localhost:9080/jetexpress/portal</a> + </p> + <p> + You should see the example Jet Express custom portal:<br/> + <img src="images/websphere/54-7.png"/> + </p> + </subsection> + </section> + <section name='Two or more EAR Deployment Files'> + <p> + <a name="section_6"></a> + In section 5, we demonstrated how to deploy all WAR file. In section 6, we demonstrated how to deploy in a single EAR file. The third choice is to deploy Jetspeed and your portlet applications in two or more EAR deployment files. + </p> + <p> + Advantages: + <ol> + <li>Don't have to redeploy Jetspeed and the Jetspeed Administrative Portlets every time</li> + <li>For development, a smaller footprint for deployment of portlet applications</li> + </ol> + Disadvantages: + <ol> + <li>Still need to setup one shared library and the shared references.</li> + </ol> + </p> + <p> + The deployment of two or more EAR files is not covered by this document. All the steps required can be found in sections 3, 4, and 5. You will still need to install the shared libraries as defined in section 4. Additionally, you will need shared library references for each EAR deployment file. Follow the directions in section 4 for configuring shared libraries and shared library references, as they apply to EAR files in the same way as for WAR files. + </p> + </section> + <section name='Websphere Application Server Additional Information'> + <a name="section_7"></a> + <subsection name='Websphere Application Server Portlet Extensions'> + <p> + <a name="section_7_1"></a> + Extensions for the portlet deployment descriptor specific to Websphere Application Server are defined within a file called <i>ibm-portlet-ext.xmi</i>. This deployment descriptor is an optional descriptor that you can use to configure WebSphere extensions for the portlet application and its portlets. For example, you can disable the <i>PortletServingServlet</i> servlet for the portlet application in the extended portlet deployment descriptor. +The <i>ibm-portlet-ext.xmi</i> extension file is loaded during application startup. If there are no extension-files specified with this setting, the portlet container's default values are used. +The default for the <i>portletServingEnabled</i> attribute is true. The following is an example of how to configure that a <i>PortletServingServlet</i> servlet is not created for any portlet on the portlet application. + </p> + <p> + <source><![CDATA[ +<?xml version="1.0" encoding="UTF-8"?> +<portletappext:PortletApplicationExtension xmi:version="1.0" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:portletappext="portletapplicationext.xmi" + xmlns:portletapplication="portletapplication.xmi" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmi:id="PortletApp_ID_Ext" + portletServingEnabled="false"> + <portletappext:portletApplication href="WEB-INF/portlet.xml#myPortletApp"/> +</portletappext:PortletApplicationExtension> +]]> + </source> + </p> + <p> + Find more information about Websphere porlet extensions here: + </p> + <p> + <a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/rport_depdesc_ext.html"> + http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/rport_depdesc_ext.html + </a> + </p> + </subsection> + <subsection name='Patch to Portlet Names and Servlet Names being different'> + <p> + <a name="section_7_2"></a> + When URL addressability is enabled, portlet names must not be the same as any servlet in the same web application. If URL Addressability is not needed, this name requirement is not needed. A fix is required to switch off name validation if URL addressability is disabled. + </p> + <h3>Problem conclusion</h3> + <p> + When URL addressability is disabled, the validation test if port let names match servlet names must also be disabled. With this fix and URL addressability disabled, a portlet application can be installed also if having the same portlet name as a servlet. + </p> + <p> + The fix for this APAR is currently targeted for inclusion in fix pack 6.1.0.4. + </p> + <p> + <a href="http://www-1.ibm.com/support/docview.wss?uid=swg1PK31467">http://www-1.ibm.com/support/docview.wss?uid=swg1PK31467</a> + </p> + </subsection> + </section> + <section name='Revision History' id="rev"> + <a name="section_8"></a> + <table> + <tr> + <td>Revision</td> + <td>Date</td> + <td>Author</td> + <td>Comments</td> + </tr> + <tr> + <td>0.1</td> + <td>2005-01-21</td> + <td>David Sean Taylor</td> + <td>Initial draft</td> + </tr> + <tr> + <td>0.2</td> + <td>2006-01-10</td> + <td>Ate Douma</td> + <td>Further refinements and cleanout of unused sections</td> + </tr> + <tr> + <td>0.3</td> + <td>2006-01-10</td> + <td>David Sean Taylor</td> + <td>Express refinements</td> + </tr> + <tr> + <td>0.4</td> + <td>2006-10-16</td> + <td>David Sean Taylor</td> + <td>Websphere 6.1 testing</td> + </tr> + <tr> + <td>0.5</td> + <td>2006-10-16</td> + <td>David Sean Taylor</td> + <td>Upgrade to 6.1.0.2, complete WAR section, start on EAR section</td> + </tr> + <tr> + <td>0.6</td> + <td>2006-10-23</td> + <td>David Sean Taylor</td> + <td>Complete EAR sections</td> + </tr> + </table> + </section> + </body> +</document> +
Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/distributed-cache.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/distributed-cache.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/distributed-cache.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/distributed-cache.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,308 @@ +<?xml version="1.0"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<document> + <properties> + <title>Guide to Distributed Cache</title> + <subtitle>How to configure Jetspeed Distributed Cache.</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + </authors> + </properties> + <body> + +<section name="Jetspeed Distributed Cache Configuration"> + <p> + Jetspeed can be optionally configured to use distributed cache replication with ehcache. + By default, distributed cache replication is disabled but it can be enabled through the Jetspeed configuration. + The assembly folder contains <strong><code>cache.xml</code></strong> to control the ehcache configuration via Spring. + </p> + <p> + Jetspeed uses cache-replication for managing all of its distributed caches, such as the page-manager and preferences caches. + The <strong><code>ehcache.xml</code></strong> (found in <strong><code>/WEB-INF/classes/</code></strong>) has more detailed cache configuration details. + It has been modified to enable distributed cache replication for all caches including the page manager and preferences caches. + </p> + <p> + The following examples are taken from the <strong><code>distributed-ehcache.xml</code></strong> (in <strong><code>/WEB-INF/classes/</code></strong>). + If you want to switch to complete distributed cache usage, it is easier to swap the usages of <strong><code>ehache.xml</code></strong> with + the <strong><code>distributed.ehcache.xml</code></strong> completely in <strong><code>cache.xml</code></strong> (in <strong><code>/WEB-INF/assembly/</code></strong>) as shown below. + </p> + <p> +<source><![CDATA[ +<!-- Cache Manager --> +<bean id="cacheManagerConfig" class="org.apache.jetspeed.cache.impl.EhCacheConfigResource"> + <!-- <property name="defaultConfigResource" value="distributed-ehcache.xml"/> --> + <property name="defaultConfigResource" value="ehcache.xml"/> +</bean> +]]></source> + </p> + <p> + The Listener and Provider factory caches are required for cache replication. You shouldn't have to enter values in this file but instead use the jetspeed override.properties to set them. + Below are parameters which can be set for configuring the distributed cache. + The port and hostname can be the same for all nodes in the cluster under most default configurations. + </p> + + <subsection name="ListenerFactory"> + <p> +<source><![CDATA[ +<cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" + properties="hostName=${org.apache.jetspeed.ehcache.hostname}, + port=${org.apache.jetspeed.ehcache.port}"/> +]]></source> + </p> + </subsection> + + <subsection name="ProviderFactory"> + <p> +<source><![CDATA[ +<cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" + properties="peerDiscovery=automatic, + multicastGroupAddress=${org.apache.jetspeed.ehcache.group.address}, + multicastGroupPort=${org.apache.jetspeed.ehcache.group.port}, + timeToLive=${org.apache.jetspeed.ehcache.group.ttl}"/> +]]></source> + </p> + </subsection> + + <subsection name="preferencesCache"> + <p> +<source><![CDATA[ +<cache name="preferencesCache" + maxElementsInMemory="10000" + maxElementsOnDisk="1000" + eternal="false" + overflowToDisk="false" + timeToIdleSeconds="28800" + timeToLiveSeconds="28800" + memoryStoreEvictionPolicy="LFU"> + <cacheEventListenerFactory + class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" + properties="replicateAsynchronously=true, replicatePuts=false, + replicateUpdates=false, replicateUpdatesViaCopy=false, + replicateRemovals=true"/> + </cache> +]]></source> + </p> + </subsection> + + <subsection name="pageManagerPathCache"> + <p> +<source><![CDATA[ +<cache name="pageManagerPathCache" + maxElementsInMemory="${org.apache.jetspeed.ehcache.pagemanager.maxelements}" + eternal="false" + overflowToDisk="false" + timeToIdleSeconds="${org.apache.jetspeed.ehcache.pagemanager.element.ttl}" + timeToLiveSeconds="${org.apache.jetspeed.ehcache.pagemanager.element.ttl}" + memoryStoreEvictionPolicy="LFU"> + <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" + properties="replicateAsynchronously=true, + replicatePuts=false, + replicateUpdates=false, + replicateUpdatesViaCopy=false, + replicateRemovals=true"/> +</cache> +]]></source> + </p> + </subsection> + <subsection name='Hostnames'> + <p> + The host name, represented by the <code>org.apache.jetspeed.ehcache.hostname</code> property, is the host the listener is running on. + The host name defaults to the host name of the default interface if not specified. + You will be required to specify a host name for each node when the host is multi-homed and you want to control the interface over which cluster messages are received. + For instance, if you happen to setup your network so that the cache to cache communication is not on the default interface, then you have to set that host name property on each machine. + This requires a custom jetspeed.property file for each node. + </p> + <p>Configuring a different hostname per node can be done through the Cache Manager configuration Spring bean combined with setting a Java System property. + In the <code>cache.xml</code>, you can configure the <code>CacheManagerConfig</code> to use a system property, in this case a property named <code>server.ref</code>. + This argument is populated at runtime in the portal framework via the following setting in cache.xml:</p> +<source><![CDATA[ + <!-- Cache Manager --> + <bean id="cacheManagerConfig" class="org.apache.jetspeed.cache.impl.EhCacheConfigResource"> + <!-- <property name="defaultConfigResource" value="distributed-ehcache.xml"/> --> + <property name="defaultConfigResource" value="ehcache${server.ref}.xml"/> + </bean> +]]></source> + <p>Make sure to set the system property, for example at startup:</p> +<source><![CDATA[ +java .... -Dserver.ref=_NODE56 +]]></source> + </subsection> + <subsection name='Cache Properties'> + <p> + Following are the default settings for using the distributed cache. These can be set/modified in the <strong><code>jetspeed.properties</code></strong> or <strong><code>override.properties</code></strong>: + </p> + + <table> + <tr> + <th colspan="3">Cache (commented out by default)</th> + </tr> + <tr> + <td colspan="3">Cache page manager override properties.</td> + </tr> + <tr> + <th>Property</th> + <th>Default</th> + <th>Description</th> + </tr> + <tr> + <td>#org.apache.jetspeed.ehcache.pagemanager.maxelements</td> + <td>128</td> + <td>Database page manager cache size</td> + </tr> + <tr> + <td>#org.apache.jetspeed.ehcache.pagemanager.element.ttl</td> + <td>150</td> + <td>Database page manager cache element expiration in seconds, (infinite = 0)</td> + </tr> + <tr> + <td>#org.apache.jetspeed.ehcache.pagemanager.maxfiles</td> + <td>1000</td> + <td>PSML page manager file cache size</td> + </tr> + <tr> + <td>#org.apache.jetspeed.ehcache.config.resource</td> + <td>ehcache.xml</td> + <td>Cache configuration resource, ('ehcache.xml' or 'distributed-ehcache.xml' supported by default)</td> + </tr> + <tr> + <td>#org.apache.jetspeed.ehcache.group.address</td> + <td>230.0.0.1</td> + <td>Distributed cache peer discovery multicast address</td> + </tr> + <tr> + <td>#org.apache.jetspeed.ehcache.group.port</td> + <td>4446</td> + <td>Distributed cache peer discovery multicast port</td> + </tr> + <tr> + <td>#org.apache.jetspeed.ehcache.group.ttl</td> + <td>1</td> + <td>Distributed cache peer discovery multicast TTL. Choose based on the nodes locations. + <ul> + <li>0 - restricted to the same host</li> + <li>1 - restricted to the same subnet</li> + <li>32 - restricted to the same site</li> + <li>64 - restricted to the same region</li> + <li>128 - restricted to the same continent</li> + <li>255 - unrestricted</li> + </ul> + </td> + </tr> + <tr> + <td>#org.apache.jetspeed.ehcache.hostname</td> + <td></td> + <td>Distributed cache peer hostname, (set to listen on specific interface). Hostname will need to be entered for every node in some cases, see section above on <code>Hostnames</code>, otherwise leave blank.</td> + </tr> + <tr> + <td>#org.apache.jetspeed.ehcache.port</td> + <td>40001</td> + <td>Distributed cache peer port. Port should be different for each node if they are running on the same machine.</td> + </tr> + </table><br/> + + <p> + These settings are specific for the page manger cache:<br /> + <ul> + <li>#org.apache.jetspeed.ehcache.pagemanager.maxelements=128</li> + <li>#org.apache.jetspeed.ehcache.pagemanager.element.ttl=150</li> + <li>#org.apache.jetspeed.ehcache.pagemanager.maxfiles=1000</li> + </ul> + </p> + </subsection> +</section> + +<section name="Testing Jetspeed Distributed Cache"> + <p> + First, verify that the following page-manager test works on your development machine: + </p> + <p> +<source><![CDATA[ +mvn test -P test -Dtest=TestDatabasePageManagerCache +]]></source> + </p> + <p> + Not only must this test pass, but the following message should not appear in the + console/shell or in the test log files: + </p> + <p><strong> + "Server page managers not distributed: possible system limitation... test skipped" + </strong></p> + <p> + If you see the above message, check firewall settings to allow UDP/4446. That is + sometimes needed on Lunix systems if firewalls are enabled to allow UDP multicast + loopback. Some older TCP stacks do not support UDP multicast loopback at all. This + is why this test does not outright fail even though distributed caches can not be setup. + </p> + <p> + Now for the full test: setup two independent tomcat J2 images. + Edit <strong><code>webapps/jetspeed/WEB-INF/assembly/cache.xml</code></strong> for Tomcat image #1: + </p> +<source><![CDATA[ +<bean id="cacheManagerConfig" class="org.apache.jetspeed.cache.impl.EhCacheConfigResource"> + <property name="defaultConfigResource" value="distributed-ehcache.xml"/> + <property name="defaultHostname" value="localhost"/> + <property name="defaultPort" value="40001"/> +</bean> +]]></source> + <p> + Edit <strong><code>webapps/jetspeed/WEB-INF/assembly/cache.xml</code></strong> for Tomcat image #2: + </p> +<source><![CDATA[ +<bean id="cacheManagerConfig" class="org.apache.jetspeed.cache.impl.EhCacheConfigResource"> + <property name="defaultConfigResource" value="distributed-ehcache.xml"/> + <property name="defaultHostname" value="localhost"/> + <property name="defaultPort" value="40002"/> +</bean> +]]></source> + + <p> + Startup browsers against each server. Use different host names to + ensure cookies are managed separately (i.e. '127.0.0.1' and 'localhost'). + View the same page in each browser. Edit the page in one browser. Upon refresh, changes should be + visible in second browser. + </p> + <p> + When distributed caches are run on multiple virtual or physical servers, the default + port assigned above does not need to be incremented for each machine. If the servers + are deployed on multiple networks, care must be taken to ensure multicast traffic on + UDP/4446/230.0.0.1 and TCP/40001 is routed between the servers. Additionally, + multicast propagation TTL may have to be specified to enable the UDP packets to + jump between networks. The default value is "1", which is supposed to limit packets + to one subnet. (See the org.apache.jetspeed.ehcache.group.ttl property). + </p> + <p> + Here is a fully specified cacheManagerConfig bean with its distributed cache default + values for normal installation: + </p> +<source><![CDATA[ +<bean id="cacheManagerConfig" class="org.apache.jetspeed.cache.impl.EhCacheConfigResource"> + <property name="defaultConfigResource" value="distributed-ehcache.xml"/> + <property name="defaultGroupAddress" value="230.0.0.1"/> + <property name="defaultGroupPort" value="4446"/> + <property name="defaultGroupTTL" value="1"/> + <property name="defaultHostname" value="localhost"/> + <property name="defaultPort" value="40001"/> +</bean> +]]></source> + <p> + Any of these can be configured to reflect requirements of the production network. + </p> +</section> + +</body> +</document> Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-aggregation.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-aggregation.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-aggregation.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-aggregation.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,262 @@ +<?xml version="1.0"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<document> + <properties> + <title>Jetspeed 2 Aggregation</title> + <subtitle>Guide to Jetspeed Aggregation</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="What is Aggregation?"> + <p> + The portal provides a consolidated view of multiple content sources, or portlets, in a single browser display. + The process of consolidating and rendering this content together is known as aggregation. + In Jetspeed, the aggregator is made up of several pluggable Spring components that plug into the Jetspeed engine. + </p> + </section> + <section name='Supported Aggregators'> + <p>List of Aggregators:</p> + <table> + <tr> + <th>Component Name</th> + <th>Description</th> + <th>Multithreaded?</th> + <th>JSR-168 Caching?</th> + </tr> + <tr> + <td>PageAggregator</td> + <td>Given a PSML page, aggregates the content of all portlets on that page.</td> + <td>no</td> + <td>yes</td> + </tr> + <tr> + <td>AsyncPageAggregator</td> + <td>A multi-threaded, asynchronous PSML page aggregator.</td> + <td>yes</td> + <td>yes</td> + </tr> + <tr> + <td>PortletAggregator</td> + <td>Renders the content of one single portlet.</td> + <td>no*</td> + <td>yes</td> + </tr> + <tr> + <td>AsyncPageAggregator + CommonJ</td> + <td>A multi-threaded, asynchronous PSML page aggregator running CommonJ Work Monitor threads, tested only with IBM Websphere 6.1 only.</td> + <td>yes</td> + <td>yes</td> + </tr> + </table> + <i>* multi-threading is accomplished with the Jetspeed Desktop combined with the PortletAggregator</i> + </section> + <section name="Aggregator Spring Configuration"> + <p> + </p> + <source test=""> + <![CDATA[ + <!-- Default portlet timeout in milliseconds: + Zero means no portlet timeout option by default. + --> + <constructor-arg> + <value>0</value> + </constructor-arg> +]]> + </source> + <p> + </p> + + </section> + + <section name="Changing the Page Aggregator to Multithreaded"> + <p> + The default aggregator is single-threaded. To switch to multi-threaded, + edit the <b>pipelines.xml</b> spring configuration file: + </p> + <source test=""> + <![CDATA[ +<!-- Before --> + <bean id="aggregatorValve" + class="org.apache.jetspeed.aggregator.AggregatorValve" + init-method="initialize" + + <constructor-arg> + <ref bean="org.apache.jetspeed.aggregator.PageAggregator"/> + </constructor-arg> + </bean> + + <!-- After --> + <bean id="aggregatorValve" + class="org.apache.jetspeed.aggregator.AggregatorValve" + init-method="initialize" + + <constructor-arg> + <ref bean="org.apache.jetspeed.aggregator.AsyncPageAggregator"/> + </constructor-arg> + </bean> +]]> + </source> + <p> + </p> + + </section> + <section name="jetspeed-portlet.xml Parameters"> + <p> + For the multithreaded aggregator, you can override the default setting + for rendering timeout for a specific portlet. This value is set in milliseconds + and represents the timeout value that Jetspeed will give the portlet to complete + rendering before it gives up. + </p> + <p> + IMPORTANT: This parameter serves two purposes: (1) the presence of it enables parallel rendering for a portlet, and (2) the value determines how long Jetspeed will +give this portlet to complete rendering before it times out and abandons rendering the portlet. Future versions will relax the first requirement. Beware that even if parallel +rendering is enabled, portlets will not be rendered outside the main thread group, i.e. in sequential, unless this timeout parameter exists in the jetspeed-portlet.xml. + </p> + + <source test=""> + <![CDATA[ +<portlet> + <portlet-name>PickANumberPortlet</portlet-name> + <js:metadata name="timeout">3000</js:metadata> +</portlet> +]]> + </source> + <p> + </p> + + </section> + <section name="Multithreaded Aggregation with Websphere"> + <p>Running mulithreaded aggregation with Jetspeed requires the following configuration steps. + Note that steps 1 and 2 are required for all Websphere installations and are not specific to multithreaded aggregation. + </p> + <subsection name='1. Login Filter'> + <p>Configure the WEB-INF/web.xml to use the PortalFilter for logging in by uncommented the PortalFilter and its mapping:</p> + <source test=""> + <![CDATA[ + <filter> + <filter-name>PortalFilter</filter-name> + <filter-class>org.apache.jetspeed.login.filter.PortalFilter</filter-class> + </filter> +... + <filter-mapping> + <filter-name>PortalFilter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> +]]> + </source> + </subsection> + <subsection name='2.Portal Login Portlet'> + <p>Edit the default-page.psml, changing the login portlet to the filter-based login portlet as shown below. + Make sure to also change the fragment id. Change:</p> + <source test=""> + <![CDATA[ + <fragment id="dp-12" type="portlet" name="j2-admin::LoginPortlet"> + ... +]]> + </source> + <p>to ..</p> + <source test=""> + <![CDATA[ + <fragment id="dp-12a" type="portlet" name="j2-admin::PortalLoginPortlet"> + ... +]]> + </source> + </subsection> + <subsection name='3. Use the Jetspeed Portal Request Factory'> + <p> +Some webcontainers like WebSphere 5.x derive critical information of the HttpServletRequest dynamically from the current application context. +This means that in an invoked portlet application, the original Portal request, as stored in the RequestContext, for example doesn't returns the Portal contextPath, servletPath and HttpSession of the Portal application. You'll get the same object references as in the current application HttpServletRequest. +Because of this, simple things as portal level login through a custom portlet isn't possible in these web containers. + </p> + <p> +To solve this, an additional PortalRequest wrapper will be used which registers the initial (portal) object references from a supplied request and always returns those, +instead of delagating to the wrapped request. +Which wrapper is used is handled by a new PortalRequestFactory which can be specified in the springframework configuration. +For other web containers like Tomcat which doesn't have this "problem", nothing has to be specified (none is by default), in which case the request will be wrapped in an HttpServletRequestWrapper to maintain the same level of wrapping (needed for easy access to the original request in ServletPortletInvoker. + </p> + <p>Edit WEB-INF/assembly/wps.xml, and uncomment the one bean found there</p> + <source test=""> +<![CDATA[ +<beans> + <!-- required for websphere, uncomment if running under websphere + see: http://issues.apache.org/jira/browse/JS2-355 --> + <bean id="org.apache.jetspeed.request.PortalRequestFactory" class="org.apache.jetspeed.request.PortalRequestFactoryImpl"/> +</beans> +]]> + </source> + </subsection> + <subsection name='4. Turn on the Multithreaded Aggregation Engine'> + <p>Swap out the (org.apache.jetspeed.aggregator.PageAggregator) with the multithreaded aggregation engine in WEB-INF/assembly/pipelines.xml: + </p> + <source test=""> +<![CDATA[ + <bean id="aggregatorValve" + class="org.apache.jetspeed.aggregator.AggregatorValve" + init-method="initialize" + > + <constructor-arg> + <ref bean="org.apache.jetspeed.aggregator.AsyncPageAggregator"/> + </constructor-arg> + </bean> +]]> + </source> + </subsection> + <subsection name='Optional Replacement for Portlet Request/Response Unwrapper'> + <p>You can replace the default portlet request/response unwrapper with a third-party module in WEB-INF/assembly/pluto-factories.xml.</p> + <p>Because the servlet request object of a servlet container could not be thread-safe under Jetspeed parallel rendering mode, the third-party unwrapper module can provide a thread-safe implementation by decorating the original request object.</p> + <p>Here's an example setting for third-party unwrapper module:</p> + <source test=""> +<![CDATA[ + <!-- + PortletRequestResponseUnwrapper finds servlet request or servlet response from portlet request or portlet response by unwrapping. + Third-party module can provide an implementation to decorate the real request or response object of a servlet container. + For example, the real request object of a servlet container can be decorated because it is not thread-safe under Jetspeed parallel rendering mode. + --> + <bean id="PortletRequestResponseUnwrapper" + class="com.bluesunrise.jetspeed.container.invoker.WebspherePortletRequestResponseUnwrapper" /> +]]> + </source> + </subsection> + <subsection name='Optional CommonJ Work Manager'> + <p> If you want to use Commonj Work Manager provided by the container, uncomment the followings in WEB-INF/assembly/aggregation.xml:</p> + <source test=""> +<![CDATA[ + <bean id="JetspeedWorkManager" class="org.springframework.jndi.JndiObjectFactoryBean"> + <property name="resourceRef"><value>false</value></property> + <property name="jndiName"> + <value>java:comp/env/wm/jetspeed</value> + </property> + </bean> + <bean id="org.apache.jetspeed.aggregator.CommonjWorkerMonitor" + class="org.apache.jetspeed.aggregator.impl.CommonjWorkerMonitorImpl" + init-method="start" destroy-method="stop" > + <constructor-arg index="0"> + <ref bean="JetspeedWorkManager" /> + </constructor-arg> + </bean> +]]> + </source> +<p> + Also replace all references to org.apache.jetspeed.aggregator.WorkerMonitor with org.apache.jetspeed.aggregator.CommonjWorkerMonitor in WEB-INF/assembly/aggregation.xml. +</p> + </subsection> + </section> + </body> +</document> Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-caching.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-caching.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-caching.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-caching.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,204 @@ +<?xml version="1.0"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<document> + <properties> + <title>Portlet Caching</title> + <subtitle>Portlet Caching</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Portlet Expiration Caching"> + <p> + The Expiration Cache for specific portlets is declared in your portlet.xml deployment descriptor. + At runtime, you can also modify the cache in the <a href='../adminguide/pam.html'>Registry admin</a> for your portlet. + Caching content helps improve the Portal response time for users. An expiration + mechanism is provided on a per portlet basis. Be careful with this feature as cached content, in the Portlet 1.0 specification, the cache is not shared across users. + Each user will receive their own cached content. This feature can use up a lot of memory when you have thousands of users. + The real advantage to using portlet caching is when you have content that is very expensive, performance-wise, to produce. + </p> + <p> + Expiration times are defined in the portlet.xml and are specified in seconds: +<source><![CDATA[ +<portlet> + <expiration-cache>300</expiration-cache> +</portlet> +]]></source> + <ul> + <li>A value of 0 indicates information is never cached.</li> + <li>A value of -1 indicates the cache never expires.</li> + </ul> + </p> + + <subsection name="Jetspeed Caches"> + <p>The Jetspeed portal maintains its several system caches to increase portal performance. These caches can be made <a href='distributed-cache.html'>distributed</a>, but n the default deployment, they are not distributed. + The <code>ehcache.xml</code> file, found under <code>WEB-INF/classes</code>, configures the Jetspeed system caches. + </p> + <p> +<table> + <tr> + <th colspan="3">Jetspeed Caches</th> + </tr> + <tr> + <th>Cache</th> + <th>Description</th> + <th>Parameters</th> + </tr> + <tr> + <td>portletContentCache</td> + <td>JSR-168 Portlet Content Cache + This cache implements the JSR-168 caching specification (see Portlet Expiration Caching above). + The timeToIdle and timeToLive are set to defaults here, but are + always overriden on a per cache-element basis based on the portlet deployment + descriptor value. If there are more than 10000 elements it will not by default, overflow to the + disk cache, which in this configuration will go to wherever java.io.tmp is + defined on your system. On a standard Linux system this will be /tmp + timeToIdleSeconds and timeToLiveSeconds to live are both set at 8 hours (28800) + this is the default setting for portlets who set their expiration cache as -1 + </td> + <td>10,000 elements, time to idle/live = 8 hours, overflow to disk = false, LFU</td> + </tr> + <tr> + <td>preferencesCache</td> + <td>Caches all preference nodes as elements, including user and default preferences. A single user preference can be represented by as many as 8 nodes in memory per user. When calculating + your cache size, also consider the default preferences along with the per user preferences requirements. Also see the section below on <code>Preferences Cache Preloading</code> for instructions on preloading the preferences cache.</td> + <td>10,000 elements, time to idle/live = 8 hours, overflow to disk = false, LFU</td> + </tr> + <tr> + <td>portletApplicationNameCache</td> + <td>Portlet Applications are cached by application name. This cache is hooked into the object-relational database cache and is essential for reasonable performance of the portal.</td> + <td>500 elements, time to idle/live = 8 hours, overflow to disk = false, LFU</td> + </tr> + <tr> + <td>portletApplicationOidCache</td> + <td>Portlet Applications are cached by object id. This cache is hooked into the object-relational database cache and is essential for reasonable performance of the portal.</td> + <td>500 elements, time to idle/live = 8 hours, overflow to disk = false, LFU</td> + </tr> + <tr> + <td>portletDefinitionNameCache</td> + <td>Portlet Definition are cached by portlet unique name. This cache is hooked into the object-relational database cache and is essential for reasonable performance of the portal.</td> + <td>2000 elements, time to idle/live = 8 hours, overflow to disk = false, LFU</td> + </tr> + <tr> + <td>portletDefinitionOidCache</td> + <td>Portlet Definition are cached by object id. This cache is hooked into the object-relational database cache and is essential for reasonable performance of the portal.</td> + <td>2000 elements, time to idle/live = 8 hours, overflow to disk = false, LFU</td> + </tr> + <tr> + <td>decorationConfigurationCache</td> + <td></td> + <td>500 elements, time to idle/live = 8 hours, overflow to disk = false, LFU</td> + </tr> + <tr> + <td>portletWindowCache</td> + <td>Caches portlet window accessor objects to speed up access for portlet fragment to window lookups</td> + <td>200 elements, time to idle/live = 8 hours, overflow to disk = false, LFU</td> + </tr> + <tr> + <td>pageManagerOidCache</td> + <td>Pages are cached by object id. This cache is hooked into the object-relational database cache and is essential for reasonable performance of the portal.</td> + <td>128 elements, time to idle/live = 150 seconds, overflow to disk = false, LFU</td> + </tr> + <tr> + <td>pageManagerPathCache</td> + <td>Pages are cached by the page full path. This cache is hooked into the object-relational database cache and is essential for reasonable performance of the portal.</td> + <td>128 elements, time to idle/live = 150 seconds, overflow to disk = false, LFU</td> + </tr> +</table> +</p> + + <p> +<table> + <tr> + <th colspan="2">General Cache Settings in ehcache.xml</th> + </tr> + <tr> + <th>Setting</th> + <th>Description</th> + </tr> + <tr> + <td>maxElementsInMemory</td> + <td>Sets the maximum number of objects that will be created in memory</td> + </tr> + <tr> + <td>maxElementsOnDisk</td> + <td>Sets the maximum number of objects that will be maintained in the DiskStore + The default value is zero, meaning unlimited.</td> + </tr> + <tr> + <td>eternal</td> + <td> Sets whether elements are eternal. If eternal, timeouts are ignored and the + element is never expired.</td> + </tr> + <tr> + <td>overflowToDisk</td> + <td>Sets whether elements can overflow to disk when the memory store + has reached the maxInMemory limit.</td> + </tr> + <tr> + <td>timeToIdleSeconds (optional)</td> + <td> Sets the time to idle for an element before it expires. + i.e. The maximum amount of time between accesses before an element expires + Is only used if the element is not eternal. + Optional attribute. A value of 0 means that an Element can idle for infinity. + The default value is 0.</td> + </tr> + <tr> + <td>timeToLiveSeconds (optional)</td> + <td>Sets the time to live for an element before it expires. + i.e. The maximum time between creation time and when an element expires. + Is only used if the element is not eternal. + Optional attribute. A value of 0 means that and Element can live for infinity. + The default value is 0.</td> + </tr> + <tr> + <td>memoryStoreEvictionPolicy</td> + <td>Policy would be enforced upon reaching the maxElementsInMemory limit. Default + policy is Least Recently Used (specified as LRU). Other policies available - + First In First Out (specified as FIFO) and Less Frequently Used + (specified as LFU)</td> + </tr> + </table> + </p> + + </subsection> + <subsection name='Preferences Cache Preloading'> + <p>To help with preferences performance, preferences can be preloaded at system started. See the Spring configuration file <code>prefs.xml</code> to modify the loading + of preferences into the preference cache at Jetspeed startup. Both default and user (entity) preferences can be optionally preloaded. The default setting is to + preload all all preferences for the j2-admin portlet application. See the constructor argument 2 on the <code>PreferencesProviderImpl</code> service, to modify the + list of portlet applications default preferences to preload. Leave the list empty to not preload default preferences. The third constructor argument determines + whether all user (entity) preferences are preloaded or not. The default is to not preload. Be very careful with this setting as it can result in quickly running out + of memory at startup. + </p> + +<source><![CDATA[ + <!-- list of portlet applications default preferences to preload, leave list empty to not preload --> + <constructor-arg index='2'> + <list> + <value>j2-admin</value> + </list> + </constructor-arg> + <!-- preload ALL Entities: warning this can chew up lots of memory --> + <constructor-arg index='3'><value type="boolean">false</value></constructor-arg> +]]></source> + + </subsection> + </section> + </body> +</document> Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-content-mapping-psml.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-content-mapping-psml.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-content-mapping-psml.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-content-mapping-psml.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,109 @@ +<?xml version="1.0"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> +<document> + <properties> + <title>Guide to Content Mapping for PSML</title> + <subtitle>Guide to Content Mapping for PSML</subtitle> + <authors> + <person name="Randy Watler" email="[email protected]"/> + </authors> + </properties> + <body> +<section name="Content and Request URL Mapping"> +<p> +The Jetspeed Portal implements request URL mapping features to support portlets designed to display content from repositories or other web sites. This makes it possible to augment the portal URL space with virtual PSML pages and hierarchies that mirror the paths or URL structure of the content source. These features are implemented by the <a href="guide-menus-declarative-psml.html#Portal_Site_Component">Portal Site Component</a> within the portal. +</p> +<p> +While accessing and displaying content is a responsibility left to portlets, the <a href="guide-menus-declarative-psml.html#Portal_Site_Component">Portal Site Component</a> allows <a href="../devguide/guide-psml.html#Dynamic_Page">dynamic page</a> templates with these portlets to present content as portal pages. In addition, the request URL is mapped into a content access path that is passed as a request attribute to portlets, (see <a href="../apidocs/org/apache/jetspeed/PortalReservedParameters.html"><code>PortalReservedParameters.PATH_ATTRIBUTE</code></a> and <a href="../apidocs/org/apache/jetspeed/PortalReservedParameters.html"><code>PortalReservedParameters.CONTENT_PATH_ATTRIBUTE</code></a>). By default, matching <a href="../devguide/guide-psml.html#Page">concrete pages</a> defined in the PSML are matched by requests first. If unmatched, requests are then classified by the <a href="#Content_and_Request_URL_Mapping_Configuration">Content Type Mapper</a> implementation registered with the Portal Site Component. The provided implementation decomposes the request URL into a content access path and content type if it is recognized as a content request. This information is subsequently used by the Portal Site Component to find the most specific <a href="../devguide/guide-psml.html#Dynamic_Page">dynamic page</a> that can be addressed by the path on the request URL. Fallback <a href="../devguide/guide-psml.html#Dynamic_Page">dynamic page</a> selection is performed by searching in parent PSML <a href="../devguide/guide-psml.html#Folder">folders</a> and matching wildcard, '*', dynamic page content types. +</p> +</section> +<section name="Content and Request URL Mapping Configuration"> +<p> +The Portal Site content mapping is configured using a Content Type Mapper implementation specified in the portal Spring configuration, (typically in the page-manager.xml assembly file). The provided implementation matches request URLs using Perl regular expression patterns to determine content and system request access paths and dynamic page content types. As with other portal configurations, this object can be replaced with a custom implementation that might leverage external repository or web site information to classify the portal request. +</p> +<p>Example provided Content Type Mapper configuration:</p> +<source><$</value></constructor-arg> <!-- use $ for '$' --> + <constructor-arg index="1"><value>$1</value></constructor-arg> <!-- use $ for '$' --> + </bean> + </list> + </constructor-arg> + <!-- dynamic page path mapping --> + <constructor-arg index="1"> + <list> + <bean class="org.apache.jetspeed.portalsite.impl.RequestPathMapping"> + <constructor-arg index="0"><value>/preview/</value></constructor-arg> + <constructor-arg index="1"><value>/</value></constructor-arg> + </bean> + <bean class="org.apache.jetspeed.portalsite.impl.RequestPathMapping"> + <constructor-arg index="0"><value>.domain.com</value></constructor-arg> + <constructor-arg index="1"><value>doc</value></constructor-arg> + <constructor-arg index="2"><value>/(?:draft|scratch)/</value></constructor-arg> + <constructor-arg index="3"><value>/pub/</value></constructor-arg> + </bean> + </list> + </constructor-arg> + <!-- system page path mapping --> + <constructor-arg index="2"> + <list> + <bean class="org.apache.jetspeed.portalsite.impl.RequestPathMapping"> + <constructor-arg index="0"><value>/preview/</value></constructor-arg> + <constructor-arg index="1"><value>/</value></constructor-arg> + </bean> + </list> + </constructor-arg> + <!-- external content path mapping --> + <constructor-arg index="3"> + <list> + <bean class="org.apache.jetspeed.portalsite.impl.RequestPathMapping"> + <constructor-arg index="0"><value>[.](\w+)$</value></constructor-arg> <!-- use $ for '$' --> + <constructor-arg index="1"><value></value></constructor-arg> + </bean> + </list> + </constructor-arg> + <!-- enable content type fallback --> + <constructor-arg index="4"><value>true</value></constructor-arg> + </bean> +]]></source> +<p> +The above configuration specifies the following content and request URL mapping: +<ul> + <li>Content types are taken from the request URL file extension.</li> + <li>Dynamic page request paths are modified by stripping the '/preview' prefix.</li> + <li>Dynamic page request paths for 'doc' content types against the '.domain.com' servers are modified by replacing the '/draft' and '/scratch' prefix with '/pub'.</li> + <li>Concrete portal page and folder request paths, (i.e. system pages), are also modified by stripping the '/preview' prefix</li> + <li>Content page content access paths types are constructed from the request URL by stripping the file extension.</li> + <li>Wildcard dynamic page content type fallback is enabled.</li> +</ul> +See the <a href="../apidocs/index.html">javadoc</a> for the following classes for more information on configuring these Spring beans: +<ul> + <li><a href="../apidocs/org/apache/jetspeed/portalsite/impl/ContentTypeMapping.html"><code>org.apache.jetspeed.portalsite.impl.ContentTypeMapping</code></a></li> + <li><a href="../apidocs/org/apache/jetspeed/portalsite/impl/PortalSiteContentTypeMapperImpl.html"><code>org.apache.jetspeed.portalsite.impl.PortalSiteContentTypeMapperImpl</code></a></li> + <li><a href="../apidocs/org/apache/jetspeed/portalsite/impl/RequestPathMapping.html"><code>org.apache.jetspeed.portalsite.impl.RequestPathMapping</code></a></li> +</ul> +</p> +</section> +</body> +</document> Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-device-capabilities.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-device-capabilities.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-device-capabilities.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-deploy/src/site/xdoc/guide-device-capabilities.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,113 @@ +<?xml version="1.0"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<document> + <properties> + <title>Jetspeed 2 Device Capabilities</title> + <subtitle>Guide to Jetspeed Device Capabilities</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Device Capabilities"> + <p> + Jetspeed capabilities provides a mechanism for mapping the client + (browser) used to access the portal to media types for page rendering. + </p> + <p> + A device is associated with a list of capabilities, allowing the portal + to know what kind of content the device can handle (such as + Javascript, DHTML..) + </p> + <p> + The rules for mapping devices to media types and capabilities are + stored in the database. The original values for these are first populated with + XML data. + </p> + <p> + Your custom build should be setup with the default XML data for + devices and media types. Currently there is no administrative portlets for editing device information. + </p> + <p> + A full set of capabilities, devices, media types and mime types are + supplied with the XML test data. + </p> + <p> + The Jetspeed-2 capability engine maps clients to media types to + mime types. Here are some more detailed definitions: + <ul> + <li>Clients: The application that initiates a request to the Jetspeed-2 + portal engine. Jetspeed-2 uses the User-Agent to determine the + client that initiates a request.</li> + <li>Media Type: The type of media requesting the content (HTML, + WML, etc.). Content in Jetspeed-2 can be requested by different + type of devices through different media.</li> + <li>Mime Type: The type of content being requested.</li> + <li>Supported Media Types: HTML, XHTML-BASIC, XML, WML, VXML</li> + </ul> + </p> + + <p> +Define the default mime types +<source><![CDATA[ +<MimeTypes> + <MimeType>application/xhtml+xml</MimeType> + <MimeType>text/html</MimeType> + <MimeType>text/vnd.wap.wml</MimeType> + <MimeType>text/vxml</MimeType> + <MimeType>text/xhtml</MimeType> + <MimeType>text/xml</MimeType> +</MimeTypes> +]]></source> + </p> + + <p> +Define media types (used in special _control folder processing) and preferred mime type: +<source><![CDATA[ +<MediaType name="html"> + <charcterSet value="UTF-8"/> + <title value="HTML"/> + <description value="Rich HTML for HTML 4.0 compliants browsers"/> + <capabilities></capabilities> + <mimeTypes>text/html</mimeTypes> +</MediaType> +]]></source> + </p> + + + <p> +Defines supported Clients (browsers) by the portal and their device +capabilities. Clients are mapped to media types via the preferred +mime type +<source><![CDATA[ +<Client name="ie5mac" evalOrder="1" preferredMimeTypeID="text/html"> + <userAgentPattern value=".*MSIE 5.*Mac.*"/> + <version value="5.*"/> + <model value="None"/> + <manufacturer value="Microsoft"/> + <capabilities> + HTML_3_2,HTML_JAVA,HTML_JAVASCRIPT, HTML_TABLE,HTML_FORM,HTML_FRAME,HTML_IMAGE,HTML_PLUGIN,HTML_CSS1,HTML_DOM_NS4, HTTP_COOKIE + </capabilities> + <mimeTypes>text/html</mimeTypes> +</Client> +]]></source> + </p> + + </section> + </body> +</document>
