@Override protected Object doGetTransaction() { JpaTransactionObject txObject = new JpaTransactionObject(); txObject.setSavepointAllowed(isNestedTransactionAllowed()); EntityManagerHolder emHolder = (EntityManagerHolder) TransactionSynchronizationManager.getResource(getEntityManagerFactory()); if (emHolder != null) { if (logger.isDebugEnabled()) { logger.debug("Found thread-bound EntityManager [" + emHolder.getEntityManager() + "] for JPA transaction"); } txObject.setEntityManagerHolder(emHolder, false); } if (getDataSource() != null) { ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(getDataSource()); txObject.setConnectionHolder(conHolder); } return txObject; }
@Override protected Object doGetTransaction() { JdoTransactionObject txObject = new JdoTransactionObject(); txObject.setSavepointAllowed(isNestedTransactionAllowed()); PersistenceManagerHolder pmHolder = (PersistenceManagerHolder) TransactionSynchronizationManager.getResource(getPersistenceManagerFactory()); if (pmHolder != null) { if (logger.isDebugEnabled()) { logger.debug("Found thread-bound PersistenceManager [" + pmHolder.getPersistenceManager() + "] for JDO transaction"); } txObject.setPersistenceManagerHolder(pmHolder, false); } if (getDataSource() != null) { ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(getDataSource()); txObject.setConnectionHolder(conHolder); } return txObject; }
@Test public void testAddInvoicesWithinTransaction() throws Exception { given(callableStatement.execute()).willReturn(false); given(callableStatement.getUpdateCount()).willReturn(-1); given(callableStatement.getObject(3)).willReturn(4); given(connection.prepareCall("{call " + AddInvoice.SQL + "(?, ?, ?)}") ).willReturn(callableStatement); TransactionSynchronizationManager.bindResource(dataSource, new ConnectionHolder(connection)); try { testAddInvoice(1106, 3); verify(callableStatement).setObject(1, 1106, Types.INTEGER); verify(callableStatement).setObject(2, 3, Types.INTEGER); verify(callableStatement).registerOutParameter(3, Types.INTEGER); verify(connection, never()).close(); } finally { TransactionSynchronizationManager.unbindResource(dataSource); connection.close(); } }
@Override public void addTenantForSchema(String schemaName) { addTenantForSchemaInternal(schemaName); registerAllEntitiesWithEnhancer(); HibernateConnectionSource defaultConnectionSource = (HibernateConnectionSource) connectionSources.getDefaultConnectionSource(); DataSource dataSource = defaultConnectionSource.getDataSource(); if(dataSource instanceof TransactionAwareDataSourceProxy) { dataSource = ((TransactionAwareDataSourceProxy) dataSource).getTargetDataSource(); } Object existing = TransactionSynchronizationManager.getResource(dataSource); if(existing instanceof ConnectionHolder) { ConnectionHolder connectionHolder = (ConnectionHolder) existing; Connection connection = connectionHolder.getConnection(); try { if(!connection.isClosed() && !connection.isReadOnly()) { schemaHandler.useDefaultSchema(connection); } } catch (SQLException e) { throw new DatastoreConfigurationException("Failed to reset to default schema: " + e.getMessage(), e); } } }
/** * 获得EntityManager * * @return */ protected final EntityManager getEntityManager() { TransactionMode tx = jefEmf.getDefault().getTxType(); EntityManager em; switch (tx) { case JPA: case JTA: em = EntityManagerFactoryUtils.doGetTransactionalEntityManager(entityManagerFactory, null); if (em == null) { // 当无事务时。Spring返回null em = entityManagerFactory.createEntityManager(null, Collections.EMPTY_MAP); } break; case JDBC: ConnectionHolder conn = (ConnectionHolder) TransactionSynchronizationManager.getResource(jefEmf.getDefault().getDataSource()); if (conn == null) {// 基于数据源的Spring事务 em = entityManagerFactory.createEntityManager(null, Collections.EMPTY_MAP); } else { ManagedTransactionImpl session = new ManagedTransactionImpl(jefEmf.getDefault(), conn.getConnection()); em = new JefEntityManager(entityManagerFactory, null, session); } break; default: throw new UnsupportedOperationException(tx.name()); } return em; }
/** * 获得EntityManager * * @return */ public static final EntityManager getEntityManager(JefEntityManagerFactory jefEmf) { TransactionMode tx = jefEmf.getDefault().getTxType(); EntityManager em; switch (tx) { case JPA: case JTA: em = EntityManagerFactoryUtils.doGetTransactionalEntityManager(jefEmf, null); if (em == null) { // 当无事务时。Spring返回null em = jefEmf.createEntityManager(null, Collections.EMPTY_MAP); } break; case JDBC: ConnectionHolder conn = (ConnectionHolder) TransactionSynchronizationManager.getResource(jefEmf.getDefault().getDataSource()); if (conn == null) {// 基于数据源的Spring事务 em = jefEmf.createEntityManager(null, Collections.EMPTY_MAP); } else { ManagedTransactionImpl session = new ManagedTransactionImpl(jefEmf.getDefault(), conn.getConnection()); em = new JefEntityManager(jefEmf, null, session); } break; default: throw new UnsupportedOperationException(tx.name()); } return em; }
public boolean prepare(){ try { if (status.getTransaction() instanceof JdbcTransactionObjectSupport) { JdbcTransactionObjectSupport support = (JdbcTransactionObjectSupport) status.getTransaction(); ConnectionHolder holder = support.getConnectionHolder(); Connection con = holder.getConnection(); return !con.isClosed() && !con.isReadOnly(); } }catch (Exception e){ } return false; }
@Override public boolean commit() throws SQLException { logger.debug("[realDbCommit]"+getTransactionId().getCurrentId()); if(status.getTransaction() instanceof JdbcTransactionObjectSupport){ JdbcTransactionObjectSupport support=(JdbcTransactionObjectSupport)status.getTransaction(); ConnectionHolder holder=support.getConnectionHolder(); Connection con = holder.getConnection(); con.commit(); logger.debug("[realDbCommit]["+getTransactionId().getCurrentId()+"]"+con); } clearConnection(); return true; }
@Override public boolean rollback() throws SQLException { if(status.getTransaction() instanceof JdbcTransactionObjectSupport) { JdbcTransactionObjectSupport support = (JdbcTransactionObjectSupport) status.getTransaction(); ConnectionHolder holder = support.getConnectionHolder(); Connection con = holder.getConnection(); con.rollback(); } clearConnection(); return true; }
@Override public Object createSavepoint() throws TransactionException { this.savepointCounter++; String savepointName = ConnectionHolder.SAVEPOINT_NAME_PREFIX + this.savepointCounter; this.entityManager.setSavepoint(savepointName); return savepointName; }
@Override protected Object doGetTransaction() { HibernateTransactionObject txObject = new HibernateTransactionObject(); txObject.setSavepointAllowed(isNestedTransactionAllowed()); SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.getResource(getSessionFactory()); if (sessionHolder != null) { if (logger.isDebugEnabled()) { logger.debug("Found thread-bound Session [" + sessionHolder.getSession() + "] for Hibernate transaction"); } txObject.setSessionHolder(sessionHolder); } else if (this.hibernateManagedSession) { try { Session session = this.sessionFactory.getCurrentSession(); if (logger.isDebugEnabled()) { logger.debug("Found Hibernate-managed Session [" + session + "] for Spring-managed transaction"); } txObject.setExistingSession(session); } catch (HibernateException ex) { throw new DataAccessResourceFailureException( "Could not obtain Hibernate-managed Session for Spring-managed transaction", ex); } } if (getDataSource() != null) { ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(getDataSource()); txObject.setConnectionHolder(conHolder); } return txObject; }
@Override protected Object doGetTransaction() { HibernateTransactionObject txObject = new HibernateTransactionObject(); txObject.setSavepointAllowed(isNestedTransactionAllowed()); SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.getResource(getSessionFactory()); if (sessionHolder != null) { if (logger.isDebugEnabled()) { logger.debug("Found thread-bound Session [" + SessionFactoryUtils.toString(sessionHolder.getSession()) + "] for Hibernate transaction"); } txObject.setSessionHolder(sessionHolder); } else if (this.hibernateManagedSession) { try { Session session = getSessionFactory().getCurrentSession(); if (logger.isDebugEnabled()) { logger.debug("Found Hibernate-managed Session [" + SessionFactoryUtils.toString(session) + "] for Spring-managed transaction"); } txObject.setExistingSession(session); } catch (HibernateException ex) { throw new DataAccessResourceFailureException( "Could not obtain Hibernate-managed Session for Spring-managed transaction", ex); } } if (getDataSource() != null) { ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(getDataSource()); txObject.setConnectionHolder(conHolder); } return txObject; }
public Connection getConnection() { ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource( dataSource); if (conHolder == null) { throw new IllegalStateException("It seems not to be existing a transaction."); } return conHolder.getConnection(); }
@Override public Integer getTimeout() throws SQLException { ConnectionHolder holder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource); if (holder != null && holder.hasTimeout()) { return holder.getTimeToLiveInSeconds(); } return null; }
public Object createSavepoint() throws TransactionException { this.savepointCounter++; String savepointName = ConnectionHolder.SAVEPOINT_NAME_PREFIX + this.savepointCounter; try { Savepoint sp=this.entityManager.setSavepoint(savepointName); return sp; } catch (SavepointNotSupportedException e) { throw new NestedTransactionNotSupportedException("Cannot create a nested transaction because savepoints are not supported."); } catch (Throwable ex) { throw new CannotCreateTransactionException("Could not create JDBC savepoint", ex); } }
private SuspendedResourcesHolder(EntityManagerHolder emHolder, ConnectionHolder conHolder) { this.entityManagerHolder = emHolder; this.connectionHolder = conHolder; }
private ConnectionHolder getConnectionHolder() { return this.connectionHolder; }
private SuspendedResourcesHolder(PersistenceManagerHolder pmHolder, ConnectionHolder conHolder) { this.persistenceManagerHolder = pmHolder; this.connectionHolder = conHolder; }
private SuspendedResourcesHolder(SessionHolder sessionHolder, ConnectionHolder conHolder) { this.sessionHolder = sessionHolder; this.connectionHolder = conHolder; }