gpt4 book ai didi

jakarta-ee - 选择要注入(inject)的 EJB 无需重新编译

转载 作者:行者123 更新时间:2023-12-03 23:30:36 24 4
gpt4 key购买 nike

假设您有两个 @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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com