CDI Bean 和 Hibernate Envers

标签 cdi hibernate-envers

我从 Hibernate Envers 开始。我已经能够使用 @Audited 正确注释类并创建修订,但我无法使用修订记录记录的用户数据。

我的 JSF 2.0 测试应用程序正在 jbossEAP6/wildfly 服务器中的 CDI、JPA/Hibernate 上运行。我既没有使用 Spring 也没有使用 Seam。

这是一些代码:

revisionEntity.java

@Entity
@RevisionEntity(AuditListener.class)
public class RevisionEntity {
    @Id
    @GeneratedValue
    @RevisionNumber
    private int id;

    @RevisionTimestamp
    private long timestamp;

    private String username;

LoginBean.java

@Named
@Stateful
@SessionScoped
public class LoginBean implements Serializable{

private String username;
...

AuditListener.java

import javax.ejb.Stateful;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.hibernate.envers.RevisionListener;

import br.test.login.filterlogin.beans.LoginBean;

    @Named
    @Stateful
    @SessionScoped
    public class AuditListener implements RevisionListener {

        @Inject
        private LoginBean loginBean;

        public void newRevision(Object revisionEntity) {

            RevisionEntityEx RevEntity = (RevisionEntityEx) revisionEntity;
            RevEntity.setUsername(loginBean.getUsername());

        }

loginBean 注入(inject)失败,给我一个 NullPointerException。有什么想法吗?

抱歉我的语法很糟糕。

问候, 马塞洛。

最佳答案

监听器不受容器管理,因此您的 loginBean 不会被注入(inject)。

我们需要查找它...

注意UsuarioService 应更改为您的类型:LoginBean

import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.CDI;

BeanManager beanManager = CDI.current().getBeanManager();
Bean<UsuarioService> bean = (Bean<UsuarioService>) beanManager.getBeans(UsuarioService.class).iterator().next();
CreationalContext<UsuarioService> context = beanManager.createCreationalContext(bean);
this.usuarioService = (UsuarioService) beanManager.getReference(bean, UsuarioService.class, context);

关于CDI Bean 和 Hibernate Envers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35617633/

相关文章:

Maven Hibernate 和 Envers - 依赖关系

jakarta-ee - CDI事务管理: How does @Transactional work?

java - 使用 CDI 注入(inject)命名字符串

jakarta-ee - 我无法使用 @Inject 和 Vaadin CDI 实例化我的 bean

java - Hibernate Envers - 传递自定义字段

spring - 如何使用 Spring Hibernate 在不使用 spring.jpa.hibernate.ddl-auto 的情况下自动创建审计表

events - 实体中的 CDI 事件注入(inject)为 null ,为什么?

cdi - 如何在 QuarkusTestResourceLifecycleManager 实现中注入(inject) bean

java - 为什么 Hibernate Envers 忽略我的自定义 RevisionEntity?

hibernate - Spring 数据修订存储库 : not returning onetomany when using getRevisions