当前位置: 首页 > 知识库问答 >
问题:

在无状态EJB中访问Spring Web应用程序上下文

宗政松
2023-03-14

目前,我们使用Spring 4,有一个Java类加载所有xml配置文件:

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

每个孩子都知道自己父母的想法,一切都很顺利。现在,我必须在Websphere应用服务器上使用IBM EJB与遗留系统进行通信。这个EJB被调用,现在我想使用我们的Spring上下文来获得一些服务。

EJB被定义为

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

我已经读过关于SpringBeanAutowiringInterceptor的文章,但我不明白重点。我不需要一个简单的xml文件来加载,所以有人能给我提供另一种方法在EJB中自动连接mit Spring bean吗?

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

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

共有1个答案

翟迪
2023-03-14

您需要按照以下步骤创建ejb

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

您需要使用

@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(); 
    }
}

编辑

调用ejb到spring服务方法

@Stateless
@Interceptors(SpringBeanAutowiringInterceptor.class)
public class TestManagerImpl implements TestManager {

    // automatically injected with a matching Spring bean
    @Autowired
    private TestService testService ;

    // for business method, delegate to POJO service impl.
    public String myFacadeMethod(...) {
        return testService.myMethod(...);
    }

    ...

}

希望它对你有用!!

 类似资料:
  • 似乎OAuth2AuthenticationProcessingFilter在spring-security-oauth Version2.0.6中发生了变化(参见此处)。现在我需要将无状态设置为false。如何在应用程序上下文XML中做到这一点?(因未经许可,无法对原帖发表评论)

  • 我是kubernetes的新手,我尝试使用Kubernete运行小型应用程序。我创建了docker镜像并使用minikube运行它。所以应用程序非常简单,它只打印hello world。 我的dockerfile文件: deployment.yaml 我运行命令: 创建deployment.yaml 输出是: 服务/myhelloworldservice已创建 创建的部署.apps/我的问候世界

  • 问题内容: 问候 , 有什么方法可以将值从web.xml context-param转换为Spring上下文吗? 例如,我将web.xml中的值定义为: 我想将该值分配给bean属性为: 提前致谢? 问题答案: 是的- 本文介绍了详细信息。简而言之,您需要: 然后使用以下属性: 或搭配

  • 我正在用Spring Web、Spring Security和Spring social创建一个Spring启动应用程序。该应用程序包含利用基本身份验证实现安全的rest服务。我试图将Spring配置为使应用程序无状态,但是当我使用浏览器向web服务发出请求时,浏览器会提示输入用户凭据,但由于会话创建,所有之前的请求都使用相同的用户凭据。我已将应用程序配置为阻止这种情况发生,但仍然存在问题\ 我应

  • 我需要一些使用远程ejb调用的帮助。有以下设置: 背景: 一个JavaEE web应用程序(命名为app1)托管在一个古老的WAS8应用程序服务器上。应用程序为应用程序之间的通信提供至少一个(已知)远程ejb。 基础设施信息: WAS8使用java Version1.6.0运行在我公司的Intranet上的linux服务器上。WAS8是8.0.0.15nd版本。 websphere liberty

  • 我有一些测试(我没有编写它们,我正在维护它们)使用spring ContextConfiguration注释来提供应用程序上下文: 总之,有几个问题。我不太熟悉spring自定义上下文位置,这些位置不指定file:/或classpath:/。这是什么意思?这个测试类路径上有很多同名的资源。都上膛了吗?如果不是,Spring如何知道要加载哪个? 第二,有没有一种方法可以通过编程方式访问以这种方式连接