gpt4 book ai didi

spring-boot - EJB 如何使用 Spring Boot Bean?

转载 作者:行者123 更新时间:2023-12-01 13:50:18 26 4
gpt4 key购买 nike

使用我们发现的想法:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/ejb.html#ejb-implementation-ejb3

我们想使用拦截器来从 EJB 访问 Spring Boot bean。但问题是,文档的示例使用了新的上下文。

EJB 如何访问 Spring Boot 上下文?

我们试过这个:

public class MySpringActuatorMetricsCoreTestInterceptor extends SpringBeanAutowiringInterceptor {

//Spring boot application context
@Autowired
ApplicationContext applicationContext;

@SuppressWarnings("resource")
@Override
protected BeanFactory getBeanFactory(Object target) {
return applicationContext.getAutowireCapableBeanFactory();
}

}

EBJ 看起来像这样:
// ejb
@Stateless
// spring
@Interceptors(MySpringActuatorMetricsCoreTestInterceptor.class)
public class FirstBean {
[...]

问题是:应用程序上下文尚未初始化,因为 EJB 初始化发生在之前并因此发生 -> 空指针异常。

我们认为有两种选择:
- 我们从 Spring Boot 中以某种方式获取应用程序上下文。
- 我们可以将 MySpringActuatorMetricsCoreTestInterceptor 创建的上下文提供给 Spring Boot 上下文。

有什么解决办法吗?另外一个选项?

我们正在使用 Glassfish 3.1

谢谢!

最佳答案

好的,我找到了一种方法:
我刚刚在我的类路径中添加了一个 beanRefContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans_2_0.dtd">
<beans>
<bean class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg value="classpath*:simpleContext.xml" />
</bean>
</beans>

它在我的类路径中也引用了一个名为 simpleContext.xml 的新 applicationContext 文件:

...
<!-- Enable annotation support within our beans -->
<context:annotation-config/>
<context:spring-configured/>
<context:component-scan base-package="your.package.path" />
<context:property-placeholder location="classpath*:*.properties" />

...

现在我可以将 Spring Boot 服务注入(inject)到我的 EJB 中:
@Stateless(name = "RightsServiceEJB")
@Remote
@Interceptors(SpringBeanAutowiringInterceptor.class)
public class RightsServiceEJB implements IRightsServiceEJB {

@Autowired
ExampleService exampleService;

@Override
public String sayHello() {
return exampleService.sayHello();
}

}

然而,现在这是一个小小的 hello world 示例,我不确定 Spring 服务是否仍然可以引用由 Spring boot 初始化的资源。这需要在我这边进行进一步的测试。

关于spring-boot - EJB 如何使用 Spring Boot Bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32315254/

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