[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