請注意,我非常密切地反映了example given here。OpenEJB本地客戶端注入失敗
事實上,我的情況稍微簡單一些,因爲在這一點上我甚至沒有使用持久性單元進行測試。我的測試項目提供了一個簡單的MDB和一個會話bean; MDB和會話bean都正常加載,並且可以在沒有注入的情況下成功進行測試(以受限制的方式)。
建議的注射用@LocalClient
註釋上我的單元測試與已知的錯誤而失敗:
javax.naming.NamingException: Unable to find injection meta-data for [your-class]. Ensure that class was annotated with @org.apache.openejb.api.LocalClient and was successfully discovered and deployed. See http://openejb.apache.org/3.0/local-client-injection.html
當我訪問這個網頁它告訴我,我可能需要一個額外的屬性添加到我的測試用例上下文設置。所以,現在的樣子:
@Override public void setUp() throws Exception { initializeContext(); }
public void initializeContext() {
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
// the property i've added
p.put("openejb.tempclassloader.skip", "annotations");
try {
InitialContext initialContext = new InitialContext(p);
initialContext.bind("inject", this);
} catch (Throwable throwable) {
throwable.printStackTrace();
throw new RuntimeException(throwable);
}
}
但它仍然是失敗的。我非常喜歡這個成語,如果我能夠在我的項目中成功使用它,我會非常興奮。
其他一些注意事項:
- 我提供一個 '空' ejb-jar.xml中(在SRC /主/資源)和應用client.xml的(src/test下/資源)正如Apache建議的,告訴OpenEJB掃描類路徑[更新:事實證明,我做錯了。請參閱下面的爲我工作的建議我的答案。]
- 與
@LocalClient
標註的測試案例不是由OpenEJB的引擎認定爲實際得到回升,妥善處理(如我的MDB是,例如)
在此先感謝您的幫助或指導。
高興你發現了問題,並張貼了答案雙重感謝。我已經提交了一個JIRA進行了改進,我們可以將其添加到我們可以檢查的事項列表中https://issues.apache.org/jira/browse/OPENEJB-1570 – 2011-06-08 02:43:40
備註是@LocalClient不再需要在OpenEJB 4中,任何部署描述符都不是。尚未發佈,但它看起來非常好。我們需要進一步瞭解CDI支持,然後發佈測試版。 – 2011-06-08 02:45:35
謝謝@David! – 2011-06-09 13:35:01