OpenEJB本地客户端注入失败
请注意,我正在非常仔细地反映这里给出的例子 。
事实上,我的情况有点简单,因为我现在甚至没有使用持久性单元进行测试。 我的测试项目提供了一个简单的MDB和一个会话bean; MDB和会话bean都正常加载,并且可以在没有注入的情况下成功测试(以约束的方式)。
在我的unit testing中使用@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 / main / resources中)和一个application-client.xml(在src / test / resources中),如Apache所建议的那样,告诉OpenEJB扫描类路径[UPDATE:as事实certificate,我做错了。 请参阅下面的答案,了解对我有用的建议。]
- 使用
@LocalClient
注释的@LocalClient
不会被OpenEJB引擎识别为实际被正确拾取和处理(例如,我的MDB)
在此先感谢任何帮助或指导。
这个问题可能是由描述符的位置不正确引起的,这些描述符提示OpenEJB哪种模块可用。
为确保正确选择测试类,请确保在src/test/resources/META-INF
放置名为application-client.xml
的文件,其中包含以下内容:
这应该强制OpenEJB扫描并对@LocalClient
注释的存在做出反应。
当我尝试在名为tomee-embedded-trial的测试项目中测试内容时,我遇到了类似的问题,结果发现openejb忽略了名为tomee的东西 – 。*。
我通过指定以下系统属性为我修复了它: openejb.deployments.classpath.include=".*-trial.*"
openejb.deployments.package.include=".*-trial.*"
- Spring 3.0dependency injection的最小JAR
- Guice:Singleton.class和@Singleton之间的差异
- 使用Jersey 2.0,如何为每个请求注册一个可绑定的实例?
- 使用Guice构造函数注入
- 抽象超类中的Generic @Inject’d字段
- 需要一些帮助才能理解Anotations – Spring annotations
- 为什么Spring的@Configurable有时可以工作,有时候不工作?
- Guice在注入的构造函数参数上忽略@Nullable
- Spring IoC – dependency injection – > NullPointerException