请注意,我正在镜像很接近。
事实上,我的情况有点简单,因为我此时甚至没有使用持久性单元进行测试。我的测试项目提供了一个简单的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 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);
}
}
但它仍然失败。我真的很喜欢这个习语,如果我能在我的项目中成功地使用它,我会非常兴奋。
其他一些注意事项:
- 我按照 Apache 的建议提供一个“空”ejb-jar.xml(在 src/main/resources 中)和 application-client.xml(在 src/test/resources 中),告诉 OpenEJB 扫描类路径 [更新:as事实证明,我做错了。请参阅下面我的回答,了解对我有用的建议。]
- 测试用例注释为
@LocalClient
未被 OpenEJB 引擎识别为实际被正确拾取和处理(例如,我的 MDB 就是这样)
预先感谢您的任何帮助或指导。
此问题可能是由于描述符位置不正确导致的,该描述符提示 OpenEJB 哪些类型的模块可用。
为了确保正确获取测试类,请确保您放置了一个名为application-client.xml
at src/test/resources/META-INF
包含以下内容:
<application-client/>
这应该会强制 OpenEJB 扫描并对存在的情况做出反应@LocalClient
注释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)