如何在EJB 3中为每个方法设置隔离级别

4

是否可以为给定的EJB 3方法调用设置数据库隔离级别(即Serializable、repeatable-read等)?

我了解这不在EJB规范范围内,因此如何在JBoss或Glassfish特定方式上执行此操作的详细信息将非常有帮助。

我开始感到不可能,并且只能针对连接池进行设置,这显然并不是理想的解决方案。

1个回答

1

这确实不在规范范围内,但当支持时可以通过应用服务器特定的部署描述符进行配置。例如,WebLogic可以在{{link1:weblogic-ejb-jar.xml}}中按方法级别指定事务隔离:

Example

<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)配置隔离性编程吗?


你能详细说明一下你最后一句话吗?当你使用由依赖注入的EntityManger处理连接时,是否有类似这样的机制可用于JPA? - Steve Perkins
@Steve JPA 假定使用 READ_COMMITTED 隔离级别。一些提供商可能允许进行调整(全局或每个查询),但这取决于提供商的具体实现。 - Pascal Thivent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接