【发布时间】:2014-04-27 03:33:51
【问题描述】:
我在非托管类中有一个方法。此方法返回另一个类的对象。根据上下文(如果此类是否在 Java EE 上下文中),它应该返回不同的对象。在 Java EE 上下文中,它应该返回正确的注入实例,否则它应该返回一个代理。
public class TestHelperConnector {
public TestHelper getInstance(){
try {
// problem: the BeanManager is never found
BeanManager beanManager = (BeanManager) new InitialContext().lookup("java:comp/BeanManager");
return beanManager.getBeans(TestHelper.class);
} catch (NameNotFoundException e) {
// no bean manager -> no Java EE context (?)
TestHelper testHelperProxy = ... do jmx connection
return testHelper;
}
}
}
所以代理正在工作,但一直在工作。我从来没有得到 BeanManager 的实例。即使我们从托管类调用。
@Stateless
public class Foo {
public void doIt() {
// problem: we never get the injected instance, he always creates the proxy
TestHelper testHelper = new TestHelperConnector().getInstance();
}
}
背景:我们正在使用一个 TestHelper 类,它包含大量支持测试的方法。此 TestHelper 用于单元测试和集成(arquillian)测试以及验收(硒)测试。 TestHelper 是如此集成,以至于一直手动选择它会很痛苦,因此我们需要一种方法来自动获取正确的实例,无论我们是否在 Java EE 上下文中。
系统:jBoss 7.1.1.Final
为什么我们不获取 BeanManager 实例? 有没有比我们目前做的更好的方法?
【问题讨论】:
标签: jakarta-ee jboss7.x cdi inject