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

这是我的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应在测试期间从中创建数据源,因为缺少具有真实数据源的真实应用服务器:

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

您也可以在TestCase中进行注入。基本上,您:

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

请参阅examples.ziptestcase-

injection中的示例

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

以上是 从jndi.properties注入后,为什么在JNDI中找不到数据源? 的全部内容, 来源链接: utcz.com/qa/408106.html

回到顶部