Aplicação para de funcionar após erro SQLServerException

0 respostas
D

Bom dia.

Estou desenvolvendo uma aplicação JSF 2.0 Hibernate 3, em uma tela com um DataTable após alterar alguns dados e invocar a atualização, ocorre um erro, eu sei que o erro iria ocorrer pois provoco a situação para analizar como a aplicação iria se comportar. Após este erro ocorrer a apliçação para de funcionar, e não consigo interceptar o erro no metodo que faz a atualização.
Alguem poderia me ajudar.

Segue os códigos :

Erro reportado :

25877 ["http-bio-8080"-exec-7] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 2601, SQLState: S0001

25877 ["http-bio-8080"-exec-7] ERROR org.hibernate.util.JDBCExceptionReporter - Cannot insert duplicate key row in object 'dbo.SYS_SEG_USUARIO' with unique index 'IND_USUARIO_USER_NMAE_PASSWORD'.

Aug 17, 2011 11:25:19 AM org.apache.catalina.core.StandardWrapperValve invoke

SEVERE: Servlet.service() for servlet [FacesServlet] in context with path [/prjGEO2] threw exception [org.hibernate.exception.SQLGrammarException: could not update: [gestaoobra.usuario.Usuario#118]] with root cause

com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert duplicate key row in object 'dbo.SYS_SEG_USUARIO' with unique index 'IND_USUARIO_USER_NMAE_PASSWORD'.

at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)

at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)

at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:390)

at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)

at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)

at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)

at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)

at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)

at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:308)

at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:46)

at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2590)

at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2494)

at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2821)

at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:113)

at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)

at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)

at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185)

at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)

at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)

at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)

at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)

at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)

at gestaoobra.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:35)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)

at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

Filter :

public class ConexaoHibernateFilter implements Filter {

private SessionFactory sf;


@Override

public void init(FilterConfig config ) throws ServletException {

this.sf = HibernateUtil.getSeesioinFactory();

}


@Override

public void doFilter( ServletRequest servletRequest , ServletResponse serveletResponse ,

FilterChain chain ) throws ServletException {

if ( validaAcessoAPagina((HttpServletRequest) servletRequest, (HttpServletResponse) serveletResponse) ) {

try {

this.sf.getCurrentSession().beginTransaction();

chain.doFilter(servletRequest, serveletResponse);

this.sf.getCurrentSession().getTransaction().commit();

this.sf.getCurrentSession().close();

} catch (Throwable ex) {

try {

if ( this.sf.getCurrentSession().getTransaction().isActive()) {

this.sf.getCurrentSession().getTransaction().rollback();

} 

} catch (Throwable t) {

t.printStackTrace();

}

throw new ServletException(ex);

}

finally{

if ( this.sf.getCurrentSession().isOpen() ) {

this.sf.getCurrentSession().close();

}

}

}

}


@Override

public void destroy() { }


private boolean validaAcessoAPagina( HttpServletRequest req, HttpServletResponse resp ) {

OpcoesMenuRN opMenuRN = new OpcoesMenuRN();

HttpSession session = req.getSession();

String page = req.getRequestURI();

UsuarioLogado usu = (UsuarioLogado) session.getAttribute("usuario");

boolean pgValida;

String pg = page.replace("/prjGEO2/", "").replace("restrito/" ,"").replace("publico/","").replace(".jsf", "").replace(".xhtml", "").replace("/","");

System.out.println("pagina solicitada : " + page );


if ( ( ( page.indexOf("restrito") > - 1 ) || 

( page.indexOf("privado") > -1 ) ) ) {

if ( ! page.endsWith("login.jsf")) {


if ( ( page.endsWith("mainpage.jsf") ) && ( session != null ) &&

( usu != null ) && ( usu.isLogado() ) ) {

return true;

}

else {

this.sf.getCurrentSession().beginTransaction();

pgValida = opMenuRN.validaFormOpMenu(usu.getIdUsuario(), pg );

this.sf.getCurrentSession().getTransaction().commit();

this.sf.getCurrentSession().close();


if ( ! pgValida ) {

try {

session.invalidate();

resp.sendRedirect("/prjGEO2/");

return false;

}

catch (Throwable t) {

t.printStackTrace();

}

}

}



}

}


return true;

}

}

ManagedBean :

@ManagedBean(name="cadastroUsuario")

@ViewScoped

public class CadastroUsuario implements Serializable{


private static final long serialVersionUID = 1L;

private List<Usuario> lista;

private Usuario selectedUsuario = new Usuario();

private UIPanel panelForm;




public UIPanel getPanelForm() {

return panelForm;

}


public void setPanelForm(UIPanel panelForm) {

this.panelForm = panelForm;

}


public void anulaSelcionar() {

this.selectedUsuario = new Usuario();

this.cleanSubmittedValues(this.panelForm);


}


public Usuario getSelectedUsuario() {

return this.selectedUsuario;

}


&#12288;

public void setSelectedUsuario(Usuario selectedUsuario) {

this.selectedUsuario = selectedUsuario;

}


public void onRowSelected(SelectEvent event){

Usuario usu = (Usuario) event.getObject();

}


public List<Usuario> getLista() {

if ( this.lista == null ) {

UsuarioRN usuarioRN = new UsuarioRN();

this.lista = usuarioRN.listar();

}


return this.lista;


}


public void salvar() {

try {

UsuarioRN usuarioRN = new UsuarioRN();

usuarioRN.salvar(this.selectedUsuario); 

} 

catch (Exception e) {

FacesContext fctx = FacesContext.getCurrentInstance();

FacesMessage msg = new FacesMessage("Falha durante atualização.");

fctx.addMessage(null, msg);

}

}


protected void cleanSubmittedValues(UIComponent component) { 

component.getChildren().clear(); 

} 


}

Entity :

@Entity

@Table(name="SYS_SEG_USUARIO")

public class Usuario implements Serializable {


private static final long serialVersionUID = 983778034503133406L;


@Id

@GeneratedValue

@Column(name = "ID_USUARIO")

private Integer idUsuario;


@Column(name = "NOME_USUARIO", length = 140)

private String nomeUsuario;


@Column(name = "SIGLA_DPTO_USUARIO", length = 40)

private String siglaDpto;


@org.hibernate.annotations.NaturalId( mutable = true)

@Column(name = "USER_NAME", length = 20)

private String userName;


@org.hibernate.annotations.NaturalId( mutable = true)

@Column(name = "PASSWORD_USUARIO", length = 20)

private String passWord;


@Column(name = "EMAIL_USUARIO", length = 180)

private String eMail;


@Column(name = "DATA_CADASTRO",insertable=false, updatable=false)

private Date dtaCadastro;


@Column(name = "DATA_ALTERACAO",insertable=false, updatable=false)

private Date dtaAlteracao;


@ManyToOne

@JoinColumn(name="ID_EMPRESA")

private Empresa empresa;


@OneToOne(mappedBy="usuariooo", cascade=CascadeType.ALL)

@JoinColumn(name="ID_USUARIO", insertable = true, updatable = false) 

private UsuarioPerfil usuarioPerfil;


public Empresa getEmpresa() {

return empresa;

}

get e sets

Obrigado.

Criado 17 de agosto de 2011
Respostas 0
Participantes 1