假设您有两个 @Local
的实现。界面
@Local
public interface LocalInterface {
}
@Stateless
public class MyFirstImplementation implements LocalInterface {
}
@Stateless
public class MySecondImplementation implements LocalInterface {
}
而我想选择,无需重新编译我想要使用的项目(即在运行时或使用外部配置属性)(MyFirstImplementation 或 MySecondImplementation)。
public class MyClass {
@EJB
LocalInterface local;
}
一旦选择了一种实现方式,它就不必改变。如果有帮助,我正在使用 JBoss 5.1。
最佳答案
您可以使用部署描述符来实现它 - ejb-jar.xml .像这样的东西(可能不是 100% 准确,但我认为你明白了):
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>MyClass</ejb-name>
<ejb-ref>
<ejb-ref-name>ejb/myLocalReferencedBean</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local>com.yourpackage.LocalInterface</local>
<ejb-link>MyFirstImplementation</ejb-link>
<injection-target>local</injection-target>
</ejb-ref>
</session>
<session>
<ejb-name>MyFirstImplementation</ejb-name>
<!-- ... -->
</session>
<session>
<ejb-name>MySecondImplementation</ejb-name>
<!-- ... -->
</session>
</enterprise-beans>
</ejb-jar>
另一种方法是使用此处描述的 CDI:Inject @EJB bean based on conditions
关于jakarta-ee - 选择要注入(inject)的 EJB 无需重新编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7927681/