Multiple portlets, 1 war
karanmg Mar 10, 2005 5:02 PMFOA, congratulations on getting the beta version out.
I have a SunSamples.war, which is a war file I downloaded from Sun One/JSR168 website and Im trying to deploy this in jBossAS/Portal.
The structure of this directory is:
deploy/Portlets/SunSamples.war/ -- this dir holds some jsps.
deploy/Portlets/SunSamples.war/WEB-INF
jboss-portlet.xml:
<portlet-app> <app-name>SunSamples</app-name> <portlet> <portlet-name>JSPPortlet</portlet-name> </portlet> <portlet> <portlet-name>NotepadPortlet</portlet-name> </portlet> <portlet> <portlet-name>BookmarkPortlet</portlet-name> </portlet> <portlet> <portlet-name>WeatherPortlet</portlet-name> </portlet> </portlet-app>
portlet.xml
<?xml version="1.0" encoding="UTF-8"?> <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd /opt/SUNWps/dtd/portlet.xsd" version="1.0"> <portlet> <portlet-name>JSPPortlet</portlet-name> <portlet-class>com.sun.portal.portlet.samples.jspportlet.JSPPortlet</portlet-class> <supported-locale>en</supported-locale> <resource-bundle>Resource</resource-bundle> <expiration-cache>0</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>EDIT</portlet-mode> <portlet-mode>HELP</portlet-mode> </supports> <supports> <mime-type>text/wml</mime-type> <portlet-mode>EDIT</portlet-mode> <portlet-mode>HELP</portlet-mode> </supports> <resource-bundle>ShowTimePortletRB</resource-bundle> <portlet-info> <title>ShowTime Portlet</title> <keywords>jsp, clock, test</keywords> </portlet-info> <portlet-preferences> <preference> <name>contentPage</name> <value>/jspportlet/content.jsp</value> </preference> <preference> <name>editPage</name> <value>/jspportlet/edit.jsp</value> </preference> <preference> <name>helpPage</name> <value>/jspportlet/help.jsp</value> </preference> <preference> <name>timezone</name> <value></value> </preference> </portlet-preferences> </portlet> <portlet> <portlet-name>NotepadPortlet</portlet-name> <portlet-class>com.sun.portal.portlet.samples.notepad.NotepadPortlet</portlet-class> <supported-locale>en</supported-locale> <resource-bundle>Resource</resource-bundle> <expiration-cache>0</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>EDIT</portlet-mode> <portlet-mode>HELP</portlet-mode> </supports> <supports> <mime-type>text/wml</mime-type> <portlet-mode>EDIT</portlet-mode> <portlet-mode>HELP</portlet-mode> </supports> <resource-bundle>NotepadPortletRB</resource-bundle> <portlet-info> <title>Notepad Portlet</title> <keywords>note, notepad, sample, test</keywords> </portlet-info> <portlet-preferences> <preference> <name>contentPage</name> <value>/notepad/content.jsp</value> </preference> <preference> <name>editPage</name> <value>/notepad/edit.jsp</value> </preference> <preference> <name>helpPage</name> <value>/notepad/help.jsp</value> </preference> <preference> <name>categories</name> </preference> <preference> <name>displayMax</name> <value>5</value> </preference> </portlet-preferences> </portlet> <portlet> <portlet-name>BookmarkPortlet</portlet-name> <portlet-class>com.sun.portal.portlet.samples.bookmarkportlet.BookmarkPortlet</portlet-class> <supported-locale>en</supported-locale> <resource-bundle>Resource</resource-bundle> <expiration-cache>0</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>EDIT</portlet-mode> <portlet-mode>HELP</portlet-mode> </supports> <supports> <mime-type>text/wml</mime-type> <portlet-mode>EDIT</portlet-mode> <portlet-mode>HELP</portlet-mode> </supports> <resource-bundle>BookmarkPortletRB</resource-bundle> <portlet-info> <title>BookmarkPortlet</title> </portlet-info> <portlet-preferences> <preference> <name>bookmarkContentPage</name> <value>/bookmarkportlet/content.jsp</value> </preference> <preference> <name>bookmarkEditPage</name> <value>/bookmarkportlet/edit.jsp</value> </preference> <preference> <name>bookmarkHelpPage</name> <value>/bookmarkportlet/help.jsp</value> </preference> <preference> <name>targets</name> <value>Sun home page=http://www.sun.com</value> <value>Oracle home page=http://www.oracle.com</value> <value>AOL home page=http://www.aol.com</value> </preference> <preference> <name>windowPref</name> <value>all_new</value> </preference> </portlet-preferences> </portlet> <portlet> <portlet-name>WeatherPortlet</portlet-name> <portlet-class>com.sun.portal.portlet.samples.weatherportlet.WeatherPortlet</portlet-class> <supported-locale>en</supported-locale> <resource-bundle>Resource</resource-bundle> <init-param> <name>weather.url</name> <value>http://services.xmethods.net:80/soap/servlet/rpcrouter</value> </init-param> <expiration-cache>3600</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>EDIT</portlet-mode> <portlet-mode>HELP</portlet-mode> </supports> <resource-bundle>WeatherPortletRB</resource-bundle> <portlet-info> <title>WeatherPortlet</title> </portlet-info> <portlet-preferences> <preference> <name>zip</name> <value>95054</value> </preference> <preference> <name>unit</name> <value>F</value> </preference> <preference> <name>contentPage</name> <value>/weather/weatherView.jsp</value> </preference> <preference> <name>editPage</name> <value>/weather/weatherEdit.jsp</value> </preference> <preference> <name>helpPage</name> <value>/weather/weatherHelp.jsp</value> </preference> <preferences-validator>com.sun.portal.portlet.samples.weatherportlet.WeatherValidator</preferences-validator> </portlet-preferences> </portlet> <user-attribute> <description>Preferred TimeZone</description> <name>timezone</name> </user-attribute> <user-attribute> <description>Preferred Locale</description> <name>locale</name> </user-attribute> </portlet-app>
portlet-instances.xml
<?xml version="1.0" standalone="yes"?> <instances> <instance> <instance-name>JSPPortletInstance</instance-name> <component-name>JSPPortlet</component-name> </instance> <instance> <instance-name>NotepadPortletInstance</instance-name> <component-name>NotepadPortlet</component-name> </instance> <instance> <instance-name>BookmarkPortletInstance</instance-name> <component-name>BookmarkPortlet</component-name> </instance> <instance> <instance-name>WeatherPortletInstance</instance-name> <component-name>WeatherPortlet</component-name> </instance> </instances>
I made 4 "-pages.xml" files to define the pages for the diff portlets:
eg.:
samplenotepad-pages.xml
<pages> <portal-name>default</portal-name> <page> <page-name>samplenotepad</page-name> <window> <window-name>NotepadPortletWindow</window-name> <instance-ref>SunSamples.NotepadPortlet.NotepadPortletInstance</instance-ref> <default>true</default> <region>left</region> <height>0</height> </window> </page> </pages>
The other files are samplebookmark-pages.xml, samplejsp-pages.xml, sampleweather-pages.xml.
Thats the scenario I have. Can you tell me whats wrong with it? I get the following error when jBossAS starts up:
. . 15:36:08,693 INFO [Window] Started 15:36:08,694 INFO [HelloWorldPortletWindow] started 15:36:10,080 INFO [TomcatDeployer] deploy, ctxPath=/jmx-console, warUrl=file:/usr/local/jboss-4.0.1sp1/server/default/deploy/jmx-console.war/ 15:36:12,678 INFO [TomcatDeployer] deploy, ctxPath=/web-console, warUrl=file:/usr/local/jboss-4.0.1sp1/server/default/deploy/management/web-console.war/ 15:36:16,607 INFO [TomcatDeployer] deploy, ctxPath=/SunSamples, warUrl=file:/usr/local/jboss-4.0.1sp1/server/default/deploy/myPortlets/SunSamples.war/ 15:36:17,784 ERROR [WebAppAdapter] Cannot handle the intercepted deployment java.lang.IllegalArgumentException: Too many children at org.jboss.portal.common.util.XML.getSingleChild(XML.java:186) at org.jboss.portal.portlet.deployment.builder.PortletBuilder.buildPortletMetaData(PortletBuilder.java:229) at org.jboss.portal.portlet.deployment.builder.PortletBuilder.build(PortletBuilder.java:150) at org.jboss.portal.core.deployment.builder.CorePortletBuilder.build(CorePortletBuilder.java:42) at org.jboss.portal.server.deployment.SimpleDeploymentReactor.build(SimpleDeploymentReactor.java:127) at org.jboss.portal.server.deployment.SimpleDeploymentReactor.build(SimpleDeploymentReactor.java:134) at org.jboss.portal.server.deployment.SimpleDeploymentReactor.build(SimpleDeploymentReactor.java:134) at org.jboss.portal.server.deployment.SimpleDeploymentReactor.process(SimpleDeploymentReactor.java:101) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:122) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:131) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:177) at $Proxy35.process(Unknown Source) at org.jboss.portal.server.deployment.WebAppAdapter.deploy(WebAppAdapter.java:49) at org.jboss.portal.server.deployment.WebAppIntercepter.handleNotification(WebAppIntercepter.java:137) at org.jboss.mx.modelmbean.XMBean.handleNotification(XMBean.java:485) at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.jboss.mx.notification.NotificationListenerProxy.invoke(NotificationListenerProxy.java:138) at $Proxy49.handleNotification(Unknown Source) at org.jboss.mx.util.JBossNotificationBroadcasterSupport.handleNotification(JBossNotificationBroadcasterSupport.java:112) at org.jboss.mx.util.JBossNotificationBroadcasterSupport.sendNotification(JBossNotificationBroadcasterSupport.java:93) at org.jboss.deployment.SubDeployerSupport.start(SubDeployerSupport.java:218) at org.jboss.web.AbstractWebContainer.start(AbstractWebContainer.java:376) at org.jboss.deployment.MainDeployer.start(MainDeployer.java:964) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:775) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:738) at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:122) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:131) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:177) at $Proxy8.deploy(Unknown Source) at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:305) at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:481) at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:204) at org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:277) at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:272) at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:222) at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.server.Invocation.invoke(Invocation.java:72) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642) at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:891) at $Proxy0.start(Unknown Source) at org.jboss.system.ServiceController.start(ServiceController.java:416) at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.server.Invocation.invoke(Invocation.java:72) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:177) at $Proxy4.start(Unknown Source) at org.jboss.deployment.SARDeployer.start(SARDeployer.java:261) at org.jboss.deployment.MainDeployer.start(MainDeployer.java:964) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:775) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:738) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:722) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:122) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:131) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:177) at $Proxy5.deploy(Unknown Source) at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:413) at org.jboss.system.server.ServerImpl.start(ServerImpl.java:310) at org.jboss.Main.boot(Main.java:162) at org.jboss.Main$1.run(Main.java:423) at java.lang.Thread.run(Thread.java:534) . . .
I looked at the ref-guide and there is a "*-portal.xml" descriptor. I think it has something to do with multiple portlets in one war file. But a few questions about that:
1. What should be the complete name of the -portal.xml file? Is it appname-portal.xml?
2. For something like abc-pages.xml, does the page-name inside have to be: <page-name>abc</page-name>
3. In 2, how do I know the name "abc"? Is it anythign I want?
4. If my portlets are in ABC.war, and so jboss-portlet.xml is in ABC/WEB-INF/ then in jboss-portlet.xml does the app-name have to be: <app-name>ABC</app-name> or it can be anythign I want?
5. If I use "-portal.xml", then I don't need to define any "*-pages.xml" files? Does it mean there is only 1 "-portal.xml" file in one war directory?
Thanks in advance,
Karan