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 15:33:58 UTC
AW: [Orchestra] Mixed evironment installation problem - Solution
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