2010-05-19 99 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