为什么在从jndi.properties注入后在JNDI中找不到数据源?

这是我的persistence.xml

   org.hibernate.ejb.HibernatePersistence jdbc/abcDS   

这是来自src/test/resources jndi.properties文件,它应该在测试期间创建一个数据源,因为缺少一个真正的数据源的真实应用服务器:

 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中注射 。 基本上,你:

  1. 添加一个空的src/test/resources/META-INF/application-client.xmlejb-jar.xml
  2. 使用@LocalClient注释您的测试
  3. 调用initialContext.bind("inject", this)

请参阅examples.zip中的testcase-injection 示例

编辑如果查找仍然失败,请发布日志输出(控制台输出)。