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