【问题标题】:How can I set isolation levels per method in EJB 3如何在 EJB 3 中为每个方法设置隔离级别
【发布时间】:2010-10-09 19:34:05
【问题描述】:

是否可以为给定的 EJB 3 方法调用设置数据库隔离级别(即可序列化、可重复读取等)?

我知道这不在 EJB 规范中,因此有关如何以 JBoss 或 Glassfish 特定方式执行此操作的详细信息会很好。

我开始觉得这是不可能的,你只能为每个连接池设置它,这显然不是一个理想的解决方案。

【问题讨论】:

    标签: database jakarta-ee ejb-3.0 isolation-level


    【解决方案1】:

    这确实没有包含在规范中,但可以通过应用程序服务器特定的部署描述符进行配置(如果支持)。例如,WebLogic 可以,您可以在 weblogic-ejb-jar.xml 中的方法级别指定事务隔离:

    示例

    <transaction-isolation>
      <isolation-level>...</isolation-level>
      <method>
          <description>...</description>
          <ejb-name>...</ejb-name>
          <method-intf>...</method-intf>
          <method-name>...</method-name>
          <method-params>...</method-params>
      </method>
    </transaction-isolation>
    

    我不知道 JBoss 或 GlassFish 是否有等价物(我无法访问 SupportWLDDInContainers 页面来查找 GlassFish 的答案)。

    作为替代方案,您是否尝试在给定的 EJB 方法中使用 Connection#setTransactionIsolation(int),即以编程方式配置隔离?

    【讨论】:

    • 你能详细说明你的最后一句话吗?当您使用 JPA 时,这样的机制是否可用,连接由依赖注入的 EntityManger 处理?
    • @Steve JPA 采用READ_COMMITTED 隔离级别。一些提供者可能允许对其进行调整(全局或每个查询),但这是特定于提供者的。
    猜你喜欢
    • 2016-01-20
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多