Mic*_*iel 7 spring ejb-3.1 jboss7.x
我试图将EJB注入到Spring(3.1.2)服务中(两者都在不同的 WAR中)两者都非常简单(为简化示例而移除了方法):
EJB:
@Remote
public interface MyBean {
}
@Singleton
public class MyBeanImpl implements MyBean{
}
Run Code Online (Sandbox Code Playgroud)
服务:
@Service
public class MyServiceImpl implements MyService{
}
Run Code Online (Sandbox Code Playgroud)
乍一看,事情很简单,但我试过:
@EJB(lookup = "java:global/ejbApp/MyBeanImpl!com.my.MyBean")
private MyBean myBean;
Run Code Online (Sandbox Code Playgroud)
它没有用.然后我也尝试过:
@EJB(mappedName = "java:global/ejbApp/MyBeanImpl!com.my.MyBean")
private MyBean myBean;
Run Code Online (Sandbox Code Playgroud)
和
@Resource(mappedName = "java:global/ejbApp/MyBeanImpl!com.my.MyBean")
private MyBean myBean;
Run Code Online (Sandbox Code Playgroud)
但都没有奏效.
我设法使用以下方法注入我的EJB:
<jee:jndi-lookup id="myBean" jndi-name="java:global/ejbApp/MyBeanImpl!com.my.MyBean" />
Run Code Online (Sandbox Code Playgroud)
在我的弹簧配置和服务中:
@Autowired
private MyBean myBean;
Run Code Online (Sandbox Code Playgroud)
但我真的不喜欢这个解决方案.我想在一些注释中使用我的JNDI路径,例如:
@EJB(lookup = MyBean.JNDI_NAME)
private MyBean myBean;
Run Code Online (Sandbox Code Playgroud)
我们找到了非常好的简单解决方案.进入spring配置文件一个必须放:
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">
<property name="alwaysUseJndiLookup" value="true" />
</bean>
Run Code Online (Sandbox Code Playgroud)
这使得spring能够在JNDI中搜索使用@Resource注释的bean.所以现在可以这样做:
@Resource(mappedName = MyBean.JNDI_NAME)
private MyBean myBean;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7121 次 |
| 最近记录: |