in geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/GenericConnectionManager.java [90:164]
public InterceptorsImpl(TransactionSupport transactionSupport,
PoolingSupport pooling,
SubjectSource subjectSource,
String name,
ConnectionTracker connectionTracker,
TransactionManager transactionManager,
ManagedConnectionFactory mcf, ClassLoader classLoader) {
//check for consistency between attributes
if (subjectSource == null && pooling instanceof PartitionedPool && ((PartitionedPool) pooling).isPartitionBySubject()) {
throw new IllegalStateException("To use Subject in pooling, you need a SecurityDomain");
}
if (mcf == null) {
throw new NullPointerException("No ManagedConnectionFactory supplied for " + name);
}
if (mcf instanceof jakarta.resource.spi.TransactionSupport) {
jakarta.resource.spi.TransactionSupport txSupport = (jakarta.resource.spi.TransactionSupport)mcf;
jakarta.resource.spi.TransactionSupport.TransactionSupportLevel txSupportLevel = txSupport.getTransactionSupport();
log.info("Runtime TransactionSupport level: " + txSupportLevel);
if (txSupportLevel != null) {
if (txSupportLevel == jakarta.resource.spi.TransactionSupport.TransactionSupportLevel.NoTransaction) {
transactionSupport = NoTransactions.INSTANCE;
} else if (txSupportLevel == jakarta.resource.spi.TransactionSupport.TransactionSupportLevel.LocalTransaction) {
if (transactionSupport != NoTransactions.INSTANCE) {
transactionSupport = LocalTransactions.INSTANCE;
}
} else {
if (transactionSupport != NoTransactions.INSTANCE && transactionSupport != LocalTransactions.INSTANCE) {
transactionSupport = new XATransactions(true, false);
}
}
}
} else {
log.info("No runtime TransactionSupport");
}
//Set up the interceptor stack
MCFConnectionInterceptor tail = new MCFConnectionInterceptor();
ConnectionInterceptor stack = tail;
stack = transactionSupport.addXAResourceInsertionInterceptor(stack, name);
stack = pooling.addPoolingInterceptors(stack);
if (log.isLoggable(Level.FINEST)) {
log.log(Level.FINEST,"Connection Manager " + name + " installed pool " + stack);
}
this.poolingSupport = pooling;
stack = transactionSupport.addTransactionInterceptors(stack, transactionManager);
if (subjectSource != null) {
stack = new SubjectInterceptor(stack, subjectSource);
}
if (transactionSupport.isRecoverable()) {
this.recoveryStack = new TCCLInterceptor(stack, classLoader);
} else {
this.recoveryStack = null;
}
stack = new ConnectionHandleInterceptor(stack);
stack = new TCCLInterceptor(stack, classLoader);
if (connectionTracker != null) {
stack = new ConnectionTrackingInterceptor(stack,
name,
connectionTracker);
}
tail.setStack(stack);
this.stack = stack;
if (log.isLoggable(Level.FINE)) {
StringBuilder s = new StringBuilder("ConnectionManager Interceptor stack;\n");
stack.info(s);
log.log(Level.FINE, s.toString());
}
}