[seam-issues] [JBoss JIRA] Created: (SEAMFACES-55) @WebServices look up EJB's on every single http request (not only webservice requests)

Anders Ã…berg (JIRA) jira-events at lists.jboss.org
Fri Oct 22 05:03:55 EDT 2010


@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

       



More information about the seam-issues mailing list