Java 使用开放EJB配置JNDI名称
我正在尝试(单元)测试我的EJB类,而不必启动websphere环境。现在我正在使用,但是在解析EJB中使用的其他EJB的JNDI名称时存在一些问题。。。现在我无法从测试中注入模拟类 获取初始上下文Java 使用开放EJB配置JNDI名称,java,unit-testing,junit,openejb,Java,Unit Testing,Junit,Openejb,我正在尝试(单元)测试我的EJB类,而不必启动websphere环境。现在我正在使用,但是在解析EJB中使用的其他EJB的JNDI名称时存在一些问题。。。现在我无法从测试中注入模拟类 获取初始上下文 final Properties properties = new Properties(); properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContext
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
的查找,我不能将openejb设置为以该格式生成JNDI名称
JNDI名称格式的附加属性
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);
我尝试如下设置格式规则:
properties.setProperty("openejb.jndiname.format ", "comp/env/ejb/{interfaceClass}");
未使用属性?
此外,未使用日志记录配置。我只看到来自OpenEJB的信息和警告消息,尽管我将log4j.category.OpenEJB.*
等设置为调试或跟踪。基本上,Context.INITIAL_Context_工厂和“java:”是互斥的。InitialContext类对“java:”或任何“foo:”查找有特殊的理解,如果它们位于名称的开头,它将不使用您指定的初始上下文工厂。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");
哇,谢谢。我已经为此奋斗了一段时间。特别是要找到一个可以在openEjb测试和在Tomee上部署时查找的名称。