Guess what. I just ran into the same problem, though I had @EJB fields
and the @LocalClient annotation.
Following this is the start of the test's code, the output from
OpenEJB starting and finally the exact error I got. This test class is
in the classpath:
/home/quintin/dev/kms/KMSPlatform/KMSPlatform-ejb/target/test-classes
The error was fixed by adding an empty ejb-jar.xml in the test class'
classpath. This is not documented on the page. In fact it mentions the
following (which, to me, implies an ejb-jar.xml is not required when
using context.bind("inject") method):
/As well since this is not a heavyweight Java EE Application Client,
you are not required to use any special packaging or command-line
parameters to run the client. Your client can be a Unit Test or any
plain java code that needs to pull objects from the Embedded EJB
container. Classes with @LocalClient can be placed in a Client module
or an EJB module. A given module may have as many classes annotated
with @LocalClient as it wishes./
Class:
package net.kunye.test;
import javax.ejb.EJB;
import net.kunye.platform.testing.junit.KmsRunner;
import net.kunye.platform.testing.security.RunAsUser;
import net.kunye.platform.testing.security.TestSecurity;
import org.apache.openejb.api.LocalClient;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
*
* @author quintin
*/
@RunWith(KmsRunner.class)
@LocalClient
public class TestBeanTest
{
@EJB
private TestLocal bean;
....some tests and initializers...
}
And here is the output when I run the test:
Running net.kunye.test.TestBeanTest
Apache OpenEJB 3.1.2-SNAPSHOT build: 20090928-12:10
http://openejb.apache.org/
INFO - openejb.home = /home/quintin/dev/kms/KMSPlatform/KMSPlatform-ejb
INFO - openejb.base = /home/quintin/dev/kms/KMSPlatform/KMSPlatform-ejb
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 - Found EjbModule in classpath:
/home/quintin/dev/kms/KMSPlatform/KMSPlatform-ejb/target/classes
INFO - Found ClientModule in classpath:
/home/quintin/.m2/repository/org/hibernate/hibernate-core/3.3.2.GA/hibernate-core-3.3.2.GA.jar
INFO - Found ClientModule in classpath:
/home/quintin/.m2/repository/javassist/javassist/3.4.GA/javassist-3.4.GA.jar
INFO - Found EjbModule in classpath:
/home/quintin/.m2/repository/net/kunye/UnitTesting/1.0/UnitTesting-1.0.jar
INFO - Beginning load:
/home/quintin/dev/kms/KMSPlatform/KMSPlatform-ejb/target/classes
INFO - Beginning load:
/home/quintin/.m2/repository/org/hibernate/hibernate-core/3.3.2.GA/hibernate-core-3.3.2.GA.jar
INFO - Beginning load:
/home/quintin/.m2/repository/javassist/javassist/3.4.GA/javassist-3.4.GA.jar
INFO - Beginning load:
/home/quintin/.m2/repository/net/kunye/UnitTesting/1.0/UnitTesting-1.0.jar
INFO - Configuring enterprise application: classpath.ear
INFO - Configuring Service(id=Default Stateless Container,
type=Container, provider-id=Default Stateless Container)
INFO - Auto-creating a container for bean TestBean:
Container(type=STATELESS, id=Default Stateless Container)
INFO - Configuring PersistenceUnit(name=KMSPlatform-PU,
provider=org.hibernate.ejb.HibernatePersistence)
INFO - Configuring Service(id=Default JDBC Database, type=Resource,
provider-id=Default JDBC Database)
INFO - Auto-creating a Resource with id 'Default JDBC Database' of
type 'DataSource for 'KMSPlatform-PU'.
INFO - Configuring Service(id=Default Unmanaged JDBC Database,
type=Resource, provider-id=Default Unmanaged JDBC Database)
INFO - Auto-creating a Resource with id 'Default Unmanaged JDBC
Database' of type 'DataSource for 'KMSPlatform-PU'.
INFO - Adjusting PersistenceUnit KMSPlatform-PU <jta-data-source> to
Resource ID 'Default JDBC Database' from 'jdbc/kmsPool'
INFO - Adjusting PersistenceUnit KMSPlatform-PU <non-jta-data-source>
to Resource ID 'Default Unmanaged JDBC Database' from 'null'
INFO - Enterprise application "classpath.ear" loaded.
INFO - Assembling app: classpath.ear
INFO - PersistenceUnit(name=KMSPlatform-PU,
provider=org.hibernate.ejb.HibernatePersistence)
INFO - Jndi(name=TestBeanLocal) --> Ejb(deployment-id=TestBean)
INFO - Jndi(name=TestBeanRemote) --> Ejb(deployment-id=TestBean)
INFO - Jndi(name=SiteBeanLocal) --> Ejb(deployment-id=SiteBean)
INFO - Jndi(name=SiteBeanRemote) --> Ejb(deployment-id=SiteBean)
INFO - Jndi(name=SpringContextBeanLocal) -->
Ejb(deployment-id=SpringContextBean)
INFO - Jndi(name=UnauthenticatedUserBeanLocal) -->
Ejb(deployment-id=UnauthenticatedUserBean)
INFO - Jndi(name=StandardUserBeanLocal) --> Ejb(deployment-id=StandardUserBean)
INFO - Jndi(name=AdminBeanLocal) --> Ejb(deployment-id=AdminBean)
INFO - Jndi(name=LampRoomBeanLocal) --> Ejb(deployment-id=LampRoomBean)
INFO - Jndi(name=VdsAdminBeanLocal) --> Ejb(deployment-id=VdsAdminBean)
INFO - Jndi(name=PersonnelAdminBeanLocal) -->
Ejb(deployment-id=PersonnelAdminBean)
INFO - Jndi(name=LampRepairBeanLocal) --> Ejb(deployment-id=LampRepairBean)
INFO - Jndi(name=ServerComponentsBeanLocal) -->
Ejb(deployment-id=ServerComponentsBean)
INFO - Created Ejb(deployment-id=UnauthenticatedUserBean,
ejb-name=UnauthenticatedUserBean, container=Default Stateless
Container)
INFO - Created Ejb(deployment-id=PersonnelAdminBean,
ejb-name=PersonnelAdminBean, container=Default Stateless Container)
INFO - Created Ejb(deployment-id=VdsAdminBean, ejb-name=VdsAdminBean,
container=Default Stateless Container)
INFO - Created Ejb(deployment-id=LampRepairBean,
ejb-name=LampRepairBean, container=Default Stateless Container)
INFO - Created Ejb(deployment-id=StandardUserBean,
ejb-name=StandardUserBean, container=Default Stateless Container)
INFO - Created Ejb(deployment-id=LampRoomBean, ejb-name=LampRoomBean,
container=Default Stateless Container)
INFO - Created Ejb(deployment-id=ServerComponentsBean,
ejb-name=ServerComponentsBean, container=Default Stateless Container)
INFO - Created Ejb(deployment-id=AdminBean, ejb-name=AdminBean,
container=Default Stateless Container)
INFO - Created Ejb(deployment-id=SpringContextBean,
ejb-name=SpringContextBean, container=Default Stateless Container)
INFO - Created Ejb(deployment-id=TestBean, ejb-name=TestBean,
container=Default Stateless Container)
INFO - Created Ejb(deployment-id=SiteBean, ejb-name=SiteBean,
container=Default Stateless Container)
INFO - Deployed Application(path=classpath.ear)
The error:
testOpenMethod(net.kunye.test.TestBeanTest) Time elapsed: 4.298 sec <<< ERROR!
java.lang.RuntimeException: Failed to configure object.
at
org.apache.openejb.junit.context.OpenEjbTestContext.configureTest(OpenEjbTestContext.java:109)
at
org.apache.openejb.junit.context.ContextWrapperStatement.evaluate(ContextWrapperStatement.java:44)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
at org.apache.openejb.junit.OpenEjbRunner.run(OpenEjbRunner.java:147)
at
org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
at
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
at
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
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.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
at
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
Caused by: javax.naming.NamingException: Unable to find injection
meta-data for net.kunye.test.TestBeanTest. Ensure that class was
annotated with @org.apache.openejb.api.LocalClient and was
successfully discovered and deployed. See
http://openejb.apache.org/3.0/local-client-injection.html
at
org.apache.openejb.client.LocalInitialContext.inject(LocalInitialContext.java:251)
at
org.apache.openejb.client.LocalInitialContext.bind(LocalInitialContext.java:225)
at javax.naming.InitialContext.bind(InitialContext.java:400)
at
org.apache.openejb.junit.context.OpenEjbTestContext.configureTest(OpenEjbTestContext.java:97)
... 20 more
testSecuredMethod(net.kunye.test.TestBeanTest) Time elapsed: 0.002
sec <<< ERROR!
java.lang.RuntimeException: Failed to configure object.
at
org.apache.openejb.junit.context.OpenEjbTestContext.configureTest(OpenEjbTestContext.java:109)
at
org.apache.openejb.junit.context.ContextWrapperStatement.evaluate(ContextWrapperStatement.java:44)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
at org.apache.openejb.junit.OpenEjbRunner.run(OpenEjbRunner.java:147)
at
org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
at
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
at
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
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.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
at
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
Caused by: javax.naming.NamingException: Unable to find injection
meta-data for net.kunye.test.TestBeanTest. Ensure that class was
annotated with @org.apache.openejb.api.LocalClient and was
successfully discovered and deployed. See
http://openejb.apache.org/3.0/local-client-injection.html
at
org.apache.openejb.client.LocalInitialContext.inject(LocalInitialContext.java:251)
at
org.apache.openejb.client.LocalInitialContext.bind(LocalInitialContext.java:225)
at javax.naming.InitialContext.bind(InitialContext.java:400)
at
org.apache.openejb.junit.context.OpenEjbTestContext.configureTest(OpenEjbTestContext.java:97)
... 20 more
Quintin Beukes