我一直收到错误消息当前线程中的事务处于活动状态,我想不出解决此问题的方法。在我按下应该发出将数据插入数据库的方法的按钮之前,这个错误一直发生在页面加载上。 下面我输入了我的代码:
Button1
该方法是从网页h:按钮调用的,这样一旦用户将他们的姓名和电话号码输入到文本框中,希望将这些文本框传递给数据库。如果这些信息有用,我也在使用glassfish服务器! 这也是错误页面上返回的堆栈跟踪的副本
public String bookLesson(int lessonNo) throws Exception{
try{
Booking booking = new Booking();
Lesson lesson = em.find(Lesson.class, lessonNo);
booking.setLessonno(lesson);
booking.setCustomername(customerName);
booking.setCustomerphone(customerPhone);
utx.begin();
em.persist(booking);
utx.commit();
} catch (Exception e){
utx.rollback();
System.out.println(e);
}
return "lesson";
}
任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
您应该在执行回滚之前检查事务状态,因为它会触发您的异常。
您可以使用public int getStatus() throws SystemException;
界面中的TransactionManager
方法
您可以将返回值与int
接口关联的javax.transaction.Status
值进行比较:
public final static int STATUS_ACTIVE= 0;
如果事务处于活动状态,则执行rollaback。否则,你就不能表演了 你可以这样做:
catch (Exception e){
e.printStackTrace();
// logger.error(e); It is a better solution than logging in output.
if (utx.getTransaction().getStatus()==Status.STATUS_ACTIVE){
utx.rollback();
}
}