Olá senhores, estou precisando um de pequeno suporte quando ao uso do framework Hibernate, pois estou tentando implementar na minha empresa um sistema, e nele devo ter o controle de todas as alterações realizadas pelo usuário.
Para criação desse sistema estou utilizando as seguintes linguagens e ferramentas: Eclipse, JSF 2.2, CDI, Hibernate Events, Postgresql, Jboss WidFly10.
Pois bem foram criadas as seguintes tabelas;
Classe usuario
@Audited
@Entity
@Table(name = “usuario”, schema = “public”)
@SequenceGenerator(name = “usuarioSequenceGen”, sequenceName = “usuario_idusuario_seq”, allocationSize = 1, initialValue = 1)
public class Usuario implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "usuarioSequenceGen")
@Column(name = "idUsu", nullable = false, unique = true)
private Integer idUsu;
//@NaturalId
@Column(name = "apelidoUsu", nullable = false, unique = true, length = 15)
private String apelidoUsu;
@Column(name = "senhaUsu", length = 255)
private String senhaUsu;
Classe de Auditoria
package entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.envers.Audited;
import org.hibernate.envers.DefaultRevisionEntity;
import org.hibernate.envers.RelationTargetAuditMode;
import org.hibernate.envers.RevisionEntity;
import listener.CustomListener;
@SuppressWarnings(“deprecation”)
@Entity
@Table(name = “revinfo”)
@RevisionEntity(CustomListener.class)
public class InformacaoRevisao extends DefaultRevisionEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Column
private String nomeUsuario;
@Temporal(TemporalType.DATE)
@Column(name = "data_auditoria")
private Date data_auditoria;
@Temporal(TemporalType.TIME)
@Column(name = "hora_auditoria")
private Date hora_auditoria;
Uma classe de Login
@Named
@SessionScoped
public class AutenticadorUsuario implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Usuario usuarioLogado;
@Inject
private IUsuario usuarioDao;
// True se usuário está logado e false caso contrário
private boolean loggedIn;
private String senha;
private String apelido;
private Integer idUsu;
@PostConstruct
public void init() {
this.usuarioLogado = new Usuario();
this.senha = null;
this.apelido = null;
}
// DigestUtils.md5Hex(
public String loginUsuario() {
FacesContext context = FacesContext.getCurrentInstance();
try {
usuarioLogado = usuarioDao.loginUsuario(usuarioLogado.getApelidoUsu(),
DigestUtils.md5Hex(usuarioLogado.getSenhaUsu()));
if (usuarioLogado == null) {
usuarioLogado = new Usuario();
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "Usuário não encontrado!", "Erro no Login!"));
context.getExternalContext().getFlash().setKeepMessages(true);
return null;
} else if (usuarioLogado.getStatusUsu() == "INATIVO") {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_WARN, "Usuário Bloqueado", "Erro no Login!"));
context.getExternalContext().getFlash().setKeepMessages(true);
return null;
} else {
System.out.println("RETORNO ESSE USUARIO" + usuarioLogado.getApelidoUsu());
loggedIn = true;
return "/admin/template/LayoutPadrao.jsf?faces-redirect=true";
}
} catch (
Exception e) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "Usuário não encontrado!", "Erro no Login!"));
context.getExternalContext().getFlash().setKeepMessages(true);
return "/security/login.jsf?faces-redirect=true";
}
}
Uma classe SessionBean para pegar o usuario logado
@Named
@SessionScoped
public class SessionBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Inject
@ManagedProperty(value = "#{autenticadorUsuario}")
private AutenticadorUsuario autenticadorUsuario;
public String apelido() {
System.out.println("LOGADO " + autenticadorUsuario.getUsuarioLogado().getApelidoUsu());
return autenticadorUsuario.getUsuarioLogado().getApelidoUsu();
}
E por ultimo a classe CustomListener
public class CustomListener implements RevisionListener {
private SessionBean bean;
@Override
public void newRevision(Object revisionEntity) {
InformacaoRevisao revEntity = (InformacaoRevisao) revisionEntity;
System.out.println("LOGADO " + bean.apelido());
revEntity.setNomeUsuario(bean.apelido());
revEntity.setData_auditoria(new Date(System.currentTimeMillis()));
revEntity.setHora_auditoria(new Time(System.currentTimeMillis()));
}
public SessionBean getBean() {
return bean;
}
public void setBean(SessionBean bean) {
this.bean = bean;
}
O problema é setar o usuário logado na classe CustomListener , pois não estou conseguindo atualmente.