【问题标题】:EJB3 DataSource DataSource.getConnectionEJB3 数据源 DataSource.getConnection
【发布时间】:2014-12-07 05:33:09
【问题描述】:

在 CMT J2EE 环境(容器管理事务)中,当我 JDNI 查找 DataSource 对象并调用 DataSource.getConnection 时,使用什么事务/连接?

此连接是(潜在分布式)事务的一部分吗? getConnection() 每次我为同一个 DataSource 对象调用它时是否返回相同的 Connection?我只知道使用本机 SQL 语句通过同一个 EntityManager 使用 Connections。

这让我很困惑。据我了解,SessionContext 定义了一个事务系统,每次我使用数据源时都会使用该系统。我的问题是在会话 bean 中使用了 DataSource.getConnection(),然后关闭了此连接。如果遇到问题会发出SessionContext.setForRollBack(true)

因此,服务的事务上下文如何与数据源相关联?

如果我们每次使用或至少查找数据源时都生成一个新连接,那么我在理解我已经知道的东西时就会遇到问题。任何澄清都会很棒。我知道容器管理事务和其他系统,但 DataSource 的实际行为完全超出了我的范围。

【问题讨论】:

    标签: java database ejb-3.0


    【解决方案1】:

    在 Java EE 中,事务不是数据库独有的概念,例如 JMS 连接会话也可以是容器管理事务的一部分。这个想法是,如果一个或多个方法在容器管理的事务边界下运行,容器将根据需要提交或回滚事务。

    在数据库相关的数据源中,有多个层次,一是由容器维护的连接管理池,二是数据库驱动与数据库的实际连接管理,在Java中Connection是一个抽象用于与数据库而非物理连接的会话,由驱动程序管理。

    根据上述情况,您的问题可以得到解决,即:

    当我 JDNI 查找 DataSource 对象并调用 DataSource.getConnection 时使用什么事务/连接。

    在容器管理的事务下,虽然它依赖于实现,但与数据库的连接/会话相关联,并标有事务边界。驱动程序可以与数据库共享实际的物理连接,但这对应用程序和容器都是透明的。

    此连接是(潜在分布式)事务的一部分吗?每次我为同一个 DataSource 对象调用 getConnection 时,它是否返回相同的 Connection?

    参考上面,连接与驱动程序打开的数据库的底层套接字无关。它在逻辑上是一个单独的会话,如果在事务边界内,相同的会话与从数据源检索的连接相关联,如何实现是容器设计的一部分

    我的问题是在会话 bean 中使用了 DataSource.getConnection,然后关闭了此连接

    在连接的池实现中,Connection.close() 没有影响,连接返回到池中(http://commons.apache.org/proper/commons-dbcp/api-1.3/org/apache/commons/dbcp/PoolableConnection.html),所有池的这种行为都是相似的。因此,关闭连接并不一定会将其与容器事务边界分离,尽管不应在容器管理的事务中关闭连接。同样,不能在 CMT 中调用 commit、setAutoCommit、rollback,因为这将发出与实际数据库等效的以下命令,之后事务的行为将未定义。

    【讨论】:

      【解决方案2】:

      查看@Resource 注释的声明。

      它包含一个shareable 属性,允许您指定连接共享行为。默认为true,这意味着如果你什么都不做,你将自动获得连接共享。

      此属性也包含在您可以使用 JNDI 查找的任何 resource-ref 定义的数据源的 XML 架构中。

      调用期间包含的所有资源(JDBC、JMS、ResourceManager)都注册到当前事务中。您有时可能需要指定 XA 的使用才能使其正常工作。

      【讨论】:

        猜你喜欢
        • 2012-03-27
        • 2016-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多