有人对Embedded Glassfish有所了解吗?我想运行一些EJB测试,但是我不希望每次运行测试时都启动并停止使用glassfish。
根据插件文档,我应该把它放在POM中:
<plugin>
<groupId>org.glassfish</groupId>
<artifactId>maven-embedded-glassfish-plugin</artifactId>
<version>3.1</version>
<configuration>
<app>target/ejbcontainer-1.0-SNAPSHOT.jar</app>
<name>test</name>
<ports>
<http-listener>8080</http-listener>
<https-listener>8181</https-listener>
</ports>
</configuration>
<executions>
<execution>
<goals>
<goal>start</goal>
<goal>deploy</goal>
<goal>undeploy</goal>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<skip>true</skip>
</configuration>
<executions>
<execution>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<skip>false</skip>
</configuration>
</execution>
</executions>
</plugin>
这一切都很好。我可以'运行'这个嵌入式玻璃鱼,我在我的控制台中得到它,证明它已启动并运行:
信息:测试已在1,124毫秒内成功部署。 PlainTextActionReporterSUCCESSDescription:部署使用名称test部署的AdminCommandApplication。 [名称=测试 2013年12月16日下午6:03:29 PluginUtil doDeploy 信息:部署测试 按ENTER重新部署,X退出
但是当我'运行'我的测试文件时, 会创建嵌入式glassfish的新实例 。
我的测试文件没有拿起当前正在运行的容器。
如果它有帮助,这是一个Testfile:
public class Test extends TestCase {
private Context ctx;
private EJBContainer ejbContainer;
public Test(String testName) {
super(testName);
}
@BeforeClass
public void setUp() {
ejbContainer = EJBContainer.createEJBContainer();
System.out.println("Opening the container");
ctx = ejbContainer.getContext();
}
@AfterClass
@Override
public void tearDown() {
ejbContainer.close();
System.out.println("Closing the container");
}
@org.junit.Test
public void testApp() throws Exception {
TemperatureConverter converter = (TemperatureConverter) ctx.lookup("java:global/classes/TemperatureConverter");
assertNotNull(converter);
}
}
答案 0 :(得分:2)
刚发现这个问题,因为我自己一直在玩嵌入式玻璃鱼,并且遇到一些配置问题,主要与日志输出有关。
我使用嵌入式glassfish进行测试的方法是将其绑定到Maven集成测试阶段,例如
<executions>
<!-- Start embedded GlassFish -->
<execution>
<id>start</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>deploy</id>
<phase>pre-integration-test</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
<execution>
<id>stop</id>
<phase>post-integration-test</phase>
<goals>
<goal>undeploy</goal>
<goal>stop</goal>
</goals>
</execution>
</executions>
并使用Maven Failsafe Plugin执行测试作为验证目标的一部分。这些变得更像集成测试。如果您将测试文件命名为IT后缀,例如myTestFileIT.java然后它们应该被自动拾取。
然后,您可以通过执行以下Maven命令来运行测试:
mvn verify
我最初使用的是嵌入式Jetty,我在这个设置上运行得非常好,我发现glassfish更加繁琐,而且非常耗时,完全按照我的要求进行配置。
希望这对您的问题有所帮助。