Java 在Spring中注入EJB

Java 在Spring中注入EJB,java,spring,jakarta-ee,ejb-3.0,Java,Spring,Jakarta Ee,Ejb 3.0,我使用Java EE API 7定义了EJB,如下所示: @Stateless @LocalBean public class Foo { @Inject private Boo boo; public void doFoo(Collection<Object> c) { boo.doSomething(c); } } 以及: 是否可以在Spring中将Foo类的实例作为EJB注入?如果是,怎么做?我理解您的问题是:使用spri

我使用Java EE API 7定义了EJB,如下所示:

@Stateless
@LocalBean
public class Foo {

    @Inject
    private Boo boo;

    public void doFoo(Collection<Object> c) {
        boo.doSomething(c);
    }

}
以及:


是否可以在Spring中将Foo类的实例作为EJB注入?如果是,怎么做?

我理解您的问题是:使用spring将请求范围的bean注入到另一个bean中有问题。 所以试试这个:

<bean id="boo" class="Boo" scope="request">
  <aop:scoped-proxy/>
</bean>

<bean id="foo" class="Foo">
  <property name="boo" ref="Boo" />
</bean>

我将您的问题理解为:您在使用spring将请求范围的bean注入另一个bean时遇到了问题。 所以试试这个:

<bean id="boo" class="Boo" scope="request">
  <aop:scoped-proxy/>
</bean>

<bean id="foo" class="Foo">
  <property name="boo" ref="Boo" />
</bean>

您可以使用注入拦截器

对于EJB3会话bean和消息驱动bean,Spring提供了 方便的拦截器,解决Spring 2.5的@Autowired EJB组件类中的注释: org.springframework.ejb.interceptor.SpringBeanAutowiringInterceptor。 此拦截器可以通过@Interceptors应用 EJB组件类中的注释,或通过 EJB部署描述符中的侦听器绑定XML元素

代码示例:

@Stateless
@Interceptors(SpringBeanAutowiringInterceptor.class)
public class Foo { 

    @Autowired
    private Boo boo;

}
有关更多信息,请参阅

如果需要从spring访问EJB,可以在spring-context.xml配置中定义bean,如下面的示例所示

<jee:local-slsb id="myComponent" jndi-name="ejb/fooBean"
      business-interface="com.Foo"/>

您可以在第18.2.2节中了解更多信息。访问上面引用的本地SLSB。

您可以使用注入拦截器

对于EJB3会话bean和消息驱动bean,Spring提供了 方便的拦截器,解决Spring 2.5的@Autowired EJB组件类中的注释: org.springframework.ejb.interceptor.SpringBeanAutowiringInterceptor。 此拦截器可以通过@Interceptors应用 EJB组件类中的注释,或通过 EJB部署描述符中的侦听器绑定XML元素

代码示例:

@Stateless
@Interceptors(SpringBeanAutowiringInterceptor.class)
public class Foo { 

    @Autowired
    private Boo boo;

}
有关更多信息,请参阅

如果需要从spring访问EJB,可以在spring-context.xml配置中定义bean,如下面的示例所示

<jee:local-slsb id="myComponent" jndi-name="ejb/fooBean"
      business-interface="com.Foo"/>

您可以在第18.2.2节中了解更多信息。访问上面引用的本地SLSB。

因此,我无法完全分离注入纯EJB的两个框架;它被部署为jar。出于某些原因,我想将此EJB连接到一个Spring应用程序中。刚刚更新了我关于如何从springMmm访问EJB的答案,很抱歉打扰您,但是jndi名称定义是什么?它是您的EJB的名称,当您使用注释时,它可能是完整的包名+类:com.package.Foo。。。你也可以在启动应用程序时检查ejb的名称,它在控制台中列出了名称。我不能完全分离注入纯ejb的两个框架;它被部署为jar。出于某些原因,我想将此EJB连接到一个Spring应用程序中。刚刚更新了我关于如何从springMmm访问EJB的答案,很抱歉打扰您,但是jndi名称定义是什么?它是您的EJB的名称,当您使用注释时,它可能是完整的包名+类:com.package.Foo。。。您还可以在启动应用程序时检查ejb的名称,它会在控制台中列出该名称