From scm-return-20296-apmail-geronimo-scm-archive=geronimo.apache.org@geronimo.apache.org Sat Jun 23 17:50:44 2007 Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 61668 invoked from network); 23 Jun 2007 17:50:43 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 23 Jun 2007 17:50:43 -0000 Received: (qmail 91142 invoked by uid 500); 23 Jun 2007 17:50:46 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 91129 invoked by uid 500); 23 Jun 2007 17:50:45 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 91118 invoked by uid 99); 23 Jun 2007 17:50:45 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 23 Jun 2007 10:50:45 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 23 Jun 2007 10:50:41 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 55BF81A981D; Sat, 23 Jun 2007 10:50:21 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r550068 - in /geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo: gbean/runtime/GBeanInstance.java kernel/basic/BasicLifecycleMonitor.java Date: Sat, 23 Jun 2007 17:50:21 -0000 To: scm@geronimo.apache.org From: djencks@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070623175021.55BF81A981D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: djencks Date: Sat Jun 23 10:50:20 2007 New Revision: 550068 URL: http://svn.apache.org/viewvc?view=rev&rev=550068 Log: GERONIMO-3257 introduce ordering so reference collections get updated before dependencies are notified Modified: geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/basic/BasicLifecycleMonitor.java Modified: geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java?view=diff&rev=550068&r1=550067&r2=550068 ============================================================================== --- geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java (original) +++ geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java Sat Jun 23 10:50:20 2007 @@ -375,11 +375,13 @@ throw new InvalidConfigurationException("Could not inject configuration data into the GBean " + abstractName, e); } - for (int i = 0; i < dependencies.length; i++) { - dependencies[i].online(); - } + //Add the reference to all applicable reference collections before possibly starting the gbean having an + //explicit reference to the reference. for (int i = 0; i < references.length; i++) { references[i].online(); + } + for (int i = 0; i < dependencies.length; i++) { + dependencies[i].online(); } } Modified: geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/basic/BasicLifecycleMonitor.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/basic/BasicLifecycleMonitor.java?view=diff&rev=550068&r1=550067&r2=550068 ============================================================================== --- geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/basic/BasicLifecycleMonitor.java (original) +++ geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/basic/BasicLifecycleMonitor.java Sat Jun 23 10:50:20 2007 @@ -23,6 +23,9 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; +import java.util.LinkedHashSet; +import java.util.ArrayList; +import java.util.Collection; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -83,7 +86,7 @@ // find all listeners interested in events from this source SourceInfo sourceInfo = new SourceInfo(interfaceTypes); - HashSet listeners = sourceInfo.getListeners(); + Set listeners = sourceInfo.getListeners(); for (Iterator listenerIterator = listenerPatterns.entrySet().iterator(); listenerIterator.hasNext();) { Map.Entry entry = (Map.Entry) listenerIterator.next(); Set patterns = (Set) entry.getValue(); @@ -131,18 +134,18 @@ listenerPatterns.remove(listener); } - private synchronized Set getTargets(AbstractName source) { + private synchronized Collection getTargets(AbstractName source) { SourceInfo targets = (SourceInfo) boundListeners.get(source); if (targets == null) { // no one is interested in this event return Collections.EMPTY_SET; } else { - return new HashSet(targets.getListeners()); + return new ArrayList(targets.getListeners()); } } private void fireLoadedEvent(AbstractName refInfoName) { - Set targets = getTargets(refInfoName); + Collection targets = getTargets(refInfoName); for (Iterator iterator = targets.iterator(); iterator.hasNext();) { LifecycleListener listener = (LifecycleListener) iterator.next(); try { @@ -154,7 +157,7 @@ } private void fireStartingEvent(AbstractName source) { - Set targets = getTargets(source); + Collection targets = getTargets(source); for (Iterator iterator = targets.iterator(); iterator.hasNext();) { LifecycleListener listener = (LifecycleListener) iterator.next(); try { @@ -166,7 +169,7 @@ } private void fireRunningEvent(AbstractName source) { - Set targets = getTargets(source); + Collection targets = getTargets(source); for (Iterator iterator = targets.iterator(); iterator.hasNext();) { LifecycleListener listener = (LifecycleListener) iterator.next(); try { @@ -178,7 +181,7 @@ } private void fireStoppingEvent(AbstractName source) { - Set targets = getTargets(source); + Collection targets = getTargets(source); for (Iterator iterator = targets.iterator(); iterator.hasNext();) { LifecycleListener listener = (LifecycleListener) iterator.next(); try { @@ -190,7 +193,7 @@ } private void fireStoppedEvent(AbstractName source) { - Set targets = getTargets(source); + Collection targets = getTargets(source); for (Iterator iterator = targets.iterator(); iterator.hasNext();) { LifecycleListener listener = (LifecycleListener) iterator.next(); try { @@ -202,7 +205,7 @@ } private void fireFailedEvent(AbstractName source) { - Set targets = getTargets(source); + Collection targets = getTargets(source); for (Iterator iterator = targets.iterator(); iterator.hasNext();) { LifecycleListener listener = (LifecycleListener) iterator.next(); try { @@ -214,7 +217,7 @@ } private void fireUnloadedEvent(AbstractName source) { - Set targets = getTargets(source); + Collection targets = getTargets(source); for (Iterator iterator = targets.iterator(); iterator.hasNext();) { LifecycleListener listener = (LifecycleListener) iterator.next(); try { @@ -271,7 +274,7 @@ private final class SourceInfo { private final Set interfaceTypes; - private final HashSet listeners = new HashSet(); + private final HashSet listeners = new LinkedHashSet(); public SourceInfo(Set interfaceTypes) { this.interfaceTypes = interfaceTypes; @@ -281,7 +284,7 @@ return interfaceTypes; } - public HashSet getListeners() { + public Set getListeners() { return listeners; } }