EJB事务问题

netcom19 2003-09-12 03:02:13
public class TestEJB
implements SessionBean
{
Connection conn = null;
public void test1() throws Exception
{
...
Statement stmt = getStmt();
stmt.query();
...
}
public void test2() throws Exception
{
...
Statement stmt = getStmt();
stmt.query();
...
}
private Statement getStmt()
{
if ( conn == null )
{
conn = createConnect();
}
return conn.createStatement();
}
}

public class test()
{
...
Object obj = initial.lookup("TestEJB");
TestHome home = (TestHome)PortableRemoteObject.narrow(objref,TestHome.class);
Test test = home.create();
test.test1();
test.test2();
...
}

在执行test2时会报错,java.sql.SQLException: The transaction is no longer active - status: 'Committed'. No further JDBC access is allowed within this transaction.
如果采用JTA就不会出现这个问题。
由于系统原因不能使用JTA,请问如何解决这个问题,
谢谢各位大侠
...全文
40 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shihb 2003-09-25
  • 打赏
  • 举报
回复
一般sessionBean中,我们都是使用CMT(容器处理事务)或BMT(Bean处理事务)。所以一个方法中的transaction肯定是没有问题的。
你的程序中,我觉得一个bean中的conn不应该都是一个实例。所以,你不应该有
if ( conn == null )
{
conn = createConnect();
}
这样的判断,bean中的每个方法结束后都应该closeConnection,同样,开始都应该createConnection。还有,如果bean中的几段逻辑处理应该在一个transaction中的话,你应该写在一个method中。这样也就不会有事务方面个问题了。
ygrmry 2003-09-23
  • 打赏
  • 举报
回复
关注!
klbt 2003-09-22
  • 打赏
  • 举报
回复
为何不用jta?

1,220

社区成员

发帖
与我相关
我的任务
社区描述
企业软件 中间件技术
社区管理员
  • 中间件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