Why datasource is not found in JNDI after injection from jndi.properties?

梦想与她 提交于 2019-12-30 18:01:33

问题


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

回答1:


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

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

  1. add an empty src/test/resources/META-INF/application-client.xml or ejb-jar.xml
  2. Annotate your test with @LocalClient
  3. 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).



来源:https://stackoverflow.com/questions/4052898/why-datasource-is-not-found-in-jndi-after-injection-from-jndi-properties

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!