- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 CMT J2EE 环境(容器管理的事务)中,当我 JDNI 查找 DataSource 对象并调用 DataSource.getConnection
时使用什么事务/连接?
这个连接是(潜在的分布式)交易的一部分吗? getConnection()
是否每次为同一个 DataSource 对象调用它时都返回同一个 Connection?我只知道通过使用 native SQL 语句的同一个 EntityManager 使用连接。
这让我很困惑。据我了解,SessionContext 定义了一个事务系统,每次我使用数据源时都会使用该系统。我遇到的问题是在 session bean 中使用了 DataSource.getConnection()
,然后关闭了此连接。如果遇到问题,将发出 SessionContext.setForRollBack(true)
。
因此,服务的事务上下文如何与数据源相关联?
如果每次使用或至少查找数据源时我们都生成一个新的连接,那么我在理解我已经知道的事情时就会遇到问题。任何澄清都会很棒。我知道容器管理的事务和其他系统,但 DataSource 的实际行为完全超出了我的范围。
最佳答案
在 Java EE 中,事务不是数据库独有的概念,例如 JMS 连接 session 也可以是容器管理事务的一部分。这个想法是,如果一种或多种方法在容器管理的事务边界下运行,容器将根据需要提交或回滚事务。
在数据库相关的数据源中,有多个层次,首先是容器维护的管理连接池,其次是数据库驱动与数据库的实际连接管理,在Java中一个Connection是一个抽象对于与数据库而非物理连接的 session ,由驱动程序管理。
根据上述情况,您的问题可以得到解决,即:
what transaction / connection is used when I JDNI-lookup for a DataSource object and invoke DataSource.getConnection.
在容器管理的事务下,虽然它依赖于实现,但与数据库的连接/ session 相关联,并标记有事务边界。驱动程序可以与数据库共享实际的物理连接,但这对应用程序和容器都是透明的。
Is this connection part of the (potentially distributed) transaction? Does getConnection return the same Connection every time I call it for the same DataSource object?
引用上面,连接与驱动程序打开的数据库的底层套接字没有关系。它在逻辑上是一个单独的 session ,如果在事务边界内,同一 session 与从数据源检索到的连接相关联,如何实现是容器设计的一部分
I have the problem that inside a session bean a DataSource.getConnection is used and this connection is then closed
在连接的池化实现中,Connection.close() 没有影响,连接返回到池中(http://commons.apache.org/proper/commons-dbcp/api-1.3/org/apache/commons/dbcp/PoolableConnection.html),这种行为对于所有池都是相似的。因此关闭连接并不一定会解除它与容器事务边界的关联,尽管不应在容器管理的事务中关闭连接。同样,不能从 CMT 中调用 commit、setAutoCommit 和 rollback,因为这将发出与实际数据库等效的以下命令,并且之后的事务行为将未定义。
关于java - EJB3 数据源 DataSource.getConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27228841/
我试图通过预准备语句使用同一连接执行多个查询,但无法完全实现! 代码片段: public class PostPrReqDaoImpl implements PostPrReqDaoInterface
我目前有一个 2 列宽的 DataGridView,第一列是 DataGridViewTextBoxColumn,第二列是 DataGridViewComboBoxColumn。我还有一个预生成的通用
当我在一台机器上运行以下代码时,我得到了 org.apache.tomcat.dbcp.dbcp.BasicDataSource 的 tomcat 实现,当我在另一台机器上运行它时,我得到了 org.
不确定这是否可行,但这是我的设置。 我有一台带有双启动功能的笔记本电脑。 一个一个分区我有 WinXP 和 MSAccess 2000在另一个分区上,Ubuntu 10.04,带有 apache we
我试过: czmlDataSource.load(czmlurl).then(function(){ viewer.dataSource
我有一个 TableView 和一个数组源。当我在 viewDidLoad 方法中初始化数组时,tableview 显示数组中的数据。当我从 Internet 上的 XML 数据的 URL 填充数组时
我对 DataSource 和 SessionFactory 之间的区别感到困惑。 我认为SessionFactory是一个用于检索 session 的管理器(我猜这实际上是与数据库的连接)。 Dat
我想存储大量(~数千)个字符串并能够使用通配符执行匹配。 例如,这里是一个示例内容: Folder1 文件夹 1/Folder2 Folder1/* Folder1/Folder2/Folder3 文
我有一个 DataGridView 和一个从 SQL 表填充的一些对象的列表。我曾使用两种方法将列表绑定(bind)到网格。 1.直接使用列表到数据源 grdSomeList.DataSource =
我正在尝试在 DataGridView 中设置一些内容。看起来这应该很简单,但我遇到了麻烦。我想显示三列: 代码ID 代号 带有 TypeName 的 DisplayMember 和 TypeID 的
在我的 Config.groovy我把线: grails.config.locations = [ "classpath:app-config.properties"] 我在哪里设置数据源的定义。文件
为了这个问题,假设我有一个包含各种酒类的 Excel 数据源电子表格。 (Cell A) | (Cell B) Bacardi | Rum Smirnoff | Vodka Another Vodka
由于我经常使用第三方 API,我认为创建一些 Magento 模块以实现轻松连接和查询它们会很有帮助。理想情况下,您可以像这样查询 API... $data = Mage::getModel( 'to
将后台线程频繁更新的数据源与 GUI 主线程同步的最佳方法是什么? 我应该在每个方法调用周围放置一个 pthread 互斥体吗?这对我来说似乎也很重。 编辑:我正在寻找 10.5 解决方案 最佳答案
经过几个小时的点击和试用,在查看各种帖子寻求帮助后,这段代码终于起作用了。但我希望有人帮助我理解函数(i,dat),这意味着什么?下面是我的完整代码 - function get_assignedta
我使用的是 Wildfly 10.1 版本,有两个数据源,如下所示, jdbc:mysql://${dbhostn
我正在学习数据源,我想我开始理解它,但我不明白这一段。 据我所知,MySQL 和 PostgreSQL 等数据库供应商编写了自己的不同 DataSource 接口(interface)的实现。现在,这
我有一个关于 TomEE 和使用 tomee.xml 中指定的数据源的奇怪问题。值得注意的是,我使用的是 Netbeans、TomEE 和 MySQL。在 Ubuntu 13.04(Xubuntu 最
WWDC 2019 确实充满了 iOS 的新内容以及 TableViews 和 CollectionView 的新数据源,即 UITableViewDiffableDataSource . 我已成功将
我在独立模式下运行 jboss 并将 standalone.xml 中的数据源设置为以下内容: jdbc:sqlserver://myip:1433;databaseNam
我是一名优秀的程序员,十分优秀!