【发布时间】:2015-02-25 18:44:30
【问题描述】:
我正在开发一个 Java Web 应用程序,该应用程序涉及为每个用户分配某些资源。
资源在用户登录时由服务器分配给用户,并在用户注销/会话超时时回收。
网络上有多个服务器实例,它们之间不能同时共享同一个资源。因此,一旦资源被分配给用户,它就为该用户独占,直到服务器回收它或停止运行。因此,服务器端必须能够检查资源的可用性,并在它崩溃时释放它(否则无法通过其他服务器实例重新分配资源)。
我的计划是将资源定义存储在数据库表中,每条记录代表一个这样的资源,一旦资源分配给用户,每个服务器都会读取并锁定记录,这样就没有其他服务器了实例可以在使用时重新分配它,服务器故障会释放锁并使资源可用。
问题是这个记录级锁必须无限期地保持活动状态,即只要用户保持在线,锁就会在那里通知其他服务器资源已被分配。
所以我想知道是否可以使用 JDBC 或休眠应用这种锁?如果不可能,有没有什么替代方案可以在不加锁的情况下达到同样的效果?
【问题讨论】:
-
表和/或行锁定取决于数据库引擎,而不是 JDBC。 JDBC 也可以这样做,具体取决于您为连接设置的事务级别。
-
听起来是个糟糕的设计,我无法扩展。
-
@duffymo 可扩展性在这里不是问题。此网页应用仅供内部使用,用户总数不超过数百人。
标签: java hibernate jdbc locking