History | Log In     View a printable version of the current page.  
Issue Details (XML | Word | Printable)

Key: WW-1318
Type: Bug Bug
Status: Resolved Resolved
Resolution: Won't Fix
Priority: Critical Critical
Assignee: Nils-Helge Garli
Reporter: Gunnar Rohde
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
WebWork

Deploying two webwork portlets in Jetspeed 2.0 throws ClassCastException

Created: 11/Jul/06 05:06 AM   Updated: 09/Aug/06 10:42 AM
Component/s: Portlet Integration
Affects Version/s: 2.2.2
Fix Version/s: 2.2.3

File Attachments: 1. File filialSuche.war (6.24 Mb)
2. File filialSucheFirmenKunden.war (6.24 Mb)

Environment: Windows XP Workstation, Jetspeed 2.0, RAD IDE, jdk 1.4.2_08

Flags: Important


 Description  « Hide
Hi,

our task is, to deploy more than one portlet in the portlet container (for now Jetspeed 2.0 and later websphere 5.1).

Anyway, building one portlet and deploying it, works fine following the instruction example on the WebWork example page for portlets.

Now, deploying a second portlet constructed the same way throws a ClassCastException as listed at the bottom; the result is, that you can see both portlets, but the one which is mentioned second in a whatsoever .psml file is rendered without the webwork form elements.

I tried to reference only one portlet twice in the .psml file (so you get two copies of the same portlet on the page), which works fine. But deploying two different portlets brings the trouble. Please also see the two attached portlets in order to get the same result in your own environment.



