Raible's Wiki
Raible Designs AppFuseHomepage- Korean - Chinese - Italian - Japanese QuickStart Guide User Guide Tutorials Other ApplicationsStruts ResumeSecurity Example Struts Menu
Set your name in
UserPreferences
Referenced by
JSPWiki v2.2.33
Hide Menu |
This page documents the steps necessary to migrate an existing Struts application for use as a Jetspeed portlet. See the installing Jetspeed page if you don't have Jetspeed installed. The application used for testing and figuring out these steps was the Struts version of Equinox. The struts-demo app that's included in Jetspeed-2 was used as a reference. For this tutorial, Equinox 1.2 was used - and this change was made to build.xml. To begin, I created an equinox-struts project by downloading/extracting Equinox and then cd-ing into its extras/struts folder and running "ant test". Make sure Tomcat is stopped when you run this command since this command will actually start Tomcat and run some tests in it. Table of Contents
Add the portals-bridges-struts-0.1.jar to your project [#1]Once you have equinox-struts and jetspeed setup, copy the portals-bridges-struts-0.1.jar from your local Maven repository into the web/WEB-INF/lib directory. cp ~/.maven/repository/portals-bridges/jars/portals-bridges-struts-0.1.jar web/WEB-INF/lib Modify web.xml to use PortletServlet instead of ActionServlet [#2]Change the "action" servlet in web/WEB-INF/web.xml to use the PortletServlet from the bridge JAR. <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.portals.bridges.struts.PortletServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> Modify struts-config.xml to override the default RequestProcessor [#3]In web/WEB-INF/struts-config.xml add a <controller> element just above the <message-resources> element to override the RequestProcessor. <!-- ========== Controller Configuration ================================ --> <controller pagePattern="$M$P" inputForward="true" processorClass="org.apache.portals.bridges.struts.PortletRequestProcessor"/> Create a portlet.xml file in the WEB-INF directory [#4]Copy and paste the following XML into a portlet.xml file in the web/WEB-INF directory. <?xml version="1.0" encoding="UTF-8"?> <portlet-app id="equinox-struts" version="1.0"> <portlet id="Equinox-Struts"> <init-param> <name>ServletContextProvider</name> <value>org.apache.jetspeed.portlet.ServletContextProviderImpl</value> </init-param> <init-param> <name>ViewPage</name> <value>/user.html</value> </init-param> <portlet-name>Equinox-Struts</portlet-name> <display-name>Equinox</display-name> <description>This is a simple portlet</description> <portlet-class>org.apache.portals.bridges.struts.StrutsPortlet</portlet-class> <expiration-cache>-1</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>VIEW</portlet-mode> <portlet-mode>HELP</portlet-mode> </supports> <portlet-info> <title>User List</title> <short-title>This is the short title</short-title> <keywords>Spring</keywords> </portlet-info> </portlet> </portlet-app> Deploy the WAR to Jetspeed [#5]In build.properties, add a "deploy.dir" property so you can deploy to Jetspeed's deployer. deploy.dir=/opt/dev/tools/tomcat/webapps/jetspeed/WEB-INF/deploy Edit web/WEB-INF/classes/jdbc.properties and change the "jdbc.url" to use an absolute path. This is necessary so you can populate the HSQL database from the equinox-struts directory. jdbc.url=jdbc:hsqldb:/Users/mraible/dev/equinox-struts/db/equinox Start Tomcat and run "ant deploywar" to deploy your portlet. If you're watching Tomcat's log files ($CATALINA_HOME/logs/catalina.out) - and you don't see your WAR getting deployed, make sure the portlet.xml is in your web/WEB-INF directory. To update the WAR in Jetspeed, just run "ant deploywar" after you've modified files. To undeploy the WAR, delete the equinox-struts.war file from $CATALINA_HOME/webapps/jetspeed/WEB-INF/deploy. NOTE: These deployment instructions are based on this wiki page.Create a .psml file so the portlet will show up in Jetspeed [#6]Create a equinox-struts.psml file in $CATALINA_HOME/webapps/jetspeed/WEB-INF/pages with the following contents. The fragment id's must be unique among all .psml files, and the name of the portlet is read from the portlet.xml file.<?xml version="1.0" encoding="UTF-8"?> <page id="equinox-struts"> <defaults skin="orange" layout-decorator="tigris" portlet-decorator="tigris"/> <title>Equinox-Struts</title> <fragment id="equinox-struts-layout" type="layout" name="jetspeed::VelocityTwoColumns"> <fragment id="equinox-struts-portlet" type="portlet" name="equinox-struts::Equinox-Struts"> <property layout="TwoColumns" name="row" value="0"/> <property layout="TwoColumns" name="column" value="0"/> </fragment> </fragment> </page> Open http://localhost:8080/jetspeed. You should see a "Equinox-Struts" tab on the opening screen. To populate the values in the HSQL database, run "ant populate" and you should see a list of users when you click on the tab. Known Issues [#7]
|