I am having the same problem with Jetty. I am using the maven jetty:run plugin and when I put my SSBs in a separate EJB jar openEJB starts up fine. The EJBs are loaded correctly and I can get the local interface from JNDI, however when I call any method I get a NPE because nothing is injected. When I take the SSBs and place them in my WAR project everything works fine.
I am going to create an example app that demonstrates this problem. If someone could let me know where to upload it I would appreciate it.
Here is the output of the failed run:
[INFO] Starting jetty 6.1.6 ...
2008-03-31 19:22:58.839::INFO: jetty-6.1.6
Apache OpenEJB 3.0-SNAPSHOT build: 20080311-01:28
http://openejb.apache.org/INFO - openejb.home = /home/klewelling/Documents/development/java-examples/tech-preview/Struts-WAR
INFO - openejb.base = /home/klewelling/Documents/development/java-examples/tech-preview/Struts-WAR
INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Configuring Service(id=techPreviewUnmanaged, type=Resource, provider-id=Default JDBC Database)
INFO - Configuring Service(id=techPreview, type=Resource, provider-id=Default JDBC Database)
INFO - Configuring Service(id=Default JDK 1.3 ProxyFactory, type=ProxyFactory, provider-id=Default JDK 1.3 ProxyFactory)
INFO - Found EjbModule in classpath: /home/klewelling/.m2/repository/com/etcc/example/EJB/1.0/EJB-1.0.jar
INFO - Configuring app: /home/klewelling/.m2/repository/com/etcc/example/EJB/1.0/EJB-1.0.jar
INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)
INFO - Auto-creating a container for bean UnitTestHelperBean: Container(type=STATELESS, id=Default Stateless Container)
INFO - Configuring PersistenceUnit(name=DefaultPU, provider=org.hibernate.ejb.HibernatePersistence)
INFO - Loaded Module: /home/klewelling/.m2/repository/com/etcc/example/EJB/1.0/EJB-1.0.jar
INFO - Assembling app: /home/klewelling/.m2/repository/com/etcc/example/EJB/1.0/EJB-1.0.jar
INFO - PersistenceUnit(name=DefaultPU, provider=org.hibernate.ejb.HibernatePersistence)
INFO - Jndi(name=UnitTestHelperBeanLocal) --> Ejb(deployment-id=UnitTestHelperBean)
INFO - Jndi(name=UserOperationsBeanLocal) --> Ejb(deployment-id=UserOperationsBean)
INFO - Jndi(name=AuthenticationOperationsBeanLocal) --> Ejb(deployment-id=AuthenticationOperationsBean)
INFO - Jndi(name=DatabaseSetupBeanLocal) --> Ejb(deployment-id=DatabaseSetupBean)
INFO - Created Ejb(deployment-id=UnitTestHelperBean, ejb-name=UnitTestHelperBean, container=Default Stateless Container)
INFO - Created Ejb(deployment-id=UserOperationsBean, ejb-name=UserOperationsBean, container=Default Stateless Container)
INFO - Created Ejb(deployment-id=AuthenticationOperationsBean, ejb-name=AuthenticationOperationsBean, container=Default Stateless Container)
INFO - Created Ejb(deployment-id=DatabaseSetupBean, ejb-name=DatabaseSetupBean, container=Default Stateless Container)
INFO - Deployed Application(path=/home/klewelling/.m2/repository/com/etcc/example/EJB/1.0/EJB-1.0.jar)
INFO - OpenEJB ready.
OpenEJB ready.
2008-03-31 19:23:02.901::INFO: No Transaction manager found - if your webapp requires one, please configure one.
WARN - Injection: No such property 'com.etcc.example.ejb.util.DatabaseSetupBean/em' in class com.etcc.example.ejb.util.DatabaseSetupBean
2008-03-31 19:23:03.437::WARN: failed StartupServlet
javax.servlet.ServletException: The bean encountered a non-application exception.; nested exception is:
java.lang.NullPointerException
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:437)
at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:256)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:612)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:139)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1216)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:509)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:447)
at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:110)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:147)
at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:147)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
at org.mortbay.jetty.Server.doStart(Server.java:222)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)
at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:337)
at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:279)
at org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:203)
at org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:182)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:420)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:493)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:463)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:330)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:123)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:272)
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:585)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Thanks
Kenneth
ebaxt wrote:
I'm trying to run my application with Tomcat+openEJB, but I can't figure out why the EntityManager isn't injected correctly into the EAO sessionbean.
My war file is packed with the ejb.jar in \WEB-INF\lib.
The client is able to lookup the facade, but when the facade delegates the EntityManager actions to the EAO a null pointer exception is thrown.
Here's the log.
INFO - PersistenceUnit(name=sp2k, provider=org.apache.openjpa.persistence.PersistenceProviderImpl)
INFO - Jndi(name=TaxaEAOBeanLocal) --> Ejb(deployment-id=TaxaEAOBean)
INFO - Jndi(name=Sp2kServiceBeanRemote) --> Ejb(deployment-id=Sp2kServiceBean)
INFO - Created Ejb(deployment-id=TaxaEAOBean, ejb-name=TaxaEAOBean, container=My Stateless Container)
INFO - Created Ejb(deployment-id=Sp2kServiceBean, ejb-name=Sp2kServiceBean, container=My Stateless Container)
INFO - Deployed Application(path=F:\tomcat\apache-tomcat-6.0.16\webapps\fddb-war-1.0-SNAPSHOT)
WARN - Injection: No such property 'no.uib.gyro.domain.classification.TaxaEAOBean/em' in class no.uib.gyro.domain.classification.TaxaEAOBean
WARN - Injection: No such property 'no.uib.gyro.domain.classification.TaxaEAOBean/em' in class no.uib.gyro.domain.classification.TaxaEAOBean
The @PersistenceContext annotation is inside the TaxaEAOBean, so it's not past to the EAO from the facade.
The strange thing is that when I put the EJB's in the war archive, it all works fine. Is there a difference to openEJB between adding ejb.jar in WEB-INF\lib or to put the beans directly in the WEB-INF\classes?
Thanks.
-Erik