Почему источник данных не найден в JNDI после внедрения из jndi.properties? - PullRequest
7 голосов
/ 29 октября 2010

Это мой 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)
[...]

Чтоя делаю не так?Пожалуйста, помогите!

пс.Кстати, так работает (что происходит ???):

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

1 Ответ

7 голосов
/ 29 октября 2010

Должен быть найден, если вы ищете openejb:Resource/jdbc/abcDS

Также вы можете получить инъекцию в свой TestCase . По сути, вы:

  1. добавить пустую src/test/resources/META-INF/application-client.xml или ejb-jar.xml
  2. Аннотируйте свой тест с помощью @LocalClient
  3. Звоните initialContext.bind("inject", this)

См. Пример testcase-injection в examples.zip

РЕДАКТИРОВАТЬ Если поиск по-прежнему не удается, опубликуйте вывод журнала (вывод консоли).

...