1 /** 2 * 3 * Copyright 2004 The Apache Software Foundation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package org.apache.geronimo.transaction.manager; 19 20 import java.util.ArrayList; 21 import java.util.Collection; 22 import java.util.List; 23 import javax.transaction.xa.XAException; 24 25 import org.apache.geronimo.gbean.GBeanInfo; 26 import org.apache.geronimo.gbean.GBeanInfoBuilder; 27 import org.apache.geronimo.gbean.ReferenceCollection; 28 import org.apache.geronimo.gbean.ReferenceCollectionEvent; 29 import org.apache.geronimo.gbean.ReferenceCollectionListener; 30 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; 31 32 /** 33 * Used to provide the GBean metadata for the GeronimoTransactionManager class 34 * 35 * @version $Rev: 430508 $ $Date: 2006-08-10 12:56:47 -0700 (Thu, 10 Aug 2006) $ 36 */ 37 public class GeronimoTransactionManagerGBean extends GeronimoTransactionManager { 38 39 /** 40 * TODO NOTE!!! this should be called in an unspecified transaction context, but we cannot enforce this restriction! 41 */ 42 public GeronimoTransactionManagerGBean(int defaultTransactionTimeoutSeconds, XidFactory xidFactory, TransactionLog transactionLog, Collection resourceManagers) throws XAException { 43 super(defaultTransactionTimeoutSeconds == 0 ? DEFAULT_TIMEOUT : defaultTransactionTimeoutSeconds, 44 xidFactory, 45 transactionLog, 46 resourceManagers); 47 } 48 49 50 /** 51 * We can track as resources are added into the geronimo kernel. 52 * 53 * @param resourceManagers 54 * @return the original list of resources. 55 */ 56 protected List watchResourceManagers(Collection resourceManagers) { 57 if( resourceManagers instanceof ReferenceCollection ) { 58 List copy; 59 synchronized (resourceManagers) { 60 copy = new ArrayList(resourceManagers); 61 ((ReferenceCollection)resourceManagers).addReferenceCollectionListener(new ReferenceCollectionListener() { 62 public void memberAdded(ReferenceCollectionEvent event) { 63 ResourceManager resourceManager = (ResourceManager) event.getMember(); 64 recoverResourceManager(resourceManager); 65 } 66 67 public void memberRemoved(ReferenceCollectionEvent event) { 68 } 69 70 }); 71 } 72 return copy; 73 } else { 74 return super.watchResourceManagers(resourceManagers); 75 } 76 } 77 78 public static final GBeanInfo GBEAN_INFO; 79 80 static { 81 GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(GeronimoTransactionManagerGBean.class, 82 TransactionManagerImplGBean.GBEAN_INFO, 83 NameFactory.TRANSACTION_MANAGER); 84 GBEAN_INFO = infoFactory.getBeanInfo(); 85 } 86 87 public static GBeanInfo getGBeanInfo() { 88 return GBEAN_INFO; 89 } 90 91 }