- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 Spring Batch 项目,正在使用 Atomikos 进行事务管理。
这是我的数据源配置和atomikos配置。
@Bean
public DataSource dataSource() {
Properties properties = new Properties();
properties.setProperty("serverName", "localhost");
properties.setProperty("databaseName", "somedb");
properties.setProperty("portNumber", "9999");
properties.setProperty("currentSchema", "sch");
properties.setProperty("user", "user");
properties.setProperty("password", "pwd");
properties.setProperty("driverType", "4");
properties.setProperty("resultSetHoldability","2");
AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean();
atomikosDataSourceBean.setXaDataSourceClassName("com.ibm.db2.jcc.DB2XADataSource");
atomikosDataSourceBean.setXaProperties(properties);
atomikosDataSourceBean.setPoolSize(5);
return atomikosDataSourceBean;
}
@Bean(initMethod = "init", destroyMethod = "close")
public UserTransactionManager atomikosTransactionManager(){
UserTransactionManager atomikosTransactionManager = new UserTransactionManager();
atomikosTransactionManager.setForceShutdown(false);
return atomikosTransactionManager;
}
@Bean
public UserTransactionImp atomikosUserTransaction() throws SystemException{
UserTransactionImp atomikosUserTransaction = new UserTransactionImp();
atomikosUserTransaction.setTransactionTimeout(300);
return atomikosUserTransaction;
}
@Bean
public JtaTransactionManager transactionManager(UserTransactionManager atomikosTransactionManager, UserTransactionImp atomikosUserTransaction) throws SystemException{
JtaTransactionManager jtaTransactionManager = new JtaTransactionManager();
jtaTransactionManager.setTransactionManager(atomikosTransactionManager);
jtaTransactionManager.setUserTransaction(atomikosUserTransaction);
jtaTransactionManager.setAllowCustomIsolationLevels(true);
return jtaTransactionManager;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
em.setJtaDataSource(dataSource);
em.setPackagesToScan("org.company.entity");
em.setJpaVendorAdapter(new OpenJpaVendorAdapter());
em.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());
em.setSharedCacheMode(SharedCacheMode.ALL);
em.setJpaProperties(additionalProperties());
return em;
}
final Properties additionalProperties() {
final Properties openJpaProperties = new Properties();
openJpaProperties.setProperty("javax.persistence.transactionType","jta");
openJpaProperties.setProperty("openjpa.TransactionMode", "local");
openJpaProperties.setProperty("openjpa.ConnectionFactoryMode", "local");
openJpaProperties.setProperty("openjpa.MetaDataRepository", "Preload=true");
openJpaProperties.setProperty("openjpa.Compatibility", "QuotedNumbersInQueries=true");
openJpaProperties .setProperty("openjpa.ConnectionFactoryProperties", "PrettyPrint=true, PrettyPrintLineLength=80, PrintParameters=true");
return openJpaProperties;
}
当我调用 spring 存储库来更新数据库时,它会抛出一个错误,提示无效操作:全局事务期间不允许 setAutoCommit(true) 。请参阅下面的堆栈跟踪。对此的任何想法都会非常有帮助。
com.ibm.db2.jcc.am.SqlException: [jcc][t4][10126][10304][3.62.56] Invalid operation: setAutoCommit(true) is not allowed during Global Transaction. ERRORCODE=-4201, SQLSTATE=2D521
at com.ibm.db2.jcc.am.fd.a(fd.java:679)
at com.ibm.db2.jcc.am.fd.a(fd.java:60)
at com.ibm.db2.jcc.am.fd.a(fd.java:120)
at com.ibm.db2.jcc.am.jb.setAutoCommit(jb.java:960)
at com.ibm.db2.jcc.am.df.setAutoCommit(df.java:158)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at com.atomikos.jdbc.AtomikosConnectionProxy.invoke(AtomikosConnectionProxy.java:161)
at $Proxy38.setAutoCommit(Unknown Source)
at org.apache.openjpa.lib.jdbc.DelegatingConnection.setAutoCommit(DelegatingConnection.java:167)
最佳答案
我能够修复它。这里的问题是我们需要告诉 openJpa 参与 Atomikos 事务。以下是additionalProperties() 方法的更新版本:
@Bean
@DependsOn("transactionManager")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter,
TransactionManager transactionManager) {
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
em.setJtaDataSource(dataSource);
em.setPackagesToScan("org.company.entity");
em.setJpaVendorAdapter(jpaVendorAdapter);
em.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());
em.setSharedCacheMode(SharedCacheMode.ALL);
em.setJpaProperties(additionalProperties(dataSource, transactionManager));
return em;
}
final Properties additionalProperties(DataSource dataSource, TransactionManager transactionManager) {
final Properties openJpaProperties = new Properties();
openJpaProperties.put("javax.persistence.transactionType", "JTA");
openJpaProperties.put("openjpa.TransactionMode", "managed");
openJpaProperties.put("openjpa.ConnectionFactoryMode", "managed");
openJpaProperties.put("openjpa.ConnectionFactory", dataSource);
openJpaProperties.put("openjpa.ManagedRuntime", "invocation(TransactionManagerMethod=com.atomikos.icatch.jta.TransactionManagerImp.getTransactionManager)");
openJpaProperties.put("openjpa.MetaDataRepository", "Preload=true");
openJpaProperties.put("openjpa.Compatibility", "QuotedNumbersInQueries=true");
openJpaProperties.put("openjpa.ConnectionFactoryProperties", "PrettyPrint=true, PrettyPrintLineLength=80, PrintParameters=true");
return openJpaProperties;
}
关于java - Atomikos + OpenJpa +DB2 XA 独立 - 不允许 setAutocommit(true),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30858273/
public void batchUpdate() throws SQLException { Statement stmt = null; try { this.connection.set
我遇到过this甲骨文java教程。作为该主题的初学者,我无法理解为什么需要在事务结束时设置 con.setAutocommit(true);。 这是神谕的解释: The statement con.
假设我有一个创建数据库连接的常用方法: Connection getConnection() throws SQLException { Connection con = ... // cre
这是典型的项目结构,一旦用户登录到应用程序,就会创建数据库连接。 Login.java{ Creating DB Connection DriverManager.registerDr
如果我们在 Oracle DB 的 Java 类中使用两次 setAutoCommit(true) 会发生什么。 try{ Connection conn = getConnection();
我正在使用 postgresql 9.2 和 C3p0 0.9.2.1,我创建了一个连接定制器来禁用 autoCommit 并设置 transactionMode 但是当我在 InitialConte
如果我执行 connection.setAutoCommit(false); 会发生什么,它会在数据库端创建一个新事务吗? 最佳答案 根据documentation , connection.setA
我注意到一些程序员使用 COMMIT 其他使用 conn.setAutoCommit(true); 来结束事务或回滚那么使用一个而不是另一个? 主要区别在哪里? conn.setAutoCommit(
我注意到一些程序员使用 COMMIT 其他使用 conn.setAutoCommit(true); 来结束事务或回滚那么使用一个而不是另一个? 主要区别在哪里? conn.setAutoCommit(
从池中获取数据库连接 (conn)。 假设该连接上的autocommit 为 TRUE。 现在 conn.setautocommit(false) 已设置; 然后经过几次语句更新,最后 conn.co
我的提问的基本根源来自于这种观察。当我使用Hibernate并进行任何查询时,我在MySQL日志中得到以下内容: SET autocommit=0 insert into SimpleNamedEnt
我在创建连接后立即设置 con.setAutoCommit(false); 以便数据库中没有未提交的内容。但事实证明,如果您关闭连接,则无论您的 setAutoCommit() 状态如何,所有事务都将
DB 是 Oracle。 我想为 SQL 存储过程和函数使用 Connection.setAutoCommit。会成功吗? 对于调用过程,我使用 CallableStatement 最佳答案 不行,c
我正在尝试在 JDBC 中为我正在开发的应用程序执行事务,但 Connection#setAutoCommit(false) 似乎不起作用。代码如下: String insertCliente = "
我遇到了 Postgres 驱动程序的问题,该驱动程序是 9.1-901.jdbc4,我的数据库服务器是 Postgres 10。我在批量更新中遇到问题,因此我尝试将驱动程序更改为版本 42.2.5。
我有一个 Spring Batch 项目,正在使用 Atomikos 进行事务管理。 这是我的数据源配置和atomikos配置。 @Bean public DataSource dataSou
我创建了一个 DBManager 类,如下所示 public class DBManager { public static String DRIVER = "oracle.jdbc.dr
假设我有以下代码。 try { connection.setAutoCommit(false) ; .... .... connection.commit(); } c
我对 set chained 有一些困惑setAutoCommit()中的声明net.sourceforge.jtds.jdbc.Driver中的方法 source code说: 2161 if (
我是一名优秀的程序员,十分优秀!