是否可以为给定的EJB 3方法调用设置数据库隔离级别(即Serializable、repeatable-read等)?
我了解这不在EJB规范范围内,因此如何在JBoss或Glassfish特定方式上执行此操作的详细信息将非常有帮助。
我开始感到不可能,并且只能针对连接池进行设置,这显然并不是理想的解决方案。
是否可以为给定的EJB 3方法调用设置数据库隔离级别(即Serializable、repeatable-read等)?
我了解这不在EJB规范范围内,因此如何在JBoss或Glassfish特定方式上执行此操作的详细信息将非常有帮助。
我开始感到不可能,并且只能针对连接池进行设置,这显然并不是理想的解决方案。
这确实不在规范范围内,但当支持时可以通过应用服务器特定的部署描述符进行配置。例如,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)
配置隔离性编程吗?
READ_COMMITTED
隔离级别。一些提供商可能允许进行调整(全局或每个查询),但这取决于提供商的具体实现。 - Pascal Thivent