2013-06-18 2 views
0

У нас есть мультимодульный проект Maven с некоторыми модулями ejb и war. Один из модулей работает как интеграционный тестер для всей платформы. Мы успешно протестировали ejbs, включая безопасность, инъекцию зависимостей и транзакции, используя встроенный EjbContainer.Не удалось выполнить интеграционное тестирование CDI на Embedded EJBContainer

Теперь мы хотим добавить CDI в микс, и вот он возникает, когда возникают проблемы.

Проблема

Согласно документу, для того, чтобы активировать CDI, мы просто должны добавить пустую beans.xml в папку META-INF модуля EJB, в котором мы хотим, чтобы активировать его , Просто так, сразу после этого встроенный сервер не может запускаться, и поэтому мы не можем запускать какой-либо интеграционный тест.

Исключения брошено является:

java.lang.RuntimeException: javax.ejb.EJBException: Failed to deploy EJB modules - see log for details 
... 
Caused by: javax.ejb.EJBException: Failed to deploy EJB modules - see log for details 

Остальная частью StackTrace просто указует на строку, в которой мы стараемся, чтобы запустить сервер и не дает никакой полезной информации.

Две вещи, чтобы отметить:

  • запуск терпит неудачу, даже без каких-либо @Injected боб.
  • CDI прекрасно работает при работе в незакрытой стеклянной плавке, , поэтому наша проблема заключается только в тестировании.

Наша система

Maven структура проекта

MyProject
MyProject уха
MyProject-домен
MyProject-EJB1
MyProject-EJB2
MyProject войны
MyProject -test

Environment
- Glassfish 3,1, 3,2
- TestNG

File[] modules = { 
new File("/target/classes"), 
new File("../myproject-ejb1/target/classes"), 
new File("../myproject-ejb2/target/classes") 
...}; 
properties.put(EJBContainer.APP_NAME, "myproject"); 
properties.put(EJBContainer.MODULES, modules); 
properties.put("org.glassfish.ejb.embedded.glassfish.instance.root","./src/main/resources");  
EJBContainer container = EJBContainer.createEJBContainer(properties); 

То, что мы нашли до сих пор

Мы включили тонкую регистрацию на GlassFish, но до сих пор мы не получим никакого понятия о том, что не работает.

Мы знаем о Arquillian, и мы рассматриваем его как возможность, но мы хотели бы попробовать в последний раз со стандартным api.

Любая идея, что мы можем делать неправильно?

ответ

0

Последний раз, когда я использовал встроенную стеклянную рыбку вручную, я устанавливал свойство org.glassfish.ejb.embedded.glassfish.installation.root, а не instance. Попробуй это.

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

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