Настройте имена JNDI с помощью Open EJB - PullRequest
2 голосов
/ 19 мая 2010

Я пытаюсь (модульно) протестировать мой класс EJB без необходимости запуска среды websphere. Сейчас я использую Open EJB , но есть некоторые проблемы с разрешением имен JNDI для других EJB, которые используются в моем EJB ... и у меня нет способа внедрить ложные классы из моего теста прямо сейчас.

Получение InitialContext

final Properties properties = new Properties();
properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
properties.setProperty("log4j.category.OpenEJB.options ", "debug");
properties.setProperty("log4j.category.OpenEJB.startup ", "debug");
properties.setProperty("log4j.category.OpenEJB.startup.config ", "debug");
properties.setProperty("MyOwnDatasource.JdbcDriver ", "com.ibm.as400.access.AS400JDBCDriver");
properties.setProperty("MyOwnDataSource.JdbcUrl ", "jdbc:as400:MYHOSTNAME;database name=MYDATABASE;libraries=MYDEFAULTTABLE");
ic = new InitialContext(properties);

В моем тестируемом классе есть поиск java:comp/env/ejb/PrefixEjbNameLocalHome, и я не могу настроить Open EJB для генерации имен JNDI в этом формате.

Дополнительное свойство для формата имени JNDI

Я попытался установить правило форматирования следующим образом:

properties.setProperty("openejb.jndiname.format ", "comp/env/ejb/{interfaceClass}");

Свойства не используются?

Также конфигурация регистрации не используется. Я вижу только сообщения INFO и WARN от Open EJB, хотя я установил log4j.category.OpenEJB.* и т.п. на DEBUG или TRACE .

1 Ответ

3 голосов
/ 19 мая 2010

Это часть "java:", которая испортила ваш тестовый пример. В основном Context.INITIAL_CONTEXT_FACTORY и "java:" являются взаимоисключающими. Класс InitialContext обладает особым пониманием «java:» или любых поисков «foo:», и если они находятся в начале имени, он не будет использовать указанный вами INITIAL_CONTEXT_FACTORY Несколько расстраивающая часть JNDI.

Если вы посмотрите имя точно так, как напечатано в журнале, оно будет работать. Так, например, это сообщение журнала:

INFO - Jndi(name=WidgetBeanRemote) --> Ejb(deployment-id=WidgetBean)

Затем в коде:

Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
// set any other properties you want
Context context = new InitialContext(p);

Object o = context.lookup("WidgetBeanRemote");
...