使用嵌入式glassfish v3进行JPA + EJB测试

时间:2013-04-22 11:05:42

标签: jpa-2.0 glassfish-3 ejb-3.1

尝试按照以下说明设置JPA + EJB测试: http://ctpjava.blogspot.fi/2009/10/unit-testing-ejbs-and-jpa-with.html

似乎没有什么问题我似乎无法做得很好。 首先我得到这个错误(我可以解决这个错误,但仍需要修复):

SEVERE: EJB6004:Specified application server installation location [C:\Users\<userName>\.m2\repository\org\glassfish\extras\glassfish-embedded-all\domains\domain1] does not exist.

找到这个网站,它提供了(更正确的?)属性设置: http://docs.oracle.com/cd/E18930_01/html/821-2424/gjlde.html

并将我的测试设置修改为:

import javax.ejb.embeddable.EJBContainer;
import javax.naming.Context;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
...
@BeforeClass
public static void createContainer() {
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put(EJBContainer.MODULES, new File("target/classes"));
    properties.put("installation.root", "./src/test/glassfish");
    properties.put("configuration.file", "./src/test/glassfish/domains/domain1/config/domain.xml");
    container = EJBContainer.createEJBContainer(properties);
    ctx = container.getContext();
}

在pom.xml中,我似乎需要以下内容:

    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derby</artifactId>
        <version>10.9.1.0</version>
        <scope>test</scope>
    </dependency>

    <!-- Must be before java-ee -->
    <dependency>
        <groupId>org.glassfish.extras</groupId>
        <artifactId>glassfish-embedded-all</artifactId>
        <version>3.1.1</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>

错误指向用户目录,我可以通过在那里设置所需的东西(并通过它)来传递这个,但这不是一个合适的地方,因为一切都必须通过SVN。

根据后一个链接,我认为我有正确的属性设置,但这些似乎被忽略了。也许我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:4)

在属性链接中遗漏了这段文字:

  

可以传递给的属性   EJBContainer #createEJBContainer(Properties)方法总结如下   下表所有房产都在   org.glassfish.ejb.embedded.glassfish包。例如,完整的   install.root属性的名称是   org.glassfish.ejb.embedded.glassfish.installation.root。

所以答案是:

org.glassfish.ejb.embedded.glassfish.

在每个属性之前

因此:

org.glassfish.ejb.embedded.glassfish.installation.root

intead of:

installation.root