배포를 위해 여러 프로필이 필요합니다. 나는 그것을 필터링 이야기하기 위해 받는다는 - EJB-플러그인에 filterDeploymentDescriptor
을 활성화Enterprise Bean 컨테이너 (GlassFish)가 내장 된 단위 테스트를 위해 ebj-jar.xml에서 env-entry 값을 필터링 (대체)하는 방법은 무엇입니까?
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault> <!-- use dev profile by default -->
</activation>
<build>
</build>
<properties>
<theHost>localhost</theHost>
</properties>
</profile>
...
(대체 : 메이븐 POM에서 나는 프로필 "DEV"와 (로컬 호스트와 같은) 속성 "theHost"를 정의 EJB-jar.xml의 단위) 값 :
<session>
<ejb-name>MongoDao</ejb-name>
<ejb-class>com.coolcorp.MongoDao</ejb-class>
<session-type>Stateless</session-type>
<env-entry>
<env-entry-name>host</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>${theHost}</env-entry-value>
</env-entry>
...
:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.3</version>
<configuration>
<ejbVersion>3.1</ejbVersion>
--> <filterDeploymentDescriptor>true</filterDeploymentDescriptor>
</configuration>
</plugin
마지막에 EJB-jar.xml의 I는 @Resource 속성 "호스트"에 대한 원하는 프로파일 특정 값을 구하는 참조 ${theHost}
이 모든 것이 일반적인 Maven 빌드와 잘 맞습니다. 그러나 GlassFish의 임베디드 엔터프라이즈 빈 컨테이너 [EJBContainer.createEJBContainer()]를 사용하여 EJB 유닛 테스트를 실행하면 maven-ejb-plugin은 filterDeploymentDescriptor = true를 무시하는 것으로 보입니다. 동일한 "dev"프로파일을 가진 maven을 실행하더라도 EJB는 "localhost"대신 "$ {theHost}"를 봅니다.
mvn.bat -Pdev test
단위 테스트를 실행할 때 대체가 작동하지 않는 이유는 누구나 알 수 있습니까? ejb-jar.xml을 필터링 할 수 있도록 단위 테스트를 위해 특별히 정의해야 할 것이 있습니까? 또는 다른 프로파일이 존재하는 경우 단위 테스트 EJB에 대한 더 나은 접근 방법?
제안 해 주셔서 감사합니다. 우리는 앞으로 전환 할 수 있기 때문에 컨테이너의 독점 메커니즘을 피하려고 노력합니다. 그러나 Maven 플러그인 maven-surefire-plugin을 사용하여 시스템 속성을 설정하여 해결 방법을 구현했습니다. 주석의 공간 제한으로 인한 답변. – StaticNoiseLog