关于ejb使用单例方式获取id时发生的死锁?

04-08-11 jorwang

数据库中获取Key值我使用单例模式。获取ID值得方法作了同步处理

表结构如下:

id ,tablename,maxid

使用EJB调用获取ID的方法。

通过客户端编写的线程进行测试的时候会出现死锁。在网上查资料发现可能是因为在EJB事务中更新同一条记录出现的这个问题。但不知具体什么原因造成的这个问题。也不知道如何解决。请高手高手高高手帮助解释并提出解决方案。

banq
2004-08-11 13:38

在EJB中是无法实现单例的:

http://www.javaworld.com/javaworld/jw-01-2001/jw-0112-singleton-p3.html#resources

>获取ID值得方法作了同步处理

这些如果是EJB中实现,无需做同步。

jorwang
2004-08-11 14:05

但是如果我不做同步获取id,那通过客户端线程测试时会得到相同的id,明会出问题。

private int getNextKeyFromDB()

{

String sql1 = "UPDATE KeyTable SET keyValue = keyValue + 1 ";

String sql2 = "SELECT keyValue FROM KeyTable";

//execute the update SQL

//run the SELECT query

//示意性地返还一个数值

return 1000;

}

sql1和sql2无论什么顺序都会出问题。