users@glassfish.java.net

Re: CDI broken between EJB and JPA modules

From: <glassfish_at_javadesktop.org>
Date: Thu, 08 Apr 2010 17:22:59 PDT

> Don't call JPA.jar a module. There are only four
> module types in Java
> EE: ejb, web, appclient and rar. JPA.jar is a library
> jar, so if you
> place it in lib directory of ear file, things should
> work as well.

My bad. Yes, the JPA jar is a utility jar, not a JEE module.

However, when I separate the JPA.jar and EJB.jar, I can't find any way to package them in the EAR such that CDI will not break.

I've attached two more sample EARs. Here are the results I'm seeing for each:

[b]App with JPA in EAR Root.ear[/b]

- Deployment fails, as follows:

Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Injection point has unsatisfied dependencies. Injection point: field sample.service.UserService.userDao; Qualifiers: [@javax.enterprise.inject.Default()]
        at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:276)
        at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:122)
        at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:141)
        at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:331)
        at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:317)
        at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:399)
        at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:178)
        ... 65 more

[b]App with JPA in EAR Lib.ear[/b]

- Deployment succeeds, but in Admin Console > Applications, the Engines column shows only "[ejb, webservices, weld]" (note lack of "jpa")

- Running fails, as follows:

SEVERE: EJB5070: Exception creating stateless session bean : [UserService]
SEVERE: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
        at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:449)
        at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2434)
        at com.sun.ejb.containers.WebServiceInvocationHandler.invoke(WebServiceInvocationHandler.java:175)
        at $Proxy255.loginByGuid(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.glassfish.webservices.InvokerImpl.invoke(InvokerImpl.java:78)
        at org.glassfish.webservices.EjbInvokerImpl.invoke(EjbInvokerImpl.java:78)
        at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146)
        at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257)
        at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:95)
        at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)
        at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588)
        at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)
        at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470)
        at com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112)
        at org.glassfish.webservices.MonitoringPipe.process(MonitoringPipe.java:138)
        at com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)
        at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)
        at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588)
        at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)
        at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470)
        at com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112)
        at com.sun.xml.ws.tx.service.TxServerPipe.process(TxServerPipe.java:306)
        at com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)
        at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)
        at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588)
        at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)
        at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470)
        at com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112)
        at com.sun.enterprise.security.webservices.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:195)
        at com.sun.enterprise.security.webservices.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:127)
        at com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)
        at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)
        at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588)
        at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)
        at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470)
        at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:295)
        at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:515)
        at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:285)
        at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:143)
        at org.glassfish.webservices.Ejb3MessageDispatcher.handlePost(Ejb3MessageDispatcher.java:116)
        at org.glassfish.webservices.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87)
        at org.glassfish.webservices.EjbWebServiceServlet.dispatchToEjbEndpoint(EjbWebServiceServlet.java:196)
        at org.glassfish.webservices.EjbWebServiceServlet.service(EjbWebServiceServlet.java:127)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
        at com.sun.grizzly.http.servlet.FilterChainImpl.doFilter(FilterChainImpl.java:195)
        at com.sun.grizzly.http.servlet.FilterChainImpl.invokeFilterChain(FilterChainImpl.java:139)
        at com.sun.grizzly.http.servlet.ServletAdapter.doService(ServletAdapter.java:376)
        at com.sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:329)
        at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)
        at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:113)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:245)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:811)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:708)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1017)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:171)
        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:526)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:507)
        at java.lang.Thread.run(Thread.java:619)
Caused by: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
        at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:719)
        at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:200)
        at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:444)
        ... 68 more
Caused by: javax.ejb.CreateException: Could not create stateless EJB
        at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:527)
        at com.sun.ejb.containers.StatelessSessionContainer.access$000(StatelessSessionContainer.java:91)
        at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:717)
        ... 70 more
Caused by: java.lang.NullPointerException
        at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:768)
        at org.jboss.weld.manager.BeanManagerImpl.getBean(BeanManagerImpl.java:1171)
        at org.jboss.weld.manager.BeanManagerImpl.getBean(BeanManagerImpl.java:132)
        at org.glassfish.weld.services.JCDIServiceImpl.injectEJBInstance(JCDIServiceImpl.java:135)
        at com.sun.ejb.containers.BaseContainer.injectEjbInstance(BaseContainer.java:1604)
        at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:487)
        ... 72 more

I also tried adding "lib/JPA.jar" to the Class-Path entry in the manifest of EJB.jar, but that had no effect (to be expected, since any jars in the EAR lib are supposed to be automatically visible to all modules in the EAR root).

Is this another GF bug?

Thanks,
-Dan
[Message sent by forum member 'theodan']

http://forums.java.net/jive/thread.jspa?messageID=396022