在无状态EJB中访问Spring Web Replication Context

时间:2016-04-29 08:56:01

标签: spring ejb interceptor

目前我们使用Spring 4并且有一个Java类加载我们所有的xml-config文件:

  • Root:Basic Framework
  • 儿童:项目申请服务
  • 子项目:项目应用程序工作流程
  • 儿童:框架控制器
  • Child:CXF Web应用程序上下文

每个孩子都知道它的父母的豆子,而且每个人都可以正常工作。现在,我必须在Websphere Application Server上使用IBM EJB与遗留系统进行通信。这个EJB被调用,现在我想使用我们的Spring Context来获得一些服务。

EJB定义为

@Stateless(mappedName = "ejb/LegacyRocks")
@RemoteHome(com.ibm.websphere.ola.ExecuteHome.class)
public class WolaUseCaseOne {...}

我已经阅读了有关SpringBeanAutowiringInterceptor的内容,但我不明白这一点。我没有一个简单的xml文件来加载,所以任何人都可以用另一种方式为EJB内部的autowire mit Spring Beans提供吗?

PS: 我也找到了这篇文章(http://www.schakko.de/2013/10/11/sharing-the-spring-application-context-from-a-war-with-ejbs/),但我们不使用JSF而且它对我没有帮助

我已经读过,没有办法注入完整的上下文,因为我们有一个Web应用程序上下文,并且EJB中没有这样的Web上下文......?

1 个答案:

答案 0 :(得分:0)

您需要按照以下

创建ejb
FirefoxProfile.layoutOnDisk

您需要使用

实现spring服务类
@Local
public interface TestManager {

    boolean isValid();

} 

@Stateless(name = "java:global/TestManagerImpl", mappedName = "java:global/TestManagerImpl")
@EJB(name = "java:global/TestManagerImpl", beanInterface = TestManager.class)
public class TestManagerImpl implements TestManager {

    @PostConstruct
    public void ejbCreate() {

    }

    @PreDestroy
    public void ejbDestroy() {

    }

    @Override
    public boolean isValid(){
        //your code
    }
}

已修改

将ejb调用为spring service方法

@Service(value = "testServiceImpl")
public class TestServiceImpl {

    @EJB(name = "java:global/TestManagerImpl", mappedName = "java:global/TestManagerImpl")
    private TestManager testManager;

    @Override
    public boolean isValid(){
      retrun testManager.isValid(); 
    }
}

希望它对你有用!!