868039 [DEBUG][http-8080-Processor23][com.opensymphony.webwork.components.UIBean] Rendering template /template/xhtml/form
868039 [DEBUG][http-8080-Processor23][freemarker.cache] template/xhtml/form.ftl[de_CH,UTF-8,parsed] cached copy not yet stale; using cached.
868039 [DEBUG][http-8080-Processor23][com.opensymphony.webwork.components.template.FreemarkerTemplateEngine] Rendering template /template/xhtml/form.ftl
868039 [ERROR][http-8080-Processor23][com.opensymphony.webwork.components.ClosingUIBean] Could not open template
java.lang.ClassCastException
at com.opensymphony.webwork.views.freemarker.FreemarkerManager.buildScopesHashModel(FreemarkerManager.java:152)
at com.opensymphony.webwork.views.freemarker.FreemarkerManager.buildTemplateModel(FreemarkerManager.java:279)
at com.opensymphony.webwork.components.template.FreemarkerTemplateEngine.renderTemplate(FreemarkerTemplateEngine.java:98)
at com.opensymphony.webwork.components.UIBean.mergeTemplate(UIBean.java:637)
at com.opensymphony.webwork.components.ClosingUIBean.start(ClosingUIBean.java:43)
at com.opensymphony.webwork.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:29)
at org.apache.jsp.WEB_002dINF.pages.view.zeigeKanton_jsp._jspx_meth_ww_form_0(org.apache.jsp.WEB_002dINF.pages.view.zeigeKanton_jsp:185)
at org.apache.jsp.WEB_002dINF.pages.view.zeigeKanton_jsp._jspService(org.apache.jsp.WEB_002dINF.pages.view.zeigeKanton_jsp:87)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
at org.apache.jetspeed.dispatcher.JetspeedRequestDispatcher.include(JetspeedRequestDispatcher.java:72)
at com.opensymphony.webwork.portlet.result.PortletResult$IncludeTemplate.include(PortletResult.java:207)
at com.opensymphony.webwork.portlet.result.PortletResult.executeRenderResult(PortletResult.java:176)
at com.opensymphony.webwork.portlet.result.PortletResult.doExecute(PortletResult.java:60)
at com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport.java:101)
at com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:312)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:207)
at ch.zkb.module.filial_finder.portlet.interceptor.WebflowUeberwachungInterceptor.intercept(WebflowUeberwachungInterceptor.java:129)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:113)
at com.opensymphony.webwork.portlet.dispatcher.Jsr168Dispatcher.serviceAction(Jsr168Dispatcher.java:414)
at com.opensymphony.webwork.portlet.dispatcher.Jsr168Dispatcher.render(Jsr168Dispatcher.java:296)
at org.apache.jetspeed.factory.JetspeedPortletInstance.render(JetspeedPortletInstance.java:102)
at org.apache.jetspeed.container.JetspeedContainerServlet.doGet(JetspeedContainerServlet.java:230)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
at org.apache.jetspeed.container.invoker.ServletPortletInvoker.invoke(ServletPortletInvoker.java:213)
at org.apache.jetspeed.container.invoker.ServletPortletInvoker.render(ServletPortletInvoker.java:125)
at org.apache.pluto.PortletContainerImpl.renderPortlet(PortletContainerImpl.java:119)
at org.apache.jetspeed.container.JetspeedPortletContainerWrapper.renderPortlet(JetspeedPortletContainerWrapper.java:120)
at org.apache.jetspeed.aggregator.impl.RenderingJobImpl.execute(RenderingJobImpl.java:120)
at org.apache.jetspeed.aggregator.impl.PortletRendererImpl.renderNow(PortletRendererImpl.java:110)
at org.apache.jetspeed.aggregator.impl.PageAggregatorImpl.aggregateAndRender(PageAggregatorImpl.java:199)
at org.apache.jetspeed.aggregator.impl.PageAggregatorImpl.aggregateAndRender(PageAggregatorImpl.java:182)
at org.apache.jetspeed.aggregator.impl.PageAggregatorImpl.build(PageAggregatorImpl.java:106)
at org.apache.jetspeed.aggregator.AggregatorValve.invoke(AggregatorValve.java:48)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.pipeline.valve.impl.ActionValveImpl.invoke(ActionValveImpl.java:132)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.container.ContainerValve.invoke(ContainerValve.java:76)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.decoration.DecorationValve.invoke(DecorationValve.java:100)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.profiler.impl.ProfilerValveImpl.invoke(ProfilerValveImpl.java:179)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.security.impl.LoginValidationValveImpl.invoke(LoginValidationValveImpl.java:143)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.security.impl.PasswordCredentialValveImpl.invoke(PasswordCredentialValveImpl.java:148)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.localization.impl.LocalizationValveImpl.invoke(LocalizationValveImpl.java:168)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.security.impl.AbstractSecurityValve$1.run(AbstractSecurityValve.java:117)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:437)
at org.apache.jetspeed.security.impl.AbstractSecurityValve.invoke(AbstractSecurityValve.java:111)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.container.url.impl.PortalURLValveImpl.invoke(PortalURLValveImpl.java:55)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.capabilities.impl.CapabilityValveImpl.invoke(CapabilityValveImpl.java:128)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invoke(JetspeedPipeline.java:185)
at org.apache.jetspeed.engine.JetspeedEngine.service(JetspeedEngine.java:231)
at org.apache.jetspeed.engine.JetspeedServlet.doGet(JetspeedServlet.java:226)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:534)

 All   Comments   Change History      Sort Order:
Rainer Hermanns - [17/Jul/06 10:50 AM ]
Nils, can you reproduce this behaviour?

Nils-Helge Garli - [18/Jul/06 01:38 AM ]
Not yet. Get some NPEs when testing with pluto.

Gunnar: Can you attach your jetspeed psml files?

Nils-Helge Garli - [18/Jul/06 02:06 AM ]
Managed to deploy them successfully on pluto now. Can't seem to reproduce this error in pluto. Maybe it's some sort of classloader issue. Will try to deploy to jetspeed once I get the psml files.

Nils-Helge Garli - [25/Jul/06 01:45 AM ]
This is what I get:

java.lang.ClassCastException: freemarker.ext.servlet.HttpRequestHashModel
        at com.opensymphony.webwork.views.freemarker.FreemarkerManager.buildScop
esHashModel(FreemarkerManager.java:152)
        at com.opensymphony.webwork.views.freemarker.FreemarkerManager.buildTemp
lateModel(FreemarkerManager.java:279)
        at com.opensymphony.webwork.components.template.FreemarkerTemplateEngine
.renderTemplate(FreemarkerTemplateEngine.java:98)
        at com.opensymphony.webwork.components.UIBean.mergeTemplate(UIBean.java:
637)
        at com.opensymphony.webwork.components.ClosingUIBean.start(ClosingUIBean
.java:43)
        at com.opensymphony.webwork.views.jsp.ComponentTagSupport.doStartTag(Com
ponentTagSupport.java:29)
        at org.apache.jsp.WEB_002dINF.pages.view.zeigeKanton_jsp._jspx_meth_ww_f
