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