gpt4 book ai didi

spring - 将 EJB 3 注入(inject) Spring Bean

转载 作者:行者123 更新时间:2023-12-04 11:41:05 25 4
gpt4 key购买 nike

我正在尝试将 EJB 注入(inject) Spring (3.1.2) 服务(都在 不同的 WARs 中)
两者都非常简单(删除方法以简化示例):

EJB:

@Remote
public interface MyBean {
}

@Singleton
public class MyBeanImpl implements MyBean{
}

服务:
@Service
public class MyServiceImpl implements MyService{
}

乍一看事情很简单,但我试过了:
@EJB(lookup = "java:global/ejbApp/MyBeanImpl!com.my.MyBean")
private MyBean myBean;

它没有用。然后我也尝试了:
@EJB(mappedName = "java:global/ejbApp/MyBeanImpl!com.my.MyBean")
private MyBean myBean;


@Resource(mappedName = "java:global/ejbApp/MyBeanImpl!com.my.MyBean")
private MyBean myBean;

但都没有奏效。

我设法使用以下方法注入(inject)我的 EJB:
<jee:jndi-lookup id="myBean" jndi-name="java:global/ejbApp/MyBeanImpl!com.my.MyBean" />

在我的 spring 配置和服务中:
@Autowired
private MyBean myBean;

但我真的不喜欢这个解决方案。我想将我的 JNDI 路径放在 中一些能够做的注释例如:
@EJB(lookup = MyBean.JNDI_NAME)
private MyBean myBean;

最佳答案

我们找到了非常好的和简单的解决方案。
在 spring 配置文件中必须放入:

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">
<property name="alwaysUseJndiLookup" value="true" />
</bean>

这使 spring 能够搜索 bean 类在 JNDI 中使用 @Resource 进行注释。
所以现在可以做:
@Resource(mappedName = MyBean.JNDI_NAME)
private MyBean myBean;

关于spring - 将 EJB 3 注入(inject) Spring Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12963405/

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