如何解决使用有状态EJB在JPA生命周期中不起作用
我尝试在Listenner中注入SFSB以获取用户,但是当尝试在Entity类中注入“ usuarioSessaoService” Bean时,未创建该Bean会生成NullPointer。在BaseEntityListenner中注入“ usuarioSessaoService” Bean时,将创建该Bean,但是getUsuarioSessao()返回null。
我在不同的Stateless类(例如ProjetoServiceImpl)中使用“ usuarioSessaoService” Bean进行了测试,并且工作正常。
@Log
@Stateful(name = "UsuarioSessaoService")
public class UsuarioSessaoServiceImpl implements UsuarioSessaoService,Serializable {
private static final long serialVersionUID = 1L;
private Usuario usuario;
@Override
public void defineUsuarioSessao(Usuario usuario) {
this.usuario = usuario;
}
@Override
public Usuario getUsuarioSessao() {
return usuario;
}
}
@Stateless
@MappedSuperclass
@ToString @EqualsAndHashCode
@EntityListeners(BaseEntityListenner.class)
public class BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Transient
@EJB(name = "UsuarioSessaoService")
private UsuarioSessaoService usuarioSessaoService;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Getter
private Long id;
@ManyToOne
@JoinColumn(name = "USUARIO_ALTERACAO_ID")
@Getter @Setter
private Usuario usuarioAlteracao;
@Column(name = "DATA_ALTERACAO")
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
@Getter
private Date dataAlteracao;
@Column
@LogColumn
@Getter @Setter
private Boolean ativo = true;
@PrePersist @PreUpdate
private void setCamposDefault() throws UsuarioVazioException,NamingException {
dataAlteracao = new Date();
usuarioAlteracao = usuarioSessaoService.getUsuarioSessao(); //usuarioSessaoService is null
}
}
public class BaseEntityListenner implements Serializable {
private static final long serialVersionUID = 1L;
@EJB(name = "UsuarioSessaoService")
private UsuarioSessaoService usuarioSessaoService;
@PrePersist @PreUpdate
private void setCamposDefault(BaseEntity entity) {
entity.setUsuarioAlteracao(usuarioSessaoService.getUsuarioSessao()); //usuarioSessaoService.getUsuarioSessao() is null
}
}
@Stateless(name = "ProjetoService")
public class ProjetoServiceImpl implements ProjetoService {
...
@EJB(name = "UsuarioSessaoService")
private UsuarioSessaoService usuarioSessaoService;
@Transactional
@Override
public Projeto salvar(Projeto projeto,Usuario usuario) {
usuarioSessaoService.defineUsuarioSessao(usuario);
return projetoDAO.edit(projeto);
}
...
}
谁可以在@PrePersist和@PreUpdate事件中获得“ usuario”的值?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。