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

时间:2010-10-29 14:42:15

标签: java hibernate maven-2 jpa openejb

这是我的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的{​​{1}}文件,它应该在测试期间创建一个数据源,因为没有真实数据源的真实应用服务器:

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");
  }
}

我做错了什么?请帮忙!

PS。顺便说一下它是这样工作的(发生了什么?):

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

1 个答案:

答案 0 :(得分:7)

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

,应该会找到

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

  1. 添加空src/test/resources/META-INF/application-client.xmlejb-jar.xml
  2. 使用@LocalClient
  3. 注释您的测试
  4. 致电initialContext.bind("inject", this)
  5. 请参阅examples.zip

    中的testcase-injection示例

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