public void beforeCompletion() { // Issue #18 Close SqlSession and deregister it now // because afterCompletion may be called from a different thread if (!this.holder.isOpen()) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Transaction synchronization deregistering SqlSession [" + this.holder.getSqlSession() + "]"); } TransactionSynchronizationManager.unbindResource(sessionFactory); this.holderActive = false; if (LOGGER.isDebugEnabled()) { LOGGER.debug("Transaction synchronization closing SqlSession [" + this.holder.getSqlSession() + "]"); } this.holder.getSqlSession().close(); } }
public void afterCompletion(intstatus) { if (this.holderActive) { // afterCompletion may have been called from a different thread // so avoid failing if there is nothing in this one if (LOGGER.isDebugEnabled()) { LOGGER.debug("Transaction synchronization deregistering SqlSession [" + this.holder.getSqlSession() + "]"); } TransactionSynchronizationManager.unbindResourceIfPossible(sessionFactory); this.holderActive = false; if (LOGGER.isDebugEnabled()) { LOGGER.debug("Transaction synchronization closing SqlSession [" + this.holder.getSqlSession() + "]"); } this.holder.getSqlSession().close(); } this.holder.reset(); }
Assert.notNull(connectionFactory, "ConnectionFactory must not be null"); Assert.notNull(resourceFactory, "ResourceFactory must not be null");
RabbitResourceHolderresourceHolder= (RabbitResourceHolder) TransactionSynchronizationManager.getResource(connectionFactory); if (resourceHolder != null) { Channelchannel= resourceFactory.getChannel(resourceHolder); if (channel != null) { return resourceHolder; } } RabbitResourceHolderresourceHolderToUse= resourceHolder; if (resourceHolderToUse == null) { resourceHolderToUse = newRabbitResourceHolder(); } Connectionconnection= resourceFactory.getConnection(resourceHolderToUse); //NOSONAR Channelchannel=null; try { /* * If we are in a listener container, first see if there's a channel registered * for this consumer and the consumer is using the same connection factory. */ channel = ConsumerChannelRegistry.getConsumerChannel(connectionFactory); if (channel == null && connection == null) { connection = resourceFactory.createConnection(); if (resourceHolder == null) { /* * While creating a connection, a connection listener might have created a * transactional channel and bound it to the transaction. */ resourceHolder = (RabbitResourceHolder) TransactionSynchronizationManager .getResource(connectionFactory); if (resourceHolder != null) { channel = resourceHolder.getChannel(); resourceHolderToUse = resourceHolder; } } resourceHolderToUse.addConnection(connection); } if (channel == null) { channel = resourceFactory.createChannel(connection); } resourceHolderToUse.addChannel(channel, connection); if (resourceHolderToUse != resourceHolder) { bindResourceToTransaction(resourceHolderToUse, connectionFactory, resourceFactory.isSynchedLocalTransactionAllowed()); } return resourceHolderToUse;