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

通过CDI在EntityListener中注入EJB失败(JPA 2.1)

笪昌翰
2023-03-14

我正在尝试将一个无状态的EJB注入我的EntityListner。调用了我的EntityListener的@PrePresist方法,但注入的EJB解析为null,因此引发了NullPointerException。

public class MyEntityListener {

    @Inject 
    private MyService myService;  // @Stateless EJB

    @PrePersist
    public void prePersist(MyEntity entity) {
        final Foo foo = myService.getFoo(); // !! NPE thrown here!!
        entity.setFoo(foo);
    }
}

我在这里发现的前面的问题是关于这个问题的,JPA只提供JPA2.1上的CDI,但不提供JPA2.0上的CDI,但我使用的是JPA2.1。那么这里还有什么问题呢?

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" 
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
>
      <persistence-unit name="MY_PU" transaction-type="JTA">
      <jta-data-source>jdbc/local</jta-data-source>
      <exclude-unlisted-classes>false</exclude-unlisted-classes>
      <properties>
          <property name="eclipselink.logging.level" value="ALL" />
      </properties>
   </persistence-unit>
</persistence>

将我的EJB注入到其他会话bean中运行良好,无论是使用EJB inection(@EJB)还是CDI注入(@Inject)。它只在EntityListner中失败。

我正在使用GlassFish 4.1和EclipseLink 2.5。2.

相关问题:在EntityListener中注入SessionScoped状态bean

共有1个答案

阚夕
2023-03-14

代码中没有任何错误,该行为是由以下错误引起的:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=438105

该错误在EclipseLink 2.6中已修复。0.此版本的更新解决了我的问题。

http://www.eclipse.org/eclipselink/downloads/

 类似资料:
  • jboss日志:- JBAS015876:开始部署“medmark.war”17:33:56948 INFO[org.jboss.as.ejb3.deployment.processors.ejbndibingsdeploymentunitprocessor](MSC服务线程1-8)部署单元部署“medmark.war”中名为HelloService的会话bean的JNDI绑定如下: EJB类:

  • CDI bean: 当我现在访问无状态EJB(例如从servlet访问)时,我希望testMethod使用与调用方的HttpSession相关联的CDI bean。因此,如果来自不同Browser/HTTP会话的两个客户机访问Servlet,它们都将得到不同的结果字符串。 我是否需要CDI而不是?如果需要,我如何为给定会话生成正确的bean实例?我想过也许可以使用BeanManager并搜索Ses

  • 我有一个问题是将EJB注入到抽象类中,抽象类是我JSF CDI bean的父类。在我的项目中,我使用MyFaces CODI 1.0.5(ViewScope),Omniface 1.3,PrimeFaces 3.4.2和GlassFish3.1.2。 应用程序是一个EAR,抽象类位于EJB模块中,JSF CDI bean位于WAR模块中: 我的抽象类: 我的CDIBean: 当我部署应用程序并访问

  • 我正在尝试将两个独立的战争迁移到一个耳朵里。 运行在WebLogic 12.2.1上,所以Java EE 7(CDI 1.1和EJB 3.1)。 每个WAR都包含相同的JAR库,其中包含许多@Stateless EJB和@Named CDI托管bean: 我已经执行了几个必需的步骤: 将包含ejb和CDI托管bean的ejb-cdi.jar的打包类型更改为ejb 将ejb-cdi.jar配置为po

  • 我尝试使用最新的Qarkus配置工具:@ConfigMapping,所以我定义了一个GreetingConfig对象: 该配置被注入到CDI Singleton中: 单例被注入到JAX-RS过滤器和JAX-RS资源中 application.properties文件还包含: 应用程序在启动时崩溃: JAR-RS资源中的注入适用于服务的任何bean类型(@ApplicationScope或@Sing

  • 我有一个带有Glassfish 3服务器的正常动态web项目。我有一个托管bean,它注入了一个无状态bean。与Mojarra2.1.6所有工作良好。 但是当我将javax.faces-2.2.7.jar(Mojarra)添加到Web-Inf lib文件夹并尝试访问我的站点时,我的“服务”得到一个Nullpointerexception。 XHTML: