2016-06-08 2 views
1

Я использую встроенный контейнер open-ejb для написания тестов для приложения javaee. Приложение содержит только один @Stateless боба и тестКонвенция о присвоении имен для встроенного контейнера открытого EJB?

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(){ 

    } 
} 

По некоторым причинам успеха или провала встроенного контейнера начала работы определяются именем папки, в которой кладется исходный код. Я пробовал разные имена, в некоторых это сработало. В некоторых это не так, и образец кажется случайным для меня.

гибернации-JavaEE -> не работает
гибернации-EJB -> не работает
JavaEE-спящий режим -> не работает
абв-хуг -> работал
гибернации-а-хуг четкость -> не работает
а-хуг-DEF-EJB -> не работает
а-А-DEF-JavaEE -> работал
А-xyz- def-hibernate -> обработанный

В случае выхода из строя след исключение:

------------------------------------------------------- 
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 [email protected] 
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 <<< FAILURE! 
test(org.ares.hibernate.javaee.dao.ProductDaoTest) Time elapsed: 1.81 sec <<< ERROR! 
org.apache.openejb.OpenEjbContainer$NoModulesFoundException: No modules found to deploy. 
1)Maybe descriptors are placed in incorrect location. 
Descriptors could go under: 
<base-dir>/META-INF or <base-dir>/WEB-INF 
but not directly under <base-dir> 
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.(..) 

В случае успеха, выход:

------------------------------------------------------- 
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 [email protected] 
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(): [email protected] 
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) 
[email protected] 
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.224 sec 

Чтобы убедиться, что сессионный компонент становится обнаружен в пути к классам Я добавлена ​​

Enumeration<URL> ejbJars = this.getClass().getClassLoader().getResources("org/ares/hibernate/javaee/dao/ProductDao.class"); 
     while (ejbJars.hasMoreElements()) { 
      URL url = ejbJars.nextElement(); 
      System.out.println("app = " + url); 
     } 

как упомянуто в this link. Класс открывается как в рабочих, так и в нерабочих случаях.

------------------------------------------------------- 
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 

Есть именовании для этого, что я знаю о dont't или я наткнуться на ошибку?

Исходный код приложения: here. Родительский каталог для проекта - abc-def, а во время работы mvn clean test проект запускается. Если имя родительского каталога изменено на hibernate-javaee, и приложение перестает работать.

ответ

0

Некоторые patterns автоматически исключаются из проверки OpenEJB.

+0

Действительно, оба 'javaee-' и 'hibernate-' находятся в списке исключений. – ares

1

Что касается вопроса об именовании, его нет. Я уверен, что вы где-то (файл системных свойств или программно), исключая/включая пути. Исключение/включение позволяет использовать подстановочные знаки, поэтому некоторые шаблоны папок работают, а некоторые нет. Чтобы исключить ничего и включить все, создайте контейнер EJB со следующими свойствами.

Properties p = new Properties(); 
p.put("openejb.deployments.classpath.exclude", ""); 
p.put("openejb.deployments.classpath.include", ".*"); 
container = EJBContainer.createEJBContainer(p); 

См. http://tomee.apache.org/application-discovery-via-the-classpath.html для получения дополнительных инструкций.

Другие варианты, чтобы убедиться, что ваш EJB будет развернут.

Вариант 1: Обнаружение приложений

Если вы не хотите, чтобы добавить дополнительный конфигурационный файл, вы должны убедиться, что ваша папка EJB является частью и ваш путь к классам EJB содержит ejb-jar.xml. См. http://tomee.apache.org/application-discovery-via-the-classpath.html для получения дополнительных инструкций.

Вариант 2: Файл конфигурации

Согласно журналу вы не настроили конфигурационный файл.

INFO - Cannot find the configuration file [conf/openejb.xml]. Will attempt to create one for the beans deployed. 

В большинстве случаев это нормально, и особый файл конфигурации является исключением. Попробуйте установить файл конфигурации с настройками вашей папки. См. http://openejb.apache.org/configuration.html для получения дополнительных инструкций.

+0

Для второй части вашего ответа, согласно [open-ejb documentation] (http://tomee.apache.org/embedded-configuration.html), 'OpenEJB будет функционировать нормально без какой-либо конфигурации и будет радостно создавать вещи по мере необходимости и выбирать значения по умолчанию для всего. Таким образом, в реальном смысле конфигурация касается переопределения этих параметров. «Я не переопределяю любые значения по умолчанию для рабочего и нерабочего сценария. Я проведу ссылку, которую вы дали в первой части вашего ответа. – ares

+0

Проверьте ссылку на обнаружение приложения, нет ничего общего с подстановочными знаками. Он работает только с некоторыми изменениями в имени каталога и сбивает меня с ума. – ares

+0

@ares, Отправьте файл свойств вашей системы. Вы можете найти файл в conf/system.properties. И проверьте, существует ли файл дополнительных пользователей system.properties в $ {user.home} /. Openejb/system.properties. –

0

Обратите внимание, что openejb.additional.include = myjarprefix может позволить вам добавить его обратно во включенные проверки. Он удалит конфликтующие исключения, поэтому сделайте его как можно дольше, если вы его используете. Его можно установить в conf/system.properties.

Смежные вопросы