2013-06-18 1 views
0

우리는 일부 ejb 및 war 모듈을 포함하는 Maven 다중 모듈 프로젝트를 보유하고 있습니다. 모듈 중 하나는 전체 플랫폼의 통합 테스터로 작동합니다. 임베디드 EjbContainer를 사용하여 보안, 종속성 주입 및 트랜잭션을 포함하여 ejbs를 성공적으로 테스트했습니다.임베디드 EJBContainer에서 CDI의 통합 테스트를 수행 할 수 없습니다.

이제 CDI를 믹스에 추가하려고합니다. 여기에 문제가 발생할 때가 있습니다.

문제

는 문서에 따르면, CDI를 활성화하기 위해 우리는 단순히 우리가 그것을 활성화하고자하는 EJB 모듈의 META-INF 폴더에 빈 beans.xml 환경를 추가해야 . 간단히 말해서 임베디드 서버를 시작한 직후에 시작할 수 없으므로 통합 테스트를 실행할 수 없습니다. 던져

는 예외입니다 :

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 

스택 트레이스의 나머지는 단지 우리가 서버를 시작하려고하는 라인을 가리키는 및 유용한 정보를 제공하지 않습니다.

두 가지 참고 사항 : 시동이 실패

  • 을 심지어 어떤 @Injected 빈을하지 않고.
  • 비 임베디드 글래스 피시에서 실행하면 CDI는 이므로 문제는에만 적용됩니다.

우리의 시스템

Maven 프로젝트 구조

myproject라는
MyProject를 귀
myproject라는 도메인
myproject라는-ejb1
myproject라는-EJB2
myproject라는 전쟁
에 MyProject - 테스트

환경
- 글래스 피시 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); 

우리는 우리는 글래스 피쉬에 미세한 로깅을 활성화하지만 여전히 우리의 단서를 얻을까지

그래서 발견 무엇 무엇을 실패하고있다.

우리는 Arquillian에 대해 알고 있으며 가능한 것으로 간주하지만 마지막으로 표준 API를 사용해 보시기 바랍니다.

우리는 무엇이 잘못 될 수 있는지 알고 싶습니다.

답변

0

지난 번에 손으로 임베디드 glassfish를 사용했을 때 instance 대신에 org.glassfish.ejb.embedded.glassfish.installation.root 속성을 설정했습니다. 이 시도.

사이드 노트 : 테스트가 이식 가능할 때 대상 컨테이너를 선택할 때 유연성을 제공하기 때문에 Arquillian을 시도하는 것이 좋습니다. 그리고이 더러운 코드를 더 이상 사용하지 않아도됩니다. 또한 나는 종종 클래스 로더로 두통을 느끼기 때문에 임베디드 컨테이너를 좋아하지 않습니다.