这是我的persistence.xml:
persistence.xml
<persistence> <persistence-unit name="MyUnit"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>jdbc/abcDS</jta-data-source> </persistence-unit> </persistence>
该jndi.properties文件src/test/resources应在测试期间从中创建数据源,因为缺少具有真实数据源的真实应用服务器:
jndi.properties
src/test/resources
java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory jdbc/abcDS=new://Resource?type=DataSource jdbc/abcDS.JdbcDriver=org.hsqldb.jdbcDriver jdbc/abcDS.JdbcUrl=jdbc:hsqldb:mem:testdb jdbc/abcDS.JtaManaged=true jdbc/abcDS.DefaultAutoCommit=false jdbc/abcDS.UserName=sa jdbc/abcDS.Password=
这是测试类:
public class FinderTest { @BeforeClass public static void startEJB() throws Exception { InitialContext ic = new InitialContext(); ic.lookup("jdbc/abcDS"); } }
不幸的是,没有创建数据源,这就是我一直看到的内容:
[...] javax.naming.NameNotFoundException: Name "jdbc/abcDS" not found. at org.apache.openejb.core.ivm.naming.IvmContext.federate(IvmContext.java:193) at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:150) at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:124) at org.apache.openejb.core.ivm.naming.ContextWrapper.lookup(ContextWrapper.java:115) at javax.naming.InitialContext.lookup(InitialContext.java:392) at com.XXX.FinderTest.startEJB(FinderTest.java:31) [...]
我究竟做错了什么?请帮忙!
ps。顺便说一下,这是怎么回事(怎么回事?):
ic.lookup("java:/openejb/Resource/jdbc/abcDS");
查找时应找到 openejb:Resource/jdbc/abcDS
openejb:Resource/jdbc/abcDS
您也可以在TestCase中进行注入。基本上,您:
src/test/resources/META-INF/application-client.xml
ejb-jar.xml
@LocalClient
initialContext.bind("inject", this)
请参阅examples.ziptestcase- injection中的示例
testcase- injection
编辑 如果查找仍然失败,请发布日志输出(控制台输出)。