我使用Arquillian和远程Glassfish实例设置了单元测试:
@RunWith(Arquillian.class)
public class ClientTest {
@EJB
private ClientService client;
@Deployment
public static Archive<?> createDeployment() {
return ShrinkWrap.create(WebArchive.class, "test.war")
.addPackage(Client.class.getPackage())
.addPackage(ClientService.class.getPackage())
.addPackage(Client_.class.getPackage())
.addAsResource("test-persistence.xml", "META-INF/persistence.xml")
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
}
@Test
public void testCreate() {
Assert.assertNotNull("Client not null", client);
Client c = client.getClientById(1L);
assertNotNull(c);
}
我的persistence.xml如下所示(适用于开发代码)
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="primary">
<jta-data-source>jdbc/ora</jta-data-source>
<properties>
<property name="eclipselink.logging.level" value="FINEST" />
<property name="eclipselink.ddl-generation" value="none"/>
</properties>
</persistence-unit>
</persistence>
数据源在远程glassfish-server上配置。但是我总是得到以下例外:
Caused by: java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName null
答案 0 :(得分:0)
该行
.addAsResource("test-persistence.xml", "META-INF/persistence.xml")
告诉Shrinkwrap在test / resources文件夹中查找test-persistence.xml文件,并将其添加到META-INF文件夹内的war文件中。
您必须将persistence.xml文件重命名为test-persistence.xml,并确保它在test / resources文件夹中可用
答案 1 :(得分:0)
您也可以直接从源代码中指向您的persistence.xml文件。
.addAsResource("META-INF/persistence.xml")
这应该可以缓解你的问题。
答案 2 :(得分:0)
感谢您的提问。 persistence.xml
已正确部署 - 我仔细检查了它。解决方案是重启我的glassfish服务器。不知道为什么,但重启后一切正常。