You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Stephan Frai <fa...@online.de> on 2008/04/02 10:18:30 UTC
[Orchestra] Mixed evironment installation problem - Complete Mail
Hi,
we`ve integrated Orchestra successfully into our MyFaces application.
But now we`re additionally using plain servlets in some parts of our
application.
Inside the servelts we`re checking out the beans from spring like that:
ApplicationContext appContext =
WebApplicationContextUtils.getWebApplicationContext(getServletContext());
PwdForgottenJSF pwdForgottenBean = (PwdForgottenJSF)
appContext.getBean("pwdForgottenJSF");
The bean "pwdForgottenJSF" is access-scoped.
Whenever we try to check out an "access"-scoped bean from spring, we`re
getting the following stack trace:
SCHWERWIEGEND: Servlet.service() for servlet ControllerServlet threw
exception
java.lang.IllegalArgumentException: No AccessScopeManager found. Probably
you forgot to add <import
resource="classpath*:/META-INF/spring-orchestra-init.xml" /> to your spring
configuration.
at
org.apache.myfaces.orchestra.conversation.AccessScopeManager.getInstance(Acc
essScopeManager.java:97)
at
org.apache.myfaces.orchestra.conversation.ConversationAccessLifetimeAspect.m
arkAsAccessed(ConversationAccessLifetimeAspect.java:35)
at
org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope.not
ifyAccessConversation(SpringConversationScope.java:194)
at
org.apache.myfaces.orchestra.conversation.spring.AbstractSpringOrchestraScop
e.getRealBean(AbstractSpringOrchestraScope.java:333)
at
org.apache.myfaces.orchestra.conversation.spring.ScopedBeanTargetSource.getT
arget(ScopedBeanTargetSource.java:71)
at
org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.g
etTarget(Cglib2AopProxy.java:659)
at
org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.i
ntercept(Cglib2AopProxy.java:609)
at
com.playoli.login.jsf.PwdForgottenJSF$$EnhancerByCGLIB$$900c1c04.setId(<gene
rated>)
at com.playoli.servlet.URLController.doGet(URLController.java:89)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
at
org.apache.myfaces.orchestra.requestParameterProvider.RequestParameterServle
tFilter.doFilter(RequestParameterServletFilter.java:63)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
at
org.apache.myfaces.orchestra.frameworkAdapter.basic.BasicFrameworkAdapterFil
ter.doFilter(BasicFrameworkAdapterFilter.java:66)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
at
org.acegisecurity.securechannel.ChannelProcessingFilter.doFilter(ChannelProc
essingFilter.java:138)
at
org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:175)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128
)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102
)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http
11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Our configuration fort the servlet looks like that:
<servlet>
<servlet-name>ControllerServlet</servlet-name>
<servlet-class>com.playoli.servlet.URLController</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ControllerServlet</servlet-name>
<url-pattern>/Controlled</url-pattern>
</servlet-mapping>
<filter>
<filter-name>requestParameterFilter</filter-name>
<filter-class>org.apache.myfaces.orchestra.requestParameterProvider.RequestP
arameterServletFilter</filter-class>
</filter>
<filter>
<filter-name>basicFrameworkAdapterFilter</filter-name>
<filter-class>org.apache.myfaces.orchestra.frameworkAdapter.basic.BasicFrame
workAdapterFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requestParameterFilter</filter-name>
<url-pattern>/Controlled/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>basicFrameworkAdapterFilter</filter-name>
<url-pattern>/Controlled/*</url-pattern>
</filter-mapping>
The spring-orchestra-init.xml is loaded, because in Jsf context orchestra
works:
<beans>
<import resource="spring-base-config.xml"/>
<import resource="spring_acegi_config.xml"/>
<import resource="classpath*:/META-INF/spring-orchestra-init.xml"/>
...
Any ideas?
Regards,
Stephan
AW: [Orchestra] Mixed evironment installation problem - Solution
Posted by Stephan Frai <fa...@online.de>.
Hi Simon,
thanks for your work around.
I`ve just added these lines to the servlet code:
ApplicationContext appContext =
WebApplicationContextUtils.getWebApplicationContext(getServletContext());
Object accessScopeMgr=
appContext.getBean("org.apache.myfaces.orchestra.conversation.AccessScopeMan
ager");
request.setAttribute("org.apache.myfaces.orchestra.conversation.AccessScopeM
anager", accessScopeMgr);
PwdForgottenJSF pwdForgottenBean = (PwdForgottenJSF)
appContext.getBean("pwdForgottenJSF");
It works now.
I have not tried Mario`s solution yet.
Thanks,
Stephan
-----Ursprüngliche Nachricht-----
Von: simon.kitching@chello.at [mailto:simon.kitching@chello.at]
Gesendet: Mittwoch, 2. April 2008 10:51
An: MyFaces Discussion
Betreff: Re: [Orchestra] Mixed evironment installation problem - Complete
Mail
Hi Stephan,
Stephan Frai schrieb:
>
> Hi,
>
> we`ve integrated Orchestra successfully into our MyFaces application.
>
> But now we`re additionally using plain servlets in some parts of our
> application.
>
> Inside the servelts we`re checking out the beans from spring like that:
>
> ApplicationContext appContext =
> WebApplicationContextUtils.getWebApplicationContext(getServletContext());
>
> PwdForgottenJSF pwdForgottenBean = (PwdForgottenJSF)
> appContext.getBean("pwdForgottenJSF");
>
> The bean pwdForgottenJSF is access-scoped.
>
> Whenever we try to check out an access-scoped bean from spring,
> we`re getting the following stack trace:
>
> SCHWERWIEGEND: Servlet.service() for servlet ControllerServlet threw
> exception
>
> java.lang.IllegalArgumentException: No AccessScopeManager found.
> Probably you forgot to add <import
> resource="classpath*:/META-INF/spring-orchestra-init.xml" /> to your
> spring configuration.
>
> at
>
org.apache.myfaces.orchestra.conversation.AccessScopeManager.getInstance(Acc
essScopeManager.java:97)
>
> at
>
org.apache.myfaces.orchestra.conversation.ConversationAccessLifetimeAspect.m
arkAsAccessed(ConversationAccessLifetimeAspect.java:35)
>
> at
>
org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope.not
ifyAccessConversation(SpringConversationScope.java:194)
>
> at
>
org.apache.myfaces.orchestra.conversation.spring.AbstractSpringOrchestraScop
e.getRealBean(AbstractSpringOrchestraScope.java:333)
>
> at
>
org.apache.myfaces.orchestra.conversation.spring.ScopedBeanTargetSource.getT
arget(ScopedBeanTargetSource.java:71)
>
> at
>
org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.g
etTarget(Cglib2AopProxy.java:659)
>
> at
>
org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.i
ntercept(Cglib2AopProxy.java:609)
>
> at
>
com.playoli.login.jsf.PwdForgottenJSF$$EnhancerByCGLIB$$900c1c04.setId(<gene
rated>)
>
> at com.playoli.servlet.URLController.doGet(URLController.java:89)
>
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
>
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>
> at
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:290)
>
> at
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
>
> at
>
org.apache.myfaces.orchestra.requestParameterProvider.RequestParameterServle
tFilter.doFilter(RequestParameterServletFilter.java:63)
>
> at
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:235)
>
> at
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
>
> at
>
org.apache.myfaces.orchestra.frameworkAdapter.basic.BasicFrameworkAdapterFil
ter.doFilter(BasicFrameworkAdapterFilter.java:66)
>
> at
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:235)
>
> at
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
>
> at
>
org.acegisecurity.securechannel.ChannelProcessingFilter.doFilter(ChannelProc
essingFilter.java:138)
>
> at
>
org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
>
> at
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:235)
>
> at
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
>
> at
>
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:233)
>
> at
>
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:175)
>
> at
>
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128
)
>
> at
>
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102
)
>
> at
>
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:109)
>
> at
>
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
>
> at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>
> at
>
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http
11Protocol.java:584)
>
> at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>
> at java.lang.Thread.run(Unknown Source)
>
> Our configuration fort the servlet looks like that:
>
> <servlet>
>
> <servlet-name>ControllerServlet</servlet-name>
>
> <servlet-class>com.playoli.servlet.URLController</servlet-class>
>
> <load-on-startup>0</load-on-startup>
>
> </servlet>
>
> <servlet-mapping>
>
> <servlet-name>ControllerServlet</servlet-name>
>
> <url-pattern>/Controlled</url-pattern>
>
> </servlet-mapping>
>
> <filter>
>
> <filter-name>requestParameterFilter</filter-name>
>
>
<filter-class>org.apache.myfaces.orchestra.requestParameterProvider.RequestP
arameterServletFilter</filter-class>
>
> </filter>
>
> <filter>
>
> <filter-name>basicFrameworkAdapterFilter</filter-name>
>
>
<filter-class>org.apache.myfaces.orchestra.frameworkAdapter.basic.BasicFrame
workAdapterFilter</filter-class>
>
> </filter>
>
> <filter-mapping>
>
> <filter-name>requestParameterFilter</filter-name>
>
> <url-pattern>/Controlled/*</url-pattern>
>
> </filter-mapping>
>
> <filter-mapping>
>
> <filter-name>basicFrameworkAdapterFilter</filter-name>
>
> <url-pattern>/Controlled/*</url-pattern>
>
> </filter-mapping>
>
> The spring-orchestra-init.xml is loaded, because in Jsf context
> orchestra works:
>
> <beans>
>
> <import resource="spring-base-config.xml"/>
>
> <import resource="spring_acegi_config.xml"/>
>
> <import resource="classpath*:/META-INF/spring-orchestra-init.xml"/>
>
> ...
>
> Any ideas?
>
Hmm. In this case, the lookup is being done via the
BasicFrameworkAdapterFilter. And the problem is that the
BasicFrameworkAdapter doesn't know anything about Spring; it only looks
for beans in the standard request,session,application scopes. So it
cannot find the mandatory AccessScopeManager object.
I think that a workaround would be for your servlet to explicitly fetch
the bean "org.apache.myfaces.orchestra.conversation.AccessScopeManager"
from spring, and then store it using that same key in the request scope.
Then when AccessScopeManager.getInstance calls FrameworkAdapter.getBean,
the necessary object will be found.
However Orchestra does need a proper solution for this. I've created the
following JIRA issue to track it:
http://issues.apache.org/jira/browse/ORCHESTRA-18
Regards,
Simon
Re: [Orchestra] Mixed evironment installation problem - Complete
Mail
Posted by Mario Ivankovits <ma...@ops.co.at>.
Hi!
> However Orchestra does need a proper solution for this. I've created the
> following JIRA issue to track it:
> http://issues.apache.org/jira/browse/ORCHESTRA-18
>
Yes! What about creating a BasicSpringFrameworkAdapter which uses the
same "trick"
ApplicationContext appContext =
WebApplicationContextUtils.getWebApplicationContext(getServletContext());
return appContext.getBean("pwdForgottenJSF");
to lookup the beans in its getBean() function.
Ciao,
Mario
Re: [Orchestra] Mixed evironment installation problem - Complete
Mail
Posted by "simon.kitching@chello.at" <si...@chello.at>.
Hi Stephan,
Stephan Frai schrieb:
>
> Hi,
>
> we`ve integrated Orchestra successfully into our MyFaces application.
>
> But now we`re additionally using plain servlets in some parts of our
> application.
>
> Inside the servelts we`re checking out the beans from spring like that:
>
> ApplicationContext appContext =
> WebApplicationContextUtils.getWebApplicationContext(getServletContext());
>
> PwdForgottenJSF pwdForgottenBean = (PwdForgottenJSF)
> appContext.getBean("pwdForgottenJSF");
>
> The bean „pwdForgottenJSF“ is access-scoped.
>
> Whenever we try to check out an „access“-scoped bean from spring,
> we`re getting the following stack trace:
>
> SCHWERWIEGEND: Servlet.service() for servlet ControllerServlet threw
> exception
>
> java.lang.IllegalArgumentException: No AccessScopeManager found.
> Probably you forgot to add <import
> resource="classpath*:/META-INF/spring-orchestra-init.xml" /> to your
> spring configuration.
>
> at
> org.apache.myfaces.orchestra.conversation.AccessScopeManager.getInstance(AccessScopeManager.java:97)
>
> at
> org.apache.myfaces.orchestra.conversation.ConversationAccessLifetimeAspect.markAsAccessed(ConversationAccessLifetimeAspect.java:35)
>
> at
> org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope.notifyAccessConversation(SpringConversationScope.java:194)
>
> at
> org.apache.myfaces.orchestra.conversation.spring.AbstractSpringOrchestraScope.getRealBean(AbstractSpringOrchestraScope.java:333)
>
> at
> org.apache.myfaces.orchestra.conversation.spring.ScopedBeanTargetSource.getTarget(ScopedBeanTargetSource.java:71)
>
> at
> org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.getTarget(Cglib2AopProxy.java:659)
>
> at
> org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:609)
>
> at
> com.playoli.login.jsf.PwdForgottenJSF$$EnhancerByCGLIB$$900c1c04.setId(<generated>)
>
> at com.playoli.servlet.URLController.doGet(URLController.java:89)
>
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
>
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>
> at
> org.apache.myfaces.orchestra.requestParameterProvider.RequestParameterServletFilter.doFilter(RequestParameterServletFilter.java:63)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>
> at
> org.apache.myfaces.orchestra.frameworkAdapter.basic.BasicFrameworkAdapterFilter.doFilter(BasicFrameworkAdapterFilter.java:66)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>
> at
> org.acegisecurity.securechannel.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:138)
>
> at
> org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
>
> at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>
> at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
>
> at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>
> at java.lang.Thread.run(Unknown Source)
>
> Our configuration fort the servlet looks like that:
>
> <servlet>
>
> <servlet-name>ControllerServlet</servlet-name>
>
> <servlet-class>com.playoli.servlet.URLController</servlet-class>
>
> <load-on-startup>0</load-on-startup>
>
> </servlet>
>
> <servlet-mapping>
>
> <servlet-name>ControllerServlet</servlet-name>
>
> <url-pattern>/Controlled</url-pattern>
>
> </servlet-mapping>
>
> <filter>
>
> <filter-name>requestParameterFilter</filter-name>
>
> <filter-class>org.apache.myfaces.orchestra.requestParameterProvider.RequestParameterServletFilter</filter-class>
>
> </filter>
>
> <filter>
>
> <filter-name>basicFrameworkAdapterFilter</filter-name>
>
> <filter-class>org.apache.myfaces.orchestra.frameworkAdapter.basic.BasicFrameworkAdapterFilter</filter-class>
>
> </filter>
>
> <filter-mapping>
>
> <filter-name>requestParameterFilter</filter-name>
>
> <url-pattern>/Controlled/*</url-pattern>
>
> </filter-mapping>
>
> <filter-mapping>
>
> <filter-name>basicFrameworkAdapterFilter</filter-name>
>
> <url-pattern>/Controlled/*</url-pattern>
>
> </filter-mapping>
>
> The spring-orchestra-init.xml is loaded, because in Jsf context
> orchestra works:
>
> <beans>
>
> <import resource="spring-base-config.xml"/>
>
> <import resource="spring_acegi_config.xml"/>
>
> <import resource="classpath*:/META-INF/spring-orchestra-init.xml"/>
>
> ...
>
> Any ideas?
>
Hmm. In this case, the lookup is being done via the
BasicFrameworkAdapterFilter. And the problem is that the
BasicFrameworkAdapter doesn't know anything about Spring; it only looks
for beans in the standard request,session,application scopes. So it
cannot find the mandatory AccessScopeManager object.
I think that a workaround would be for your servlet to explicitly fetch
the bean "org.apache.myfaces.orchestra.conversation.AccessScopeManager"
from spring, and then store it using that same key in the request scope.
Then when AccessScopeManager.getInstance calls FrameworkAdapter.getBean,
the necessary object will be found.
However Orchestra does need a proper solution for this. I've created the
following JIRA issue to track it:
http://issues.apache.org/jira/browse/ORCHESTRA-18
Regards,
Simon
Re: [Orchestra] Mixed evironment installation problem - Complete
Mail
Posted by Mario Ivankovits <ma...@ops.co.at>.
Hi!
I've committed a SpringBasicFrameworkAdapter, could you please give it a
try and see if it works now.
At the moment the flash scoped beans are not released after the JSP
request! We will have a look how to fix that, but that should not be a
major problem for now.
Thanks!
Ciao,
Mario