Session Bean中使用Resultset错误

Adnil 2003-08-21 10:02:09
Session bean中的代码如下

private static final String listSql = "SELECT * FROM DB2ADMIN.OPERATOR ORDER BY REG_DATE";
private Connection conn;
private ResultSet rs;
private CallableStatement stmt;

public void list() throws Exception
{
conn = DBManager.getConnection();
stmt = conn.prepareCall(listSql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery();
}

public boolean aaa() throws Exception
{
rs.next();
summary = rs.getString("SUMMARY");
return true;
}


客户端为jsp调用

xxxbean.list(); //正确,没有问题
然后调用xxxbean.aaa(); //出错,提示如下错误

[03-8-21 9:55:21:833 CST] 28a33abd WebGroup E SRVE0026E: [Servlet 错误]-[DSRA9110E: 关闭 ResultSet。]:com.ibm.websphere.ce.cm.ObjectClosedException: DSRA9110E: 关闭 ResultSet。
at com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet.runtimeXIfNotClosed(WSJdbcResultSet.java:2653)


运行环境为Websphere 5.0


请高手帮我看看,ResultSet怎么会自己关闭的呢?
...全文
141 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
netcobol 2003-09-05
  • 打赏
  • 举报
回复
可是状态bean
可以
netcobol 2003-08-27
  • 打赏
  • 举报
回复
在有状态SessionBean中
如下改动
xxSession ..................
{


private ResultSet rs;//保持状态


public void list() throws Exception
{ private static final String listSql = "SELECT * FROM DB2ADMIN.OPERATOR ORDER BY REG_DATE";
private Connection conn;
private CallableStatement stmt;
conn = DBManager.getConnection();
stmt = conn.prepareCall(listSql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery();
}

public boolean aaa() throws Exception
{
rs.next();
summary = rs.getString("SUMMARY");
return true;
}



}
Adnil 2003-08-23
  • 打赏
  • 举报
回复
把rst.next()写在list()中没有问题,说明rs是打开的。

stmt也没有问题,没有其他操作。

ll42002说得对,非常可能是事务类型的关系。 事务类型有能些? 我在那里可以看到?

我只知道我用的是容器事务管理。
Adnil 2003-08-22
  • 打赏
  • 举报
回复
我是在jsp中连续调用这两个方法的,而且可以肯定只有一个客户端。

ejbPassivate不会触发。


跟SUMMARY字段名更加没有关系了。
hesi726 2003-08-22
  • 打赏
  • 举报
回复
无状态会话Bean 应该是正常现象!
这个客户端肯定会使得另外一个客户端打开的 ResultSet 关闭的!

有状态会话 Bean 会这样,就值得分析了!
在你的 ejbPassivate() 插入 System.out.p 语句!
看看服务器端 有没有将你的 Bean 交换到硬盘!
(交换时,必定会关闭 conn 的---从而关闭你的 ResultSet)



javahui 2003-08-22
  • 打赏
  • 举报
回复
那你改一下,把两个方法合为一个方法试试
ll42002 2003-08-22
  • 打赏
  • 举报
回复
看你的事务类型是什么,如果是方法级的话,那么有可能在xxxlist()方法执行完服务器就将rs关闭了,你可以试试用一个方法!
amortal 2003-08-22
  • 打赏
  • 举报
回复
看看你的stmt有没有在什么其他的地方关闭,或者又用它取了其他什么数据,或是操作吧,我想可能是这个原因
hesi726 2003-08-22
  • 打赏
  • 举报
回复
奇怪!!!!
list() 方法中测试测试 看 rst 有没有打开!
例如,rst.next(); rst.prior();
NewStarter 2003-08-21
  • 打赏
  • 举报
回复
SELECT * FROM DB2ADMIN.OPERATOR ORDER BY REG_DATE
选择的没有给具体的内容
而summary = rs.getString("SUMMARY");
的到的是SUMMARY可能找不到这个列名
最好用数字表示
Adnil 2003-08-21
  • 打赏
  • 举报
回复
另外,有状态会话Bean或者无状态会话Bean都是这样的结果。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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