Hi,

I am using the built-in ThreadLocal feature of the javax.transaction.TransactionSynchronizationRegistry. The logic behind it is, that an interceptor creates some Context object and this context object is used from the EJBs in the different application layers to store context information like errors, warnings that occurred. The idea can also be read in detail at
http://www.adam-bien.com/roller/abien/entry/how_to_pass_context_in

While it works fine with Glassfish 2.1.x, my OpenEJB-based Unittests do not work anymore since I have put this in.

The error that comes up is:

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 MyXYZBean: Container(type=STATELESS, id=Default Stateless Container) WARN - Jar not loaded. classpath.ear. No provider available for resource-ref 'null' of type 'javax.transaction.TransactionSynchronizationRegistry' for 'MyXYZBean'. org.apache.openejb.OpenEJBException: No provider available for resource-ref 'null' of type 'javax.transaction.TransactionSynchronizationRegistry' for 'MyXYZBean'. at org.apache.openejb.config.AutoConfig.autoCreateResource(AutoConfig.java:1342) at org.apache.openejb.config.AutoConfig.getResourceId(AutoConfig.java:1335) at org.apache.openejb.config.AutoConfig.getResourceId(AutoConfig.java:1286) at org.apache.openejb.config.AutoConfig.processResourceRef(AutoConfig.java:799)
   at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.java:724)
   at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.java:133)
at org.apache.openejb.config.ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:247) at org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:601) at org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:551) at org.apache.openejb.config.ConfigurationFactory.getOpenEjbConfiguration(ConfigurationFactory.java:380) at org.apache.openejb.assembler.classic.Assembler.getOpenEjbConfiguration(Assembler.java:299) at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:278)
   at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:137)
   at org.apache.openejb.OpenEJB.init(OpenEJB.java:286)
   at org.apache.openejb.OpenEJB.init(OpenEJB.java:265)
   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.openejb.loader.OpenEJBInstance.init(OpenEJBInstance.java:36) at org.apache.openejb.client.LocalInitialContextFactory.init(LocalInitialContextFactory.java:71) at org.apache.openejb.client.LocalInitialContextFactory.init(LocalInitialContextFactory.java:53) at org.apache.openejb.client.LocalInitialContextFactory.getInitialContext(LocalInitialContextFactory.java:42) at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
   at javax.naming.InitialContext.init(InitialContext.java:223)
   at javax.naming.InitialContext.<init>(InitialContext.java:197)
at de.lwv.hessen.test.local.AbstractOpenEJBLocalTest.setupInitialContext(AbstractOpenEJBLocalTest.java:81) at de.lwv.hessen.test.local.AbstractOpenEJBLocalTest.setUp(AbstractOpenEJBLocalTest.java:31)
   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.junit.internal.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAfterRunner.java:74) at org.junit.internal.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfterRunner.java:50) at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:33) at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75) at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45) at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66) at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35) at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42) at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)


My code looks like this:

@Stateless
// @RolesAllowed( { "GFHPK", "SACHBEARBEITERLE" })
public class MyXYZBean implements MyXYZLocal, MyXYZRemote {

   @EJB
   private ISomeEJBServiceLocal someEJBService;

   @Resource
   private TransactionSynchronizationRegistry tsr;

   @Interceptors(FacadeMethodInterceptor.class)
   @Override
   public Something createSomething(Something something) {
       .....
       return something;
   }

}

Is this feature not supported by OpenEJB?
Or do I have to provide some init stuff in the InitialContext?

Many thanks in advance,

Stephan Bauer

Reply via email to