【问题标题】:Locking in Java EE Application锁定 Java EE 应用程序
【发布时间】:2012-09-04 06:28:14
【问题描述】:

我正在使用带有 JBOSS7 和 JPA2 + Hibernate 的 Java EE 6。对于我的客户,我提供了一个 REST api。

我关心的是如何有效地确保没有资源同时被修改。应该经常发生,但如果发生,我想确保妥善处理。

到目前为止我的方法:

  1. Map<String, ReentrantLock> 存储锁。 (我的身份证总是 UUIDs) 如果地图中缺少锁,则会按需创建。在这 方法我喜欢并发访问将被阻止,我可以 控制另一个线程尝试锁定资源的时间。

  2. 使用 JPA2 乐观锁定。

你会推荐哪一个?还是有更好的方法?

【问题讨论】:

  • 在获得大量知识后,我建议不要发明轮子并使用 JPA 锁定系统满足您的需求。

标签: java hibernate jakarta-ee concurrency jpa-2.0


【解决方案1】:
  1. 似乎容易出错,而且它可能无法扩展。我从没见过这样的 设计,并会阻止它。
  2. 交易乐观 锁定是一个可行的选择。在这种情况下,一些交易可能 失败,您将需要处理错误并重试。
  3. 带有悲观锁定的事务是另一个可行的选择。它是 像 1) 但使用数据库来锁定和排序操作。 AFAIK, JPA 也支持悲观锁定。否则你可以使用 SELECT FOR UPDATE(大多数 DBMS 支持)显式获取行锁。确保你 找出以一致的顺序获取锁的方案,以 避免死锁。

2-3 之间的选择取决于用例,例如如果预计争用会很高,或者重试失败的事务是否容易。

【讨论】:

  • 然后我将使用 JPA 锁定。感谢两位的建议。
猜你喜欢
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 2011-07-24
相关资源
最近更新 更多