@WebServices look up EJB's on every single http request (not only webservice 
requests)
--------------------------------------------------------------------------------------

                 Key: SEAMFACES-55
                 URL: https://jira.jboss.org/browse/SEAMFACES-55
             Project: Seam Faces
          Issue Type: Bug
          Components: CDI Integration
    Affects Versions: 3.0.0.Alpha3
         Environment: Glassfish 3.0.1 on Windows 7 64 bit, 32 bit jvm (1.6.0_20)
            Reporter: Anders Ã…berg


After splitting our application into frontend (JSF2) and backend (EJB3.1 
remote) modules running on different servers, performance in the application 
became horrible. Rendering an empty JSF page took about 3 seconds.

It turned out that because of 3 @WebService annotated beans with remote @EJB's 
injected, lots of traffic goes to the backend server on every http request (to 
JSF pages, css, js etc). We don't know exactly what this traffic is, but adding 
breakpoints in @PostConstruct methods in the webservices showed that they are 
not being instantiated.

After removing seam-faces the problems went away. And if we annotate the 
webservices with @Stateless they also went away. So we have a workaround, but 
would like to know if this issue could affect other areas as well. Performance 
is still sub par.

More info here:
http://seamframework.org/Community/SeamFaces300Alpha3WeirdButSeriousPerformanceIssue

I have created some webapps to reproduce the problems:
faces-server: webapp with a remote ejb EchoService
faces-client: webapp with an empty jsf page (meaning just plain text) and an 
EchoWebService that injects EchoService using @EJB
faces-client-seamfaces: identical to the one above but with 
seam-faces-3.0.0.Alpha3 in WEB-INF/lib. And different name obviously.

Steps to reproduce problem (on Glassfish 3.0.1 at least):
- Deploy faces-server first, and then both faces-client and 
faces-client-seamfaces. 
- Open /faces-client/empty.xhtml and /faces-client-seamfaces/empty.xhtml. 
Rendering the first one takes about 4-6ms, the second one takes 60-80ms.
- Undeploy faces-server and try to reload the pages. The first one still works, 
the second one gives an exception:

[#|2010-10-22T10:04:35.241+0200|WARNING|glassfish3.0.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=26;_ThreadName=Thread-1;|StandardWrapperValve[Faces
 Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.IllegalStateException: Could not wrap ExternalContext
        at 
org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:35)
        at 
com.sun.faces.context.InjectionExternalContextFactory.getExternalContext(InjectionExternalContextFactory.java:109)
        at 
com.sun.faces.context.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:93)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:302)
        at 
org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at 
com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at 
org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
        at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at 
com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at 
com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at 
com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at 
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at 
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at 
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at 
com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at 
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at 
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at 
com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at 
com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.IllegalStateException: Exception attempting to inject 
Remote ejb-ref name=EchoService,Remote 3.x interface 
=com.example.EchoService,ejb-link=null,lookup=null,mappedName=,jndi-name=com.example.EchoService,refType=Session
 into class org.jboss.seam.faces.environment.SeamExternalContext
        at 
org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:133)
        at 
org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:47)
        at 
org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1.work(ManagedBean.java:171)
        at 
org.jboss.weld.bean.ManagedBean$FixInjectionPoint.run(ManagedBean.java:142)
        at 
org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.inject(ManagedBean.java:165)
        at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:332)
        at 
org.jboss.weld.context.AbstractMapContext.get(AbstractMapContext.java:112)
        at 
org.jboss.weld.bean.proxy.ClientProxyMethodHandler.getProxiedInstance(ClientProxyMethodHandler.java:143)
        at 
org.jboss.weld.bean.proxy.ClientProxyMethodHandler.invoke(ClientProxyMethodHandler.java:100)
        at 
org.jboss.weld.util.CleanableMethodHandler.invoke(CleanableMethodHandler.java:43)
        at 
