Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用开放EJB配置JNDI名称_Java_Unit Testing_Junit_Openejb - Fatal编程技术网

Java 使用开放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

我正在尝试(单元)测试我的EJB类,而不必启动websphere环境。现在我正在使用,但是在解析EJB中使用的其他EJB的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);
在我测试的类中,有一个
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上部署时查找的名称。