GrantGochnauer
Feb 7th, 2006, 12:14 PM
I have been having some problems using some Spring Services I have developed for Jetspeed2 in my portlets which are also using Spring.. I am using 2.0M2.
For example, Jetspeed2 is exposing a UserManager bean which I have written to its portlets by adding the bean to the portal context..
So in my portlet view controller, I can say something like:
vmgr = (VodoriUserManager) getPortletContext().getAttribute(VodoriCommonPortl etServices.VODORI_USER_MANAGER);
I am able to retrieve Jetspeed2 spring based services fine in my portlet using the same code above but for some reason, I am getting the following stack trace and I think it might be a Spring issue.
2006-02-07 11:05:19,406 WARN [org.springframework.web.portlet.DispatcherPortlet] - Handler execution resulted in exception - forwarding to r
esolved error view
java.lang.ClassCastException: $Proxy8
at com.vodori.bluebird.web.component.user.VodoriUserR egistrationViewController.handleRenderRequestInter nal(VodoriUserRegistrationVie
wController.java:52)
at org.springframework.web.portlet.mvc.AbstractContro ller.handleRenderRequest(AbstractController.java:2 04)
at org.springframework.web.portlet.mvc.SimpleControll erHandlerAdapter.handleRender(SimpleControllerHand lerAdapter.java:46)
at org.springframework.web.portlet.DispatcherPortlet. doRenderService(DispatcherPortlet.java:699)
at org.springframework.web.portlet.FrameworkPortlet.p rocessRequest(FrameworkPortlet.java:420)
at org.springframework.web.portlet.FrameworkPortlet.d oDispatch(FrameworkPortlet.java:391)
at javax.portlet.GenericPortlet.render(GenericPortlet .java:175)
at org.apache.jetspeed.factory.JetspeedPortletInstanc e.render(JetspeedPortletInstance.java:102)
at org.apache.jetspeed.container.JetspeedContainerSer vlet.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.in ternalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.inv oke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.doI nclude(ApplicationDispatcher.java:574)
at org.apache.catalina.core.ApplicationDispatcher.inc lude(ApplicationDispatcher.java:499)
at org.apache.jetspeed.container.invoker.ServletPortl etInvoker.invoke(ServletPortletInvoker.java:213)
at org.apache.jetspeed.container.invoker.ServletPortl etInvoker.render(ServletPortletInvoker.java:125)
at org.apache.pluto.PortletContainerImpl.renderPortle t(PortletContainerImpl.java:119)
at org.apache.jetspeed.container.JetspeedPortletConta inerWrapper.renderPortlet(JetspeedPortletContainer Wrapper.java:120)
at org.apache.jetspeed.aggregator.impl.RenderingJobIm pl.execute(RenderingJobImpl.java:120)
at org.apache.jetspeed.aggregator.impl.PortletRendere rImpl.renderNow(PortletRendererImpl.java:110)
at org.apache.jetspeed.aggregator.impl.PageAggregator Impl.aggregateAndRender(PageAggregatorImpl.java:19 9)
at org.apache.jetspeed.aggregator.impl.PageAggregator Impl.aggregateAndRender(PageAggregatorImpl.java:18 2)
at org.apache.jetspeed.aggregator.impl.PageAggregator Impl.build(PageAggregatorImpl.java:106)
at org.apache.jetspeed.aggregator.AggregatorValve.inv oke(AggregatorValve.java:48)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invo keNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.pipeline.valve.impl.ActionValv eImpl.invoke(ActionValveImpl.java:132)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invo keNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.container.ContainerValve.invok e(ContainerValve.java:76)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invo keNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.decoration.DecorationValve.inv oke(DecorationValve.java:100)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invo keNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.profiler.impl.ProfilerValveImp l.invoke(ProfilerValveImpl.java:179)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invo keNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.security.impl.LoginValidationV alveImpl.invoke(LoginValidationValveImpl.java:143)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invo keNext(JetspeedPipeline.java:203)
My first thought is that when I cast my service to "VodoriUserManager" it thinks that the actual service is of type "org.springframework.transaction.interceptor.Transa ctionProxyFactoryBean" and not of my interface.
The code for my service which is exposed is:
<bean id="vodoriUserManagerTarget"
class="com.vodori.bluebird.component.user.service.impl.Vo doriUserManagerImpl">
<property name="userDAO">
<ref local="userDAO"/>
</property>
<property name="userManager" ref="org.apache.jetspeed.security.UserManager"/>
<property name="securityAccess" ref="org.apache.jetspeed.security.spi.SecurityAccess"/>
</bean>
<bean id="vodori.vodoriUserManager" class="org.springframework.transaction.interceptor.Transa ctionProxyFactoryBean">
<property name="transactionManager">
<ref local="vodoriTransactionManager"/>
</property>
<property name="target">
<ref local="vodoriUserManagerTarget"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
Does anyone see anything I might be missing? Jetspeed2 is based on Spring as well and basically allows you to put bean definitions in the portlet context so that your portlets can use services which live at the portal level..
Thanks in advance to anyone who can help out,
Grant
For example, Jetspeed2 is exposing a UserManager bean which I have written to its portlets by adding the bean to the portal context..
So in my portlet view controller, I can say something like:
vmgr = (VodoriUserManager) getPortletContext().getAttribute(VodoriCommonPortl etServices.VODORI_USER_MANAGER);
I am able to retrieve Jetspeed2 spring based services fine in my portlet using the same code above but for some reason, I am getting the following stack trace and I think it might be a Spring issue.
2006-02-07 11:05:19,406 WARN [org.springframework.web.portlet.DispatcherPortlet] - Handler execution resulted in exception - forwarding to r
esolved error view
java.lang.ClassCastException: $Proxy8
at com.vodori.bluebird.web.component.user.VodoriUserR egistrationViewController.handleRenderRequestInter nal(VodoriUserRegistrationVie
wController.java:52)
at org.springframework.web.portlet.mvc.AbstractContro ller.handleRenderRequest(AbstractController.java:2 04)
at org.springframework.web.portlet.mvc.SimpleControll erHandlerAdapter.handleRender(SimpleControllerHand lerAdapter.java:46)
at org.springframework.web.portlet.DispatcherPortlet. doRenderService(DispatcherPortlet.java:699)
at org.springframework.web.portlet.FrameworkPortlet.p rocessRequest(FrameworkPortlet.java:420)
at org.springframework.web.portlet.FrameworkPortlet.d oDispatch(FrameworkPortlet.java:391)
at javax.portlet.GenericPortlet.render(GenericPortlet .java:175)
at org.apache.jetspeed.factory.JetspeedPortletInstanc e.render(JetspeedPortletInstance.java:102)
at org.apache.jetspeed.container.JetspeedContainerSer vlet.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.in ternalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.inv oke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.doI nclude(ApplicationDispatcher.java:574)
at org.apache.catalina.core.ApplicationDispatcher.inc lude(ApplicationDispatcher.java:499)
at org.apache.jetspeed.container.invoker.ServletPortl etInvoker.invoke(ServletPortletInvoker.java:213)
at org.apache.jetspeed.container.invoker.ServletPortl etInvoker.render(ServletPortletInvoker.java:125)
at org.apache.pluto.PortletContainerImpl.renderPortle t(PortletContainerImpl.java:119)
at org.apache.jetspeed.container.JetspeedPortletConta inerWrapper.renderPortlet(JetspeedPortletContainer Wrapper.java:120)
at org.apache.jetspeed.aggregator.impl.RenderingJobIm pl.execute(RenderingJobImpl.java:120)
at org.apache.jetspeed.aggregator.impl.PortletRendere rImpl.renderNow(PortletRendererImpl.java:110)
at org.apache.jetspeed.aggregator.impl.PageAggregator Impl.aggregateAndRender(PageAggregatorImpl.java:19 9)
at org.apache.jetspeed.aggregator.impl.PageAggregator Impl.aggregateAndRender(PageAggregatorImpl.java:18 2)
at org.apache.jetspeed.aggregator.impl.PageAggregator Impl.build(PageAggregatorImpl.java:106)
at org.apache.jetspeed.aggregator.AggregatorValve.inv oke(AggregatorValve.java:48)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invo keNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.pipeline.valve.impl.ActionValv eImpl.invoke(ActionValveImpl.java:132)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invo keNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.container.ContainerValve.invok e(ContainerValve.java:76)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invo keNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.decoration.DecorationValve.inv oke(DecorationValve.java:100)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invo keNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.profiler.impl.ProfilerValveImp l.invoke(ProfilerValveImpl.java:179)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invo keNext(JetspeedPipeline.java:203)
at org.apache.jetspeed.security.impl.LoginValidationV alveImpl.invoke(LoginValidationValveImpl.java:143)
at org.apache.jetspeed.pipeline.JetspeedPipeline.invo keNext(JetspeedPipeline.java:203)
My first thought is that when I cast my service to "VodoriUserManager" it thinks that the actual service is of type "org.springframework.transaction.interceptor.Transa ctionProxyFactoryBean" and not of my interface.
The code for my service which is exposed is:
<bean id="vodoriUserManagerTarget"
class="com.vodori.bluebird.component.user.service.impl.Vo doriUserManagerImpl">
<property name="userDAO">
<ref local="userDAO"/>
</property>
<property name="userManager" ref="org.apache.jetspeed.security.UserManager"/>
<property name="securityAccess" ref="org.apache.jetspeed.security.spi.SecurityAccess"/>
</bean>
<bean id="vodori.vodoriUserManager" class="org.springframework.transaction.interceptor.Transa ctionProxyFactoryBean">
<property name="transactionManager">
<ref local="vodoriTransactionManager"/>
</property>
<property name="target">
<ref local="vodoriUserManagerTarget"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
Does anyone see anything I might be missing? Jetspeed2 is based on Spring as well and basically allows you to put bean definitions in the portlet context so that your portlets can use services which live at the portal level..
Thanks in advance to anyone who can help out,
Grant