使用 Open EJB 配置 JNDI 名称

发布于 2024-09-02 06:17:59 字数 1379 浏览 3 评论 0原文

我正在尝试(单元)测试我的 EJB 类,而无需启动我的 websphere 环境。现在我正在使用 Open EJB,但是在解决以下问题时存在一些问题我的 EJB 中使用的其他 EJB 的 JNDI 名称...我现在无法从测试中注入模拟类。

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

未使用属性?

另外,未使用日志记录配置。尽管我将 log4j.category.OpenEJB.* 等设置为 ,但我只看到来自 Open EJB 的 INFOWARN 消息>调试跟踪

I'm trying to (unit) test my EJB class without having to startup my websphere environment. Now I'm using Open EJB, but there are some issues with resolving the JNDI Names for other EJBs that are used within my EJB... and there is no way for me to inject mocked classes from my test right now.

Getting the 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);

Inside my class under test there is a lookup for java:comp/env/ejb/PrefixEjbNameLocalHome and I can not set Open EJB to generate JNDI names in that format.

Additional Property for JNDI name format

I tried setting the formatting rule like this:

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

Properties aren't used?

Also the logging configuration isn't used. I'm only seeing INFO and WARN messages from Open EJB, although I set log4j.category.OpenEJB.* and the like to DEBUG or TRACE.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

用心笑 2024-09-09 06:17:59

这是“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");

It's the "java:" part that is messing up your test case. Basically Context.INITIAL_CONTEXT_FACTORY and "java:" are mutually exclusive. The InitialContext class has a special understanding of "java:" or any "foo:" lookups and if they are at the beginning of the name it will not use INITIAL_CONTEXT_FACTORY you specified. A somewhat frustrating part of JNDI.

If you lookup the name exactly as printed in the log, it will work. So for example this log message:

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

Then in code:

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");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文