001    /*
002     * Copyright 2002-2005 the original author or authors.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *      http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    
017    package org.jencks.factory;
018    
019    import org.apache.geronimo.connector.outbound.connectionmanagerconfig.TransactionSupport;
020    import org.apache.geronimo.connector.outbound.connectionmanagerconfig.XATransactions;
021    import org.springframework.beans.factory.FactoryBean;
022    import org.springframework.beans.factory.InitializingBean;
023    
024    /**
025     * This FactoryBean creates the xa transaction strategy for the
026     * JCA connection manager used.
027     * <p/>
028     * This class can be injected in the ConnectionManagerFactoryBean to
029     * configure the ConnectionManager instance returned.
030     *
031     * @author Thierry Templier
032     * @see ConnectionManagerFactoryBean#setTransactionSupport(TransactionSupport)
033     */
034    public class XATransactionFactoryBean implements FactoryBean, InitializingBean {
035    
036        private boolean useTransactionCaching;
037        private boolean useThreadCaching;
038    
039        private TransactionSupport transactionSupport;
040    
041        public Object getObject() throws Exception {
042            return transactionSupport;
043        }
044    
045        public Class getObjectType() {
046            return TransactionSupport.class;
047        }
048    
049        public boolean isSingleton() {
050            return true;
051        }
052    
053        /**
054         * Set the useThreadCaching property to allow the ConnectionManager to
055         * cache connections for a thread.
056         */
057        public void setUseThreadCaching(boolean useThreadCaching) {
058            this.useThreadCaching = useThreadCaching;
059        }
060    
061        /**
062         * Set the useTransactionCaching property to allow the ConnectionManager to
063         * cache connections for the current transaction.
064         * <p/>
065         * This allows connections to be used several times in the same transaction.
066         * So it prevents the connection to be enlisted several times in the
067         * current transaction.
068         */
069        public void setUseTransactionCaching(boolean useTransactionCaching) {
070            this.useTransactionCaching = useTransactionCaching;
071        }
072    
073        /**
074         * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
075         */
076        public void afterPropertiesSet() throws Exception {
077            this.transactionSupport = new XATransactions(useTransactionCaching, useThreadCaching);
078        }
079    
080    }