为什么从jndi.properties注入后,JNDI中找不到datasource?

编程入门 行业动态 更新时间:2024-10-13 08:19:15
本文介绍了为什么从jndi.properties注入后,JNDI中找不到datasource?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

这是我的 persistence.xml :

<持续性>> ; < persistence-unit name =MyUnit> < provider> org.hibernate.ejb.HibernatePersistence< / provider> < jta-data-source> jdbc / abcDS< / jta-data-source> < / persistence-unit> < /余辉>

这是 jndi.properties code> 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( )抛出异常{ InitialContext ic = new InitialContext(); ic.lookup(jdbc / abcDS); } }

不幸的是,数据源没有创建,这就是我一直在看:

[...] javax.naming.NameNotFoundException:名称jdbc / abcDSnot找到。 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。查找(ContextWrapper.java:115)在javax.naming.InitialContext.lookup(InitialContext.java:392)在com.XXX.FinderTest.startEJB(FinderTest.java:31) [...]

我做错了什么?请帮助!

ps。顺便说一句,它以这种方式工作(发生了什么???): $ $ $ $ $ $ $ $> ic.lookup(java:/ openejb /资源/ JDBC / abcDS);

解决方案

如果您查找 openejb:Resource / jdbc / abcDS

你也可以得到注入你的TestCase 。基本上,你:

  • 添加一个空的 src / test / resources / META-INF / application-client.xml 或 ejb-jar.xml
  • 使用 @LocalClient
  • 调用 initialContext.bind(inject,this)
  • 请参阅 testcase-injection 示例dist / openejb / 3.1.3 / openejb-examples-3.1.3.ziprel =noreferrer> examples.zip

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

    This is my persistence.xml:

    <persistence> <persistence-unit name="MyUnit"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>jdbc/abcDS</jta-data-source> </persistence-unit> </persistence>

    This is jndi.properties file from src/test/resources which is supposed to create a datasource during testing, since a real application server with a real datasource is absent:

    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=

    This is the test class:

    public class FinderTest { @BeforeClass public static void startEJB() throws Exception { InitialContext ic = new InitialContext(); ic.lookup("jdbc/abcDS"); } }

    Unfortunately, the datasource is not created and this is what I keep seeing:

    [...] 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) [...]

    What am I doing wrong? Please help!

    ps. By the way it works this way (what's going on???):

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

    解决方案

    Should be found if you lookup openejb:Resource/jdbc/abcDS

    As well you can get injection in your TestCase. Basically, you:

  • add an empty src/test/resources/META-INF/application-client.xml or ejb-jar.xml
  • Annotate your test with @LocalClient
  • Call initialContext.bind("inject", this)
  • See the testcase-injection example in the examples.zip

    EDIT If the lookup still fails, post your log output (the console output).

    更多推荐

    为什么从jndi.properties注入后,JNDI中找不到datasource?

    本文发布于:2023-10-26 18:25:15,感谢您对本站的认可!
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:中找   properties   jndi   datasource   JNDI

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!