EJB如何使用spring boot bean?

时间:2015-08-31 15:54:54

标签: spring-boot glassfish-3

使用我们在以下位置找到的想法:

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

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

EJB如何访问spring引导上下文?

我们尝试了这个:

// ejb
@Stateless
// spring
@Interceptors(MySpringActuatorMetricsCoreTestInterceptor.class)
public class FirstBean {
[...]

EBJ看起来像这样:

{{1}}

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

我们认为有两种选择: - 我们从春季启动时以某种方式获取应用程序上下文。 - 我们可以将MySpringActuatorMetricsCoreTestInterceptor可以创建的上下文提供给spring引导上下文。

有什么解决方案吗?另一种选择?

我们正在使用Glassfish 3.1

谢谢!

1 个答案:

答案 0 :(得分:3)

好的我找到了一种方式: 我刚刚在我的类路径中添加了一个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" />

...

现在我能够将弹簧引导服务注入到我的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引导初始化的资源。这将需要我的进一步测试。