public InterceptorsImpl()

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());
            }
        }