有没有办法在Maven项目中设置第二个persistence.xml文件,以便用于测试而不是用于部署的普通文件?
我尝试将一个persistence.xml放入src/test/resources/META-INF,它被复制到target/test-classes/META-INF中,但似乎是target/classes/META-INF(来自src/main的副本)尽管mvn -X test以正确的顺序列出了类路径条目,但首选资源是首选的:
[DEBUG] Test Classpath :
[DEBUG] /home/uqpbecke/dev/NetBeansProjects/UserManager/target/test-classes
[DEBUG] /home/uqpbecke/dev/NetBeansProjects/UserManager/target/classes
[DEBUG] /home/uqpbecke/.m2/repository/junit/junit/4.5/junit-4.5.jar
...
Run Code Online (Sandbox Code Playgroud)
我希望能够针对简单的hsqldb配置运行测试,而无需更改JPA配置的部署版本,理想情况是在项目结账后直接进行,无需进行本地调整.
我是比较新的JAX-RS,JPA,GlassFish的,Java DB的,和NetBeans,我想编写单元测试我的代码.[版本号在底部.]但是,我坚持从哪里开始.我已经做了很多搜索,但我还没有清楚地了解如何设置我的代码的嵌入式测试.我正在使用NetBeans,但我的问题很笼统.我希望我能更清楚地形成我的问题,但这是我能做的最好的事情.到目前为止,我已经找到了以下可能的部分(更像是此时的提示).
o我想在没有Maven的情况下进行设置,但这意味着我必须手动安装嵌入式jar.问:我在哪里可以找到它们?
o创建指定GlassFish和Java DB嵌入版本的config xml文件版本(glassfish-resources.xml和persistence.xml).问:但是,您如何告诉NetBeans使用它们进行测试而不是依赖于已安装版本的生产?
我认为persistence.xml看起来像这样(从使用嵌入式德比的hibernate):
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:derby:test"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
Run Code Online (Sandbox Code Playgroud)
o创建自定义Glassfish域配置文件(Embedded GlassFish忽略Maven测试资源).问:这应该是什么样的?我从使用NetBeans安装创建的默认domain1中获取了domain.xml,但它有很多内容.
o一旦我的项目可以访问嵌入的文件,并且它被配置为使用它们,我的JUnit线束应该是什么样的?http://jersey.java.net/nonav/documentation/latest/client-api.html#d4e759说:
protected void setUp() throws Exception {
...
glassfish = new GlassFish(BASE_URI.getPort());
ScatteredWar war = new ScatteredWar(...);
glassfish.deploy(war);
...
Run Code Online (Sandbox Code Playgroud)
但是,我也看到提到的EJBContainer,例如,(从http://docs.oracle.com/javaee/6/tutorial/doc/gkcqz.html):
@BeforeClass
public static void initContainer() throws Exception {
ec = EJBContainer.createEJBContainer(); ctx = ec.getContext();
}
Run Code Online (Sandbox Code Playgroud)
o我正在使用JPA,所以我需要访问PersistenceContext/EntityManager.目前我通过以下方式查询:
new InitialContext().lookup("java:module/<jax-rs resource name>");
Run Code Online (Sandbox Code Playgroud)
但我也看到了:
emf = Persistence.createEntityManagerFactory("chapter02PU");
Run Code Online (Sandbox Code Playgroud)
问:什么是正确的方法来掌握这个?
我将衷心感谢您的帮助.