小编典典

将EJB 3注入Spring Bean

spring

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

EJB:

@Remote
public interface MyBean {
}

@Singleton
public class MyBeanImpl implements MyBean{
}

Service:

@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;

and

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

但都没有奏效。

我设法使用以下方法注入了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;

阅读 301

收藏
2020-04-21

共1个答案

小编典典

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

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

这样一来,spring就能在JNDI中搜索以@Resource注释的bean。因此,现在可以做到:

@Resource(mappedName = MyBean.JNDI_NAME)
private MyBean myBean;
2020-04-21