orm_0(org.apache.jsp.WEB_002dINF.pages.view.zeigeKanton_jsp:185)
        at org.apache.jsp.WEB_002dINF.pages.view.zeigeKanton_jsp._jspService(org
.apache.jsp.WEB_002dINF.pages.view.zeigeKanton_jsp:87)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper
.java:322)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3
14)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:173)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDisp
atcher.java:672)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationD
ispatcher.java:574)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDis
patcher.java:499)
        at org.apache.jetspeed.dispatcher.JetspeedRequestDispatcher.include(Jets
peedRequestDispatcher.java:72)
        at com.opensymphony.webwork.portlet.result.PortletResult$IncludeTemplate
.include(PortletResult.java:207)
        at com.opensymphony.webwork.portlet.result.PortletResult.executeRenderRe
sult(PortletResult.java:176)
        at com.opensymphony.webwork.portlet.result.PortletResult.doExecute(Portl
etResult.java:60)
        at com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebW
orkResultSupport.java:101)
        at com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultA
ctionInvocation.java:312)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionIn
vocation.java:207)
        at ch.zkb.module.filial_finder.portlet.interceptor.WebflowUeberwachungIn
terceptor.intercept(WebflowUeberwachungInterceptor.java:129)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionIn
vocation.java:189)
        at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.
java:113)
        at com.opensymphony.webwork.portlet.dispatcher.Jsr168Dispatcher.serviceA
ction(Jsr168Dispatcher.java:414)

Nils-Helge Garli - [25/Jul/06 06:21 AM ]
It seems to me that request attributes "leaks" between the two applications. When debugging the application, and checking which jar files the classes are loaded from, I get this output (when filialSuche.war portlet is in the first column, and the filialSucheFirmenKunden.war portlet is in the second column):

For filialSuche.war:

HttpRequestHashModel.class: jar:file:/C:/development/jetspeed2/temp/0-filialSuche/WEB-INF/lib/freemarker.jar!/freemarker/ext/servlet/HttpRequestHashModel.class
ATTR_REQUEST_MODEL request attribute: jar:file:/C:/development/jetspeed2/temp/0-filialSuche/WEB-INF/lib/freemarker.jar!/freemarker/ext/servlet/HttpRequestHashModel.class

For filialSucheFirmenKunde.war:

HttpRequestHashModel.class: jar:file:/C:/development/jetspeed2/temp/1-filialSucheFirmenKunden/WEB-INF/lib/freemarker.jar!/freemarker/ext/servlet/HttpRequestHashModel.class
ATTR_REQUEST_MODEL request attribute: jar:file:/C:/development/jetspeed2/temp/0-filialSuche/WEB-INF/lib/freemarker.jar!/freemarker/ext/servlet/HttpRequestHashModel.class (jar from the first web app)

Also, the first time the second portlet is requested, the ATTR_REQUEST_MODEL is not null as I would have expected, but contains the object placed there by the other portlet.

Is sharing of request attributes between applications allowed in the servlet spec?


Nils-Helge Garli - [25/Jul/06 06:30 AM ]
I guess a temp workaround for this issue is to put the freemarker.jar file in the server classpath, and remove it from the WEB-INF/lib folder of your applications.

Gunnar Rohde - [25/Jul/06 08:59 AM ]
Dear Nils,

thank you for your immediate support; good, that you could reproduce the issue;

I tried to follow your guess so far, but it is not possible to put the freemarker.jar in one of the following directories and get it work

Jetspeed_2.0\shared\lib
Jetspeed_2.0\common\lib
Jetspeed_2.0\webapps\jetspeed\WEB-INF\lib

the portlets simply do not find their way to the required library, which makes me wonder anyway.

Do you have another guess.

Regards

Gunnar

Nils-Helge Garli - [26/Jul/06 02:05 AM ]
Reported this as an issue in the Jetspeed2 JIRA. (https://issues.apache.org/jira/browse/JS2-563)

Rainer Hermanns - [09/Aug/06 10:42 AM ]
This looks like an issue with jetspeed....
Closing it here... follow up in Jetspeed for further information...
See linked issue above