Java 初始化@EJB字段

Java 初始化@EJB字段,java,spring,jboss,ejb,Java,Spring,Jboss,Ejb,我是EJB的新手 我有一个包含以下字段的类 @Stateless @TransactionManagement(TransactionManagementType.CONTAINER) @TransactionAttribute(TransactionAttributeType.REQUIRED) public class MyServiceFacadeBean implements MyServiceFacadeLocal, MyServiceFacadeRemote { @EJB(

我是EJB的新手

我有一个包含以下字段的类

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class MyServiceFacadeBean implements MyServiceFacadeLocal, MyServiceFacadeRemote {

    @EJB(name = "ejb/CatalogService")
    private CatalogService catalogService = null;
    ....
}
我在Sring IOC中注入对象实现时实例化了该对象:

<bean id="contestServiceFacade" class="my.company.service.facade.contest.ejb.MyServiceFacadeBean">
 </bean>

但在我的控制器中调用it方法之后,我在catalogService字段上得到了NullPointerException。那么,我的外观应该如何正确实例化呢

更新1:我尝试用另一种方法插入bean。也许在回答这个问题时会有所帮助


更新2:我不能更改地雷EJB的来源,但可以为地雷控制器更改来源。

如果您使用JBoss 5,则不能将
EJB
投入战争。您需要使用
EJB
jar
war
文件(+lib-jar)创建一个ear文件。有关
ear
的更多信息可以在JavaEE教程()中找到

当EJB在ear中正确打包后,Jboss将在部署时启动它们

Spring将能够通过JDNI访问它们,如下所述:


另一个选项是切换到JBoss7,因为
EJB
可以在
war
中。但是这需要一些努力,因为它们改变了JBoss7中的很多东西。

如果您使用JBoss5,您就不能将
EJB
投入战争。您需要使用
EJB
jar
war
文件(+lib-jar)创建一个ear文件。有关
ear
的更多信息可以在JavaEE教程()中找到

当EJB在ear中正确打包后,Jboss将在部署时启动它们

Spring将能够通过JDNI访问它们,如下所述:


另一个选项是切换到JBoss7,因为
EJB
可以在
war
中。但是这需要一些努力,因为它们改变了Jboss 7中的很多东西。

如果您希望Spring在EJB中注入属性,您需要在类上使用拦截器:

@Interceptors(SpringBeanAutowiringInterceptor.class)
public class MyServiceFacadeBean ... {

        @Autowired
        private CatalogService catalogService;

        ...
}

如果希望Spring在EJB中注入属性,则需要在类上使用拦截器:

@Interceptors(SpringBeanAutowiringInterceptor.class)
public class MyServiceFacadeBean ... {

        @Autowired
        private CatalogService catalogService;

        ...
}

您正在混合EJB和SpringBean。注释@EJB是为了获得企业java bean,而不是Spring bean。
您应该更改为@Autowired注释,或者将CatalogService更改为EJB(类中有正确的EJB注释),然后


在xml文件中。


还要注意,您需要一个支持EJB的容器,比如Glassfish、JBoss(Tomcat不是)。

您正在混合EJB和SpringBean。注释@EJB是为了获得企业java bean,而不是Spring bean。
您应该更改为@Autowired注释,或者将CatalogService更改为EJB(类中有正确的EJB注释),然后


在xml文件中。


还要注意,您需要一个支持EJB的容器,比如Glassfish、JBoss(Tomcat不是)。

在Spring和EJB之间进行选择。在Spring环境中使用EJB没有多大意义,反之亦然。它们提供相同的服务,但不同。Spring没有EJB,也不理解EJB注释。谢谢你的回答,但我做不到,我只是一个汇编程序,应该部署这些东西,所以不能改变应用程序架构。对于Spring上的EJB,同时使用它没什么大不了的,如果您阅读了链接到的文档,您会注意到您需要在Spring XML文件中为EJB配置代理,并且您不能使用EJB注释在控制器中注入对EJB的引用,因为EJB不是Spring用于注入的注释。请改用自动连线。谢谢,我已经尝试过代理方法,但运气不好(请参阅更新部分中有关我的相关问题的参考资料)。如果我不能更改EJB的代码,我不确定是否可以使用Autowire方法。你能不能在这里更详细一点,或者提供一些示例代码?很简单。Spring不关心
@EJB
注释。它不会阅读它们,也不会将它们用于任何用途。如果要将SpringBean(XML文件中声明的代理)注入另一个SpringBean(控制器),则必须在控制器中使用SpringAutoWired注释。不是EJB注释。在Spring和EJB之间选择。在Spring环境中使用EJB没有多大意义,反之亦然。它们提供相同的服务,但不同。Spring没有EJB,也不理解EJB注释。谢谢你的回答,但我做不到,我只是一个汇编程序,应该部署这些东西,所以不能改变应用程序架构。对于Spring上的EJB,同时使用它没什么大不了的,如果您阅读了链接到的文档,您会注意到您需要在Spring XML文件中为EJB配置代理,并且您不能使用EJB注释在控制器中注入对EJB的引用,因为EJB不是Spring用于注入的注释。请改用自动连线。谢谢,我已经尝试过代理方法,但运气不好(请参阅更新部分中有关我的相关问题的参考资料)。如果我不能更改EJB的代码,我不确定是否可以使用Autowire方法。你能不能在这里更详细一点,或者提供一些示例代码?很简单。Spring不关心
@EJB
注释。它不会阅读它们,也不会将它们用于任何用途。如果要将SpringBean(XML文件中声明的代理)注入另一个SpringBean(控制器),则必须在控制器中使用SpringAutoWired注释。不是EJB注释。我使用JBoss5。我可以;不要更改EJB的代码。我需要正确地部署它。编写正确的applicationContext.xml和其他一些东西来插入企业Java bean是我在这里遇到的问题。您需要选择如何注入bean。如果您需要使用Spring,请将“@EJB”更改为“@Autowired1)我知道di