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

Reply via email to