繁体   English   中英

锁定Java EE应用程序

[英]Locking in Java EE Application

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

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

到目前为止我的方法:

  1. Map<String, ReentrantLock>以存储锁。 (我的ID总是UUID )如果在地图中丢失,则按需创建锁。 在这种方法中,我喜欢并发访问将被阻止,我可以控制其他线程尝试锁定资源的时间。

  2. 使用JPA2乐观锁定。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM