public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { try {
// Userinfo u = new Userinfo();
// u.setUsername("my username");
//
Context context = new InitialContext();
// UserinfoFacadeLocal UserinfoFacadeLocalRef =
// (UserinfoFacadeLocal) context
// .lookup("UserinfoFacade/local");
// UserinfoFacadeLocalRef.save(u); Bookinfo b1 = new Bookinfo();
b1.setBookname("1234567890"); BookinfoFacadeLocal BookinfoFacadeLocalRef = (BookinfoFacadeLocal) context
.lookup("BookinfoFacade/local");
BookinfoFacadeLocalRef.save(b1);
Bookinfo b = new Bookinfo();
b
.setBookname("123456789012345678901234567890123456789012345678901234567890"); BookinfoFacadeLocalRef.save(b); context.close();
} catch (NamingException e) {
System.out
.println("11111111111111111111111111111111111111111111111");
e.printStackTrace();
}
}

解决方案 »

  1.   

    b
    .setBookname("123456789012345678901234567890123456789012345678901234567890");已经超出了最大的length第一条插入成功了,我想回滚,怎么办
      

  2.   

    事务默认是容器级的 现在这样的情况不能回滚,我怀疑是2个事务,不能回滚,第一条数据正确的插入到数据库中了 但有些情况,WEB客户端真的需要多次的与EJB进行多次的交互才可以完成一个业务,那么遇到这样的情况该如何处理呢??请教了 
      

  3.   

    你这个 Servlet 只是调用一下!这两个是不同的逻辑,都不在一个事务之内。EJB 是组件式的,最好把一个整体的事务写在一个 EJB 的方法中。
      

  4.   

    那如何保证servlet与Ejb多次调用时用的是一个事务,这样如果在SERVLET中出错可以回滚
      

  5.   

    如果需要在客户端控制事务,那么所调用的 EJB 必须是 BEAN 管理的,需要标注:@TransactionManagement(TransactionManagerType.BEAN)然后在 Servlet 中通过 JNDI 获得 UserTransaction 对象手工控制事务。UserTransaction 的 JNDI 全名一般为:java:comp/env/UserTransaction