2010-05-19 64 views
2

我试图(单元)测试我的EJB类,而无需启动我的websphere环境。现在我正在使用Open EJB,但在解决EJB中使用的其他EJB的JNDI名称时存在一些问题......并且现在无法从我的测试中注入模拟类。使用Open 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查找,我不能设置打开EJB生成该格式的JNDI名称。

为JNDI名称格式的附加属性

我尝试设置格式规则是这样的:

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

属性不被使用?

另外,不使用日志记录配置。我只能看见INFOWARN从打开EJB的消息,虽然我设置log4j.category.OpenEJB.*等以DEBUGTRACE

回答

3

这是搞乱你的测试用例的“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"); 
+0

哇感谢。我一直在为此奋战一段时间。特别是要找到一个可以在使用openEjb进行测试并在Tomee上部署时查找的名称。 – AmanicA 2014-05-09 16:31:19