org.jboss.seam.faces.environment.SeamExternalContext_$$_javassist_21.setWrapped(SeamExternalContext_$$_javassist_21.java)
        at 
org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:29)
        ... 27 more
Caused by: com.sun.enterprise.container.common.spi.util.InjectionException: 
Exception attempting to inject Remote ejb-ref name=EchoService,Remote 3.x 
interface 
=com.example.EchoService,ejb-link=null,lookup=null,mappedName=,jndi-name=com.example.EchoService,refType=Session
 into class org.jboss.seam.faces.environment.SeamExternalContext
        at 
com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:614)
        at 
com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:384)
        at 
com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:168)
        at 
org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:126)
        ... 38 more
Caused by: javax.naming.NamingException: Lookup failed for 
'java:comp/env/EchoService' in SerialContext  [Root exception is 
javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref 
name=EchoService,Remote 3.x interface 
=com.example.EchoService,ejb-link=null,lookup=null,mappedName=,jndi-name=com.example.EchoService,refType=Session'
 .  Actual (possibly internal) Remote JNDI name used for lookup is 
'com.example.EchoService#com.example.EchoService' [Root exception is 
javax.naming.NamingException: Lookup failed for 
'com.example.EchoService#com.example.EchoService' in SerialContext  [Root 
exception is javax.naming.NameNotFoundException: 
com.example.EchoService#com.example.EchoService not found]]]
        at 
com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at 
com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:513)
        ... 41 more
Caused by: javax.naming.NamingException: Exception resolving Ejb for 'Remote 
ejb-ref name=EchoService,Remote 3.x interface 
=com.example.EchoService,ejb-link=null,lookup=null,mappedName=,jndi-name=com.example.EchoService,refType=Session'
 .  Actual (possibly internal) Remote JNDI name used for lookup is 
'com.example.EchoService#com.example.EchoService' [Root exception is 
javax.naming.NamingException: Lookup failed for 
'com.example.EchoService#com.example.EchoService' in SerialContext  [Root 
exception is javax.naming.NameNotFoundException: 
com.example.EchoService#com.example.EchoService not found]]
        at 
com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:174)
        at 
com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl$EjbReferenceProxy.create(ComponentEnvManagerImpl.java:1040)
        at 
com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:688)
        at 
com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:657)
        at 
com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:148)
        at 
com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:428)
        ... 43 more
Caused by: javax.naming.NamingException: Lookup failed for 
'com.example.EchoService#com.example.EchoService' in SerialContext  [Root 
exception is javax.naming.NameNotFoundException: 
com.example.EchoService#com.example.EchoService not found]
        at 
com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at 
com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:169)
        ... 48 more
Caused by: javax.naming.NameNotFoundException: 
com.example.EchoService#com.example.EchoService not found
        at 
com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:197)
        at 
com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:168)
        at 
com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:58)
        at 
com.sun.enterprise.naming.impl.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:101)
        at 
com.sun.enterprise.naming.interprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
        ... 50 more
|#]

[#|2010-10-22T10:04:35.241+0200|WARNING|glassfish3.0.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=26;_ThreadName=http-thread-pool-18080-(1);|StandardWrapperValve[Faces
 Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.IllegalStateException: Could not wrap ExternalContext
        at 
org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:35)
        at 
com.sun.faces.context.InjectionExternalContextFactory.getExternalContext(InjectionExternalContextFactory.java:109)
        at 
com.sun.faces.context.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:93)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:302)
        at 
org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at 
com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at 
org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
        at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at 
com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at 
com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at 
com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at 
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at 
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at 
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at 
com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at 
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at 
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at 
com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at 
com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.IllegalStateException: Exception attempting to inject 
Remote ejb-ref name=EchoService,Remote 3.x interface 
=com.example.EchoService,ejb-link=null,lookup=null,mappedName=,jndi-name=com.example.EchoService,refType=Session
 into class org.jboss.seam.faces.environment.SeamExternalContext
        at 
org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:133)
        at 
