gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:24:03 29 4
gpt4 key购买 nike

这是我的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/resourcesjndi.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)
[...]

我做错了什么?请帮忙!

附言。顺便说一句,它是这样工作的(发生了什么???):

ic.lookup("java:/openejb/Resource/jdbc/abcDS");

最佳答案

如果你查找 openejb:Resource/jdbc/abcDS 应该可以找到

你也可以获得injection in your TestCase .基本上,您:

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

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

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

关于java - 为什么从 jndi.properties 注入(inject)后在 JNDI 中找不到数据源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4052898/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com