001    /**
002     * 
003     * Copyright 2005 LogicBlaze, Inc. http://www.logicblaze.com
004     * 
005     * Licensed under the Apache License, Version 2.0 (the "License"); 
006     * you may not use this file except in compliance with the License. 
007     * You may obtain a copy of the License at 
008     * 
009     * http://www.apache.org/licenses/LICENSE-2.0
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS, 
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
014     * See the License for the specific language governing permissions and 
015     * limitations under the License. 
016     * 
017     **/
018    package org.jencks.factory;
019    
020    import java.util.Collection;
021    
022    import javax.resource.spi.BootstrapContext;
023    import javax.resource.spi.work.WorkManager;
024    import javax.transaction.xa.XAException;
025    
026    import org.apache.geronimo.connector.BootstrapContextImpl;
027    import org.apache.geronimo.connector.work.GeronimoWorkManager;
028    import org.apache.geronimo.transaction.ExtendedTransactionManager;
029    import org.apache.geronimo.transaction.context.TransactionContextManager;
030    import org.apache.geronimo.transaction.manager.TransactionLog;
031    import org.apache.geronimo.transaction.manager.XidImporter;
032    import org.springframework.beans.factory.FactoryBean;
033    import org.springframework.beans.factory.InitializingBean;
034    import org.springframework.context.ApplicationContext;
035    import org.springframework.context.ApplicationContextAware;
036    
037    /**
038     * A Spring {@link FactoryBean} for creating a {@link BootstrapContext} for the JCA container
039     * with the {@link WorkManager} and {@link ExtendedTransactionManager}.
040     *
041     * @version $Revision: 1.5 $
042     */
043    public class BootstrapContextFactoryBean implements FactoryBean, InitializingBean, ApplicationContextAware {
044    
045            private ApplicationContext applicationContext;
046        private BootstrapContext bootstrapContext;
047        private GeronimoWorkManager workManager;
048        private WorkManagerFactoryBean workManagerFactory = new WorkManagerFactoryBean();
049    
050        public Object getObject() throws Exception {
051            return bootstrapContext;
052        }
053    
054        public Class getObjectType() {
055            return BootstrapContext.class;
056        }
057    
058        public boolean isSingleton() {
059            return true;
060        }
061    
062        public void afterPropertiesSet() throws Exception {
063            bootstrapContext = new BootstrapContextImpl(getWorkManager());
064        }
065    
066        public void setApplicationContext(ApplicationContext applicationContext) {
067            this.applicationContext = applicationContext;
068        }
069    
070    
071        // Properties
072        //-------------------------------------------------------------------------
073        public GeronimoWorkManager getWorkManager() throws Exception {
074            if (workManager == null) {
075                    workManagerFactory.setApplicationContext(applicationContext);
076                workManager = workManagerFactory.getWorkManager();
077            }
078            return workManager;
079        }
080    
081        public void setWorkManager(GeronimoWorkManager workManager) {
082            this.workManager = workManager;
083        }
084    
085        public TransactionContextManager getTransactionContextManager() throws XAException {
086            return workManagerFactory.getTransactionContextManager();
087        }
088    
089        public void setTransactionContextManager(TransactionContextManager transactionContextManager) {
090            workManagerFactory.setTransactionContextManager(transactionContextManager);
091        }
092    
093        public int getThreadPoolSize() {
094            return workManagerFactory.getThreadPoolSize();
095        }
096    
097        public void setThreadPoolSize(int threadPoolSize) {
098            workManagerFactory.setThreadPoolSize(threadPoolSize);
099        }
100    
101        public ExtendedTransactionManager getTransactionManager() throws XAException {
102            return workManagerFactory.getTransactionManager();
103        }
104    
105        public void setTransactionManager(ExtendedTransactionManager transactionManager) {
106            workManagerFactory.setTransactionManager(transactionManager);
107        }
108    
109        public XidImporter getXidImporter() {
110            return workManagerFactory.getXidImporter();
111        }
112    
113        public void setXidImporter(XidImporter xidImporter) {
114            workManagerFactory.setXidImporter(xidImporter);
115        }
116    
117        public int getDefaultTransactionTimeoutSeconds() {
118            return workManagerFactory.getDefaultTransactionTimeoutSeconds();
119        }
120    
121        public void setDefaultTransactionTimeoutSeconds(int defaultTransactionTimeoutSeconds) {
122            workManagerFactory.setDefaultTransactionTimeoutSeconds(defaultTransactionTimeoutSeconds);
123        }
124    
125        public TransactionLog getTransactionLog() {
126            return workManagerFactory.getTransactionLog();
127        }
128    
129        public void setTransactionLog(TransactionLog transactionLog) {
130            workManagerFactory.setTransactionLog(transactionLog);
131        }
132    
133        public Collection getResourceManagers() {
134            return workManagerFactory.getResourceManagers();
135        }
136    
137        public void setResourceManagers(Collection resourceManagers) {
138            workManagerFactory.setResourceManagers(resourceManagers);
139        }
140    }