org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:47)
        at 
org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1.work(ManagedBean.java:171)
        at 
org.jboss.weld.bean.ManagedBean$FixInjectionPoint.run(ManagedBean.java:142)
        at 
org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.inject(ManagedBean.java:165)
        at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:332)
        at 
org.jboss.weld.context.AbstractMapContext.get(AbstractMapContext.java:112)
        at 
org.jboss.weld.bean.proxy.ClientProxyMethodHandler.getProxiedInstance(ClientProxyMethodHandler.java:143)
        at 
org.jboss.weld.bean.proxy.ClientProxyMethodHandler.invoke(ClientProxyMethodHandler.java:100)
        at 
org.jboss.weld.util.CleanableMethodHandler.invoke(CleanableMethodHandler.java:43)
        at 
org.jboss.seam.faces.environment.SeamExternalContext_$$_javassist_21.setWrapped(SeamExternalContext_$$_javassist_21.java)
        at 
org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:29)
        ... 27 more
Caused by: com.sun.enterprise.container.common.spi.util.InjectionException: 
Exception attempting to inject Remote ejb-ref name=EchoService,Remote 3.x 
interface 
=com.example.EchoService,ejb-link=null,lookup=null,mappedName=,jndi-name=com.example.EchoService,refType=Session
 into class org.jboss.seam.faces.environment.SeamExternalContext
        at 
com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:614)
        at 
com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:384)
        at 
com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:168)
        at 
org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:126)
        ... 38 more
Caused by: javax.naming.NamingException: Lookup failed for 
'java:comp/env/EchoService' in SerialContext  [Root exception is 
javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref 
name=EchoService,Remote 3.x interface 
=com.example.EchoService,ejb-link=null,lookup=null,mappedName=,jndi-name=com.example.EchoService,refType=Session'
 .  Actual (possibly internal) Remote JNDI name used for lookup is 
'com.example.EchoService#com.example.EchoService' [Root exception is 
javax.naming.NamingException: Lookup failed for 
'com.example.EchoService#com.example.EchoService' in SerialContext  [Root 
exception is javax.naming.NameNotFoundException: 
com.example.EchoService#com.example.EchoService not found]]]
        at 
com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at 
com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:513)
        ... 41 more
Caused by: javax.naming.NamingException: Exception resolving Ejb for 'Remote 
ejb-ref name=EchoService,Remote 3.x interface 
=com.example.EchoService,ejb-link=null,lookup=null,mappedName=,jndi-name=com.example.EchoService,refType=Session'
 .  Actual (possibly internal) Remote JNDI name used for lookup is 
'com.example.EchoService#com.example.EchoService' [Root exception is 
javax.naming.NamingException: Lookup failed for 
'com.example.EchoService#com.example.EchoService' in SerialContext  [Root 
exception is javax.naming.NameNotFoundException: 
com.example.EchoService#com.example.EchoService not found]]
        at 
com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:174)
        at 
com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl$EjbReferenceProxy.create(ComponentEnvManagerImpl.java:1040)
        at 
com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:688)
        at 
com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:657)
        at 
com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:148)
        at 
com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:428)
        ... 43 more
Caused by: javax.naming.NamingException: Lookup failed for 
'com.example.EchoService#com.example.EchoService' in SerialContext  [Root 
exception is javax.naming.NameNotFoundException: 
com.example.EchoService#com.example.EchoService not found]
        at 
com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at 
com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:169)
        ... 48 more
Caused by: javax.naming.NameNotFoundException: 
com.example.EchoService#com.example.EchoService not found
        at 
com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:197)
        at 
com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:168)
        at 
com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:58)
        at 
com.sun.enterprise.naming.impl.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:101)
        at 
com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
        ... 50 more
|#]

mpl.SerialContext.lookup(SerialContext.java:430)
        ... 50 more
|#]





-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

_______________________________________________
seam-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/seam-issues

Reply via email to