title: Naming Convention for Open-EJB embedded container?
body: <p>I'm using <code>open-ejb</code> embedded container to write tests for a javaee application. The app contains just one <code>@Stateless</code> bean and test</p>
  
  <pre><code>import javax.ejb.embeddable.EJBContainer;
  
  import org.junit.Before;
  import org.junit.Test;
  
  public class ProductDaoTest {
  
      private EJBContainer container;
  
      @Before
      public void initializeContainerAndDatabase(){
          container = EJBContainer.createEJBContainer();
          System.out.println(container);
      }
  
      @Test
      public void test(){
  
      }
  }
  </code></pre>
  
  <p>For some reasons the success or failure of the embedded container getting started is determined by the folder name in which the source code is put. I tried different names, in some it worked, In some it didn't and the pattern seems random to me.</p>
  
  <blockquote>
    <p>hibernate-javaee --> didn't work<br>
    hibernate-ejb --> didn't work<br>
    javaee-hibernate --> didn't work<br>
    abc-xyz --> worked<br>
    hibernate-abc-xyz-def --> didn't work<br>
    abc-xyz-def-ejb --> didn't work<br>
    abc-xyz-def-javaee --> worked<br>
    abc-xyz-def-hibernate --> worked<br></p>
  </blockquote>
  
  <p>In case of failure the exception trace is:</p>
  
  <pre><code>-------------------------------------------------------
   T E S T S
  -------------------------------------------------------
  Running org.ares.hibernate.javaee.dao.ProductDaoTest
  INFO - ********************************************************************************
  INFO - OpenEJB http://tomee.apache.org/
  INFO - Startup: Wed Jun 08 08:57:56 IST 2016
  INFO - Copyright 1999-2015 (C) Apache OpenEJB/TomEE Project, All Rights Reserved.
  INFO - Version: 4.7.4
  INFO - Build date: 20160304
  INFO - Build time: 09:05
  INFO - ********************************************************************************
  INFO - openejb.home = C:\fakepath\hibernate-abc-xyz-def
  INFO - openejb.base = C:\fakepath\hibernate-abc-xyz-def
  INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@26f67b76
  INFO - Succeeded in installing singleton service
  INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
  INFO - Cannot find the configuration file [conf/openejb.xml].  Will attempt to create one for the beans deployed.
  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 - Creating TransactionManager(id=Default Transaction Manager)
  INFO - Creating SecurityService(id=Default Security Service)
  Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.039 sec &lt;&lt;&lt; FAILURE!
  test(org.ares.hibernate.javaee.dao.ProductDaoTest)  Time elapsed: 1.81 sec  &lt;&lt;&lt; ERROR!
  org.apache.openejb.OpenEjbContainer$NoModulesFoundException: No modules found to deploy.
  1)Maybe descriptors are placed in incorrect location.
  Descriptors could go under:
  &lt;base-dir&gt;/META-INF or &lt;base-dir&gt;/WEB-INF
  but not directly under &lt;base-dir&gt;
  Check 'Application Discovery via the Classpath' docs page for more info
  2)Maybe no modules are present in the classpath.
  Is 'openejb.base' system property pointing to the intended location?
          at org.apache.openejb.util.Exceptions.newNoModulesFoundException(Exceptions.java:99)
          at org.apache.openejb.OpenEjbContainer$Provider.load(OpenEjbContainer.java:540)
          at org.apache.openejb.OpenEjbContainer$Provider.createEJBContainer(OpenEjbContainer.java:322)
          at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:56)
          at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:43)
          at org.ares.hibernate.javaee.dao.ProductDaoTest.initializeContainerAndDatabase(ProductDaoTest.java:14)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:497)
          at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
          at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
          at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
          at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
          at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
          at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
          at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
          at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
          at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
          at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
          at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
          at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
          at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
          at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
          at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
          at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:497)
          at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
          at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
          at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
          at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
          at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
  
  
  Results :
  
  Tests in error:
    test(org.ares.hibernate.javaee.dao.ProductDaoTest): No modules found to deploy.(..)
  </code></pre>
  
  <p>In case of success, the output is:</p>
  
  <pre><code>-------------------------------------------------------
   T E S T S
  -------------------------------------------------------
  Running org.ares.hibernate.javaee.dao.ProductDaoTest
  INFO - ********************************************************************************
  INFO - OpenEJB http://tomee.apache.org/
  INFO - Startup: Wed Jun 08 09:07:02 IST 2016
  INFO - Copyright 1999-2015 (C) Apache OpenEJB/TomEE Project, All Rights Reserved.
  INFO - Version: 4.7.4
  INFO - Build date: 20160304
  INFO - Build time: 09:05
  INFO - ********************************************************************************
  INFO - openejb.home = C:\fakepath\abc-xyz-def-hibernate
  INFO - openejb.base = C:\fakepath\abc-xyz-def-hibernate
  INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@26f67b76
  INFO - Succeeded in installing singleton service
  INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
  INFO - Cannot find the configuration file [conf/openejb.xml].  Will attempt to create one for the beans deployed.
  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 - Creating TransactionManager(id=Default Transaction Manager)
  INFO - Creating SecurityService(id=Default Security Service)
  INFO - Found EjbModule in classpath: c:\fakepath\abc-xyz-def-hibernate\target\classes
  INFO - Beginning load: c:\fakepath\abc-xyz-def-hibernate\target\classes
  INFO - Configuring enterprise application: C:\fakepath\abc-xyz-def-hibernate
  INFO - Auto-deploying ejb ProductDao: EjbDeployment(deployment-id=ProductDao)
  INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)
  INFO - Auto-creating a container for bean ProductDao: Container(type=STATELESS, id=Default Stateless Container)
  INFO - Creating Container(id=Default Stateless Container)
  INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
  INFO - Auto-creating a container for bean org.ares.hibernate.javaee.dao.ProductDaoTest: Container(type=MANAGED, id=Default Managed Container)
  INFO - Creating Container(id=Default Managed Container)
  INFO - Using directory C:\Users\UserName\AppData\Local\Temp for stateful session passivation
  INFO - Enterprise application "C:\fakepath\abc-xyz-def-hibernate" loaded.
  INFO - Assembling app: C:\fakepath\abc-xyz-def-hibernate
  INFO - Jndi(name="java:global/abc-xyz-def-hibernate/ProductDao!org.ares.hibernate.javaee.dao.ProductDao")
  INFO - Jndi(name="java:global/abc-xyz-def-hibernate/ProductDao")
  INFO - Existing thread singleton service in SystemInstance(): org.apache.openejb.cdi.ThreadSingletonServiceImpl@26f67b76
  INFO - OpenWebBeans Container is starting...
  INFO - Adding OpenWebBeansPlugin : [CdiPlugin]
  INFO - Adding OpenWebBeansPlugin : [OpenWebBeansJsfPlugin]
  INFO - All injection points were validated successfully.
  INFO - OpenWebBeans Container has started, it took 195 ms.
  INFO - Created Ejb(deployment-id=ProductDao, ejb-name=ProductDao, container=Default Stateless Container)
  INFO - Started Ejb(deployment-id=ProductDao, ejb-name=ProductDao, container=Default Stateless Container)
  INFO - Deployed Application(path=C:\fakepath\abc-xyz-def-hibernate)
  org.apache.openejb.OpenEjbContainer@34c01041
  Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.224 sec
  </code></pre>
  
  <p>To make sure that the session bean is getting discovered in classpath I've added </p>
  
  <pre><code>Enumeration&lt;URL&gt; ejbJars = this.getClass().getClassLoader().getResources("org/ares/hibernate/javaee/dao/ProductDao.class");
          while (ejbJars.hasMoreElements()) {
              URL url = ejbJars.nextElement();
              System.out.println("app = " + url);
          }
  </code></pre>
  
  <p>as mentioned in <a href="http://openejb.apache.org/application-discovery-via-the-classpath.html" rel="nofollow">this link</a>. The class is getting discovered in both working and non working cases.</p>
  
  <pre><code>-------------------------------------------------------
   T E S T S
  -------------------------------------------------------
  Running org.ares.hibernate.javaee.dao.ProductDaoTest
  app = file:/C:/fakepath/hibernate-ejb/target/classes/org/ares/hibernate/javaee/dao/ProductDao.class
  </code></pre>
  
  <p>Is there a naming convention for this that I dont't know about or did I stumble upon a bug?</p>
  
  <p>The source code for the application is <a href="https://drive.google.com/file/d/0B1PCWH2ykvSBeDY5SHdETTZNYjA/view?usp=sharing" rel="nofollow">here</a>. The parent directory for the project is <code>abc-def</code> and while running <code>mvn clean test</code> the project runs. If the parent directory name is changed to <code>hibernate-javaee</code> and the application stops working. </p>