使用 Open EJB 配置 JNDI 名称
我正在尝试(单元)测试我的 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 的 INFO 和 WARN 消息>调试或跟踪。
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是“java:”部分搞乱了你的测试用例。基本上 Context.INITIAL_CONTEXT_FACTORY 和“java:”是互斥的。 InitialContext 类对“java:”或任何“foo:”查找有特殊的理解,如果它们位于名称的开头,它将不会使用您指定的 INITIAL_CONTEXT_FACTORY。 JNDI 的一个有点令人沮丧的部分。
如果您查找与日志中打印的名称完全相同的名称,它将起作用。例如这个日志消息:
然后在代码中:
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:
Then in code: