[英]Why datasource is not found in JNDI after injection from jndi.properties?
这是我的persistence.xml
:
<persistence>
<persistence-unit name="MyUnit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/abcDS</jta-data-source>
</persistence-unit>
</persistence>
这是来自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中注射 。 基本上,你:
src/test/resources/META-INF/application-client.xml
或ejb-jar.xml
@LocalClient
注释您的测试 initialContext.bind("inject", this)
请参阅examples.zip中的testcase-injection
示例
编辑如果查找仍然失败,请发布日志输出(控制台输出)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.