关于ejb使用单例方式获取id时发生的死锁?
数据库中获取Key值我使用单例模式。获取ID值得方法作了同步处理
表结构如下:
id ,tablename,maxid
使用EJB调用获取ID的方法。
通过客户端编写的线程进行测试的时候会出现死锁。在网上查资料发现可能是因为在EJB事务中更新同一条记录出现的这个问题。但不知具体什么原因造成的这个问题。也不知道如何解决。请高手高手高高手帮助解释并提出解决方案。
数据库中获取Key值我使用单例模式。获取ID值得方法作了同步处理
表结构如下:
id ,tablename,maxid
使用EJB调用获取ID的方法。
通过客户端编写的线程进行测试的时候会出现死锁。在网上查资料发现可能是因为在EJB事务中更新同一条记录出现的这个问题。但不知具体什么原因造成的这个问题。也不知道如何解决。请高手高手高高手帮助解释并提出解决方案。
在EJB中是无法实现单例的:
http://www.javaworld.com/javaworld/jw-01-2001/jw-0112-singleton-p3.htmlresources
>获取ID值得方法作了同步处理
这些如果是EJB中实现,无需做同步。
但是如果我不做同步获取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无论什么顺序都会出问题。