Olá pessoal.
Estou com problemas para executar um update nos meus dados utilizando o hibernate + jsf
meu método para fazer o update é esse:
private EntityTransaction transaction = null;
public void update() {
String param = hibernate.context.Contexts.getRequestParameter("update");
try {
numForm = Integer.parseInt(param);
form = findForm(numForm);
EntityManager em = hibernate.context.Contexts.getEntityManager();
transaction = em.getTransaction();
transaction.begin();
form = em.merge(form);
transaction.commit();
hibernate.controller.Controller.addSuccessMessage("Alterado.");
} catch (Exception e) {
try {
transaction.rollback();
hibernate.controller.Controller.addErrorMessage("Erro durante a alteração do formulário de número " + param);
} catch (Exception ex) {
hibernate.controller.Controller.ensureAddErrorMessage(ex, "An error occurred attempting to roll back the transaction.");
}
}
}
quando eu executo ele, eu obtenho o erro no log:
[quote]
hibernate.filter.EntityManagerFilter doFilter
java.lang.IllegalStateException: Transaction not active
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:47)
at hibernate.filter.EntityManagerFilter.doFilter(EntityManagerFilter.java:64)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128 )
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)[/quote]
esse erro especifica um linha do meu arquivo EntityManagerFilter no método doFilter (linha 64)
esse é meu doFilter:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws ServletException, IOException {
EntityManager em = entityManagerFactory.createEntityManager();
request.setAttribute("entitymanager", em);
EntityTransaction tx = null;
try {
// begin the transaction
tx = em.getTransaction();
tx.begin();
// continue processing to JSF
chain.doFilter(request, response);
// after returning from JSF commit the transaction
tx.commit();
} catch (RuntimeException e) {
// if something fails, log the error and rollback
log.log(Level.SEVERE, "",e);
tx.rollback();
} finally {
// always close the entitymanager
em.close();
}
}
Alguém sabe como eu posso arrumar esse problema?
valeu!