使用嵌入式Glassfish和Maven

时间:2013-12-16 17:24:40

标签: java maven glassfish glassfish-embedded

有人对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);
    }
}

1 个答案:

答案 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更加繁琐,而且非常耗时,完全按照我的要求进行配置。

希望这对您的问题有所帮助。