【问题标题】:Thread Safe Stateless Session Bean线程安全无状态会话 Bean
【发布时间】:2011-09-27 15:16:15
【问题描述】:

我想知道使数据库更新线程安全的最佳做法是什么。

我正在调用一个无状态会话 bean 的

public void addReservation(Reservation 预订)

在添加此预订之前 - 我想使用实体 bean 的方法检查该预订是否还有有效的位置

公共布尔 isThereRoomForAnotherReseravtion()

我读到here 说同步方法不能解决问题。

我曾想过使用带有验证规则的存储过程作为解决方案,但听起来不对。

是否有使 write 过程线程安全的标准做法?

问候,

丹尼

【问题讨论】:

    标签: multithreading jpa jakarta-ee ejb-3.0 ejb


    【解决方案1】:

    没有 Java 同步实际上可以帮助您,因为总有一些第二个数据库客户端(甚至可能是您自己在集群环境中的应用程序)可以同时访问数据库。

    您需要更深入地了解数据库层并使用数据库锁定设施,例如乐观/悲观锁定。 JPA 1.0 支持前者,2.0 支持两者。选择取决于您怀疑会遇到多少并发。

    【讨论】:

    • +1。阅读download.oracle.com/javaee/6/tutorial/doc/gkjjf.html 以了解有关锁定的说明。
    • 乐观/悲观锁定在现有实体上设置锁定。这里需要根据特定条件防止插入新实体。我说的对吗?
    • 是的,您应该在插入时锁定其他一些常用行。当其他线程/进程发现该行已被阻塞时,将阻塞/中断。
    • 非常感谢!这正是我想要的。
    猜你喜欢
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2011-03-31
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多