You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ha...@apache.org on 2011/08/17 03:48:08 UTC

svn commit: r1158486 - in /geronimo/server/trunk/plugins/activemq: activemq-broker-blueprint/src/main/plan/ activemq-broker-blueprint/src/main/resources/OSGI-INF/blueprint/ activemq-broker-blueprint/src/main/resources/etc/ activemq-ra/ geronimo-activem...

Author: hanhongfang
Date: Wed Aug 17 01:48:08 2011
New Revision: 1158486

URL: http://svn.apache.org/viewvc?rev=1158486&view=rev
Log:
GERONIMO-6110 On 3.0 we don't register the 61616 port and the IP address for the server socket is not correct.

Modified:
    geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/plan/plan.xml
    geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/resources/OSGI-INF/blueprint/activemq.xml
    geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/resources/etc/blueprint-activemq-placeholder.cfg
    geronimo/server/trunk/plugins/activemq/activemq-ra/pom.xml
    geronimo/server/trunk/plugins/activemq/geronimo-activemq-blueprint/src/main/java/org/apache/geronimo/activemq/ActiveMQBrokerServiceMonitorGBean.java

Modified: geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/plan/plan.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/plan/plan.xml?rev=1158486&r1=1158485&r2=1158486&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/plan/plan.xml (original)
+++ geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/plan/plan.xml Wed Aug 17 01:48:08 2011
@@ -41,5 +41,5 @@
         <!--</reference>-->
     <!--</gbean>-->
     <!---->
-    <!--<gbean name="ActiveMQBrokerServiceMonitor" class="org.apache.geronimo.activemq.ActiveMQBrokerServiceMonitorGBean"/>-->
+    <gbean name="ActiveMQBrokerServiceMonitor" class="org.apache.geronimo.activemq.ActiveMQBrokerServiceMonitorGBean"/>
 </module>

Modified: geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/resources/OSGI-INF/blueprint/activemq.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/resources/OSGI-INF/blueprint/activemq.xml?rev=1158486&r1=1158485&r2=1158486&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/resources/OSGI-INF/blueprint/activemq.xml (original)
+++ geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/resources/OSGI-INF/blueprint/activemq.xml Wed Aug 17 01:48:08 2011
@@ -34,7 +34,7 @@
         <cm:default-properties>
             <cm:property name="activemq.brokerName" value="DefaultActiveMQBroker"/>
             <cm:property name="activemq.data" value="var/activemq"/>
-            <cm:property name="serverHostname" value="localhost"/>
+            <cm:property name="serverHostname" value="0.0.0.0"/>
             <cm:property name="activemq.port" value="61616"/>
             <cm:property name="portOffset" value="0"/>
         </cm:default-properties>

Modified: geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/resources/etc/blueprint-activemq-placeholder.cfg
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/resources/etc/blueprint-activemq-placeholder.cfg?rev=1158486&r1=1158485&r2=1158486&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/resources/etc/blueprint-activemq-placeholder.cfg (original)
+++ geronimo/server/trunk/plugins/activemq/activemq-broker-blueprint/src/main/resources/etc/blueprint-activemq-placeholder.cfg Wed Aug 17 01:48:08 2011
@@ -20,6 +20,6 @@
 activemq.brokerName=DefaultActiveMQBroker
 activemq.data=var/activmeq
 
-serverHostname=localhost
+serverHostname=0.0.0.0
 activemq.port=61616
 portOffset=0
\ No newline at end of file

Modified: geronimo/server/trunk/plugins/activemq/activemq-ra/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/activemq/activemq-ra/pom.xml?rev=1158486&r1=1158485&r2=1158486&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/activemq/activemq-ra/pom.xml (original)
+++ geronimo/server/trunk/plugins/activemq/activemq-ra/pom.xml Wed Aug 17 01:48:08 2011
@@ -90,7 +90,7 @@
                                         <attribute name="ServerUrl">tcp://${ActiveMQHostname}:${ActiveMQPort + PortOffset}</attribute>
                                 </gbean>
                              </config-xml-content>
-                            <config-substitution key="ActiveMQHostname">localhost</config-substitution>
+                            <config-substitution key="ActiveMQHostname">0.0.0.0</config-substitution>
                             <config-substitution key="ActiveMQPort">61616</config-substitution>
                         </plugin-artifact>
                     </instance>

Modified: geronimo/server/trunk/plugins/activemq/geronimo-activemq-blueprint/src/main/java/org/apache/geronimo/activemq/ActiveMQBrokerServiceMonitorGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/activemq/geronimo-activemq-blueprint/src/main/java/org/apache/geronimo/activemq/ActiveMQBrokerServiceMonitorGBean.java?rev=1158486&r1=1158485&r2=1158486&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/activemq/geronimo-activemq-blueprint/src/main/java/org/apache/geronimo/activemq/ActiveMQBrokerServiceMonitorGBean.java (original)
+++ geronimo/server/trunk/plugins/activemq/geronimo-activemq-blueprint/src/main/java/org/apache/geronimo/activemq/ActiveMQBrokerServiceMonitorGBean.java Wed Aug 17 01:48:08 2011
@@ -19,6 +19,8 @@ package org.apache.geronimo.activemq;
 
 import java.net.URI;
 import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -28,7 +30,6 @@ import org.apache.activemq.broker.Broker
 import org.apache.activemq.broker.TransportConnector;
 import org.apache.geronimo.activemq.management.ActiveMQTransportConnector;
 import org.apache.geronimo.gbean.AbstractName;
-import org.apache.geronimo.gbean.AbstractNameQuery;
 import org.apache.geronimo.gbean.GBeanData;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
@@ -37,85 +38,111 @@ import org.apache.geronimo.gbean.annotat
 import org.apache.geronimo.gbean.annotation.ParamSpecial;
 import org.apache.geronimo.gbean.annotation.SpecialAttributeType;
 import org.apache.geronimo.kernel.Kernel;
-import org.apache.geronimo.kernel.lifecycle.LifecycleListener;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.blueprint.container.BlueprintContainer;
+import org.osgi.service.blueprint.container.BlueprintEvent;
+import org.osgi.service.blueprint.container.BlueprintListener;
 
-public class ActiveMQBrokerServiceMonitorGBean implements GBeanLifecycle, LifecycleListener {
+public class ActiveMQBrokerServiceMonitorGBean implements GBeanLifecycle{
 
     private Kernel kernel;
 
-    private Map<AbstractName, List<AbstractName>> brokerNameConnectorNamesMap = new ConcurrentHashMap<AbstractName, List<AbstractName>>();
+    private Map<String, List<AbstractName>> brokerNameConnectorNamesMap = new ConcurrentHashMap<String, List<AbstractName>>();
 
     private BundleContext bundleContext;
-
-    public ActiveMQBrokerServiceMonitorGBean(@ParamSpecial(type = SpecialAttributeType.kernel) Kernel kernel, @ParamSpecial(type = SpecialAttributeType.bundleContext) BundleContext bundleContext) {
+    
+    private AbstractName abstractName; 
+    
+    private ServiceRegistration registration;
+
+    public ActiveMQBrokerServiceMonitorGBean(@ParamSpecial(type = SpecialAttributeType.kernel) Kernel kernel,
+            @ParamSpecial(type = SpecialAttributeType.bundleContext) BundleContext bundleContext,
+            @ParamSpecial(type = SpecialAttributeType.abstractName) AbstractName abstractName) {
         this.kernel = kernel;
         this.bundleContext = bundleContext;
+        this.abstractName = abstractName;
     }
 
-    public void doFail() {
-        kernel.getLifecycleMonitor().removeLifecycleListener(this);
-    }
-
-    public void doStart() throws Exception {
-        AbstractNameQuery brokerServiceQuery = new AbstractNameQuery(new URI("?#org.apache.geronimo.activemq.BrokerServiceGBean"));
-        kernel.getLifecycleMonitor().addLifecycleListener(this, brokerServiceQuery);
-        Set<AbstractName> brokerServiceNames = kernel.listGBeans(brokerServiceQuery);
-        for (AbstractName brokerServiceName : brokerServiceNames) {
-            if (kernel.isRunning(brokerServiceName)) {
-                startConnectorWrapperGBeans(brokerServiceName);
+    public void doStart() throws Exception {     
+        BlueprintListener listener = new BlueprintListener() {
+            @Override
+            public void blueprintEvent(BlueprintEvent event) {
+                if (event.getType() == BlueprintEvent.CREATED) {
+                    startConnectorGBeans(event.getBundle());
+                } else if (event.getType() == BlueprintEvent.DESTROYED) {
+                    stopConnectorGBeans(event.getBundle());
+                }
+            }
+        };        
+        registration = bundleContext.registerService(BlueprintListener.class.getName(), listener, new Hashtable());
+        
+        startConnectorGBeans(null);
+   }
+    
+    protected void startConnectorGBeans(Bundle bundle) {
+        Set<BrokerService> brokerServices = getBrokerService(bundle);
+        if (brokerServices == null) {
+            return;
+        }
+        for (BrokerService brokerService : brokerServices) {
+            if (brokerService.isStarted()) {
+                startConnectorWrapperGBeans(brokerService);
             }
         }
     }
-
-    public void doStop() throws Exception {
-        kernel.getLifecycleMonitor().removeLifecycleListener(this);
-    }
-
-    public void failed(AbstractName abstractName) {
-        stopConnectorWrapperGBeans(abstractName);
-    }
-
-    public void loaded(AbstractName abstractName) {
-    }
-
-    public void running(AbstractName abstractName) {
-        startConnectorWrapperGBeans(abstractName);
-    }
-
-    public void starting(AbstractName abstractName) {
-    }
-
-    public void stopped(AbstractName abstractName) {
-        stopConnectorWrapperGBeans(abstractName);
+    
+    protected void stopConnectorGBeans(Bundle bundle) {
+        Set<BrokerService> brokerServices = getBrokerService(bundle);
+        if (brokerServices == null) {
+            return;
+        }
+        for (BrokerService brokerService : brokerServices) {
+            stopConnectorWrapperGBeans(brokerService.getBrokerName());
+        }
     }
 
-    public void stopping(AbstractName abstractName) {
+    public void doStop() throws Exception {
+        doFail();
     }
-
-    public void unloaded(AbstractName abstractName) {
+    
+    public void doFail() {
+        if (registration != null) {
+            registration.unregister();            
+        }        
+        for (String brokerName: brokerNameConnectorNamesMap.keySet()) {
+            stopConnectorWrapperGBeans(brokerName);
+        }
+        brokerNameConnectorNamesMap.clear();
     }
-
-    protected void startConnectorWrapperGBeans(AbstractName brokerAbstractName) {
-        try {
-            BrokerService brokerService = ((BrokerServiceGBean) kernel.getGBean(brokerAbstractName)).getBrokerContainer();
+    
+    protected void startConnectorWrapperGBeans(BrokerService brokerService) {
+        try {           
             List<AbstractName> connectorNames = new ArrayList<AbstractName>();
             GBeanInfo gBeanInfo = new AnnotationGBeanInfoFactory().getGBeanInfo(ActiveMQTransportConnector.class);
             for (TransportConnector transportConnector : brokerService.getTransportConnectors()) {
-                AbstractName connectorAbName = kernel.getNaming().createSiblingName(brokerAbstractName, transportConnector.getUri().toString().replace(':', '_'), GBeanInfoBuilder.DEFAULT_J2EE_TYPE);
+                AbstractName connectorAbName = kernel.getNaming().createSiblingName(this.abstractName, transportConnector.getUri().toString().replace(':', '_'), GBeanInfoBuilder.DEFAULT_J2EE_TYPE);
                 GBeanData gbeanData = new GBeanData(connectorAbName, gBeanInfo);
                 gbeanData.setAttribute("transportConnector", transportConnector);
                 kernel.loadGBean(gbeanData, bundleContext);
                 kernel.startGBean(connectorAbName);
                 connectorNames.add(connectorAbName);
             }
-            brokerNameConnectorNamesMap.put(brokerAbstractName, connectorNames);
+            // in case this brokerService has been processed, remove the old connectorNames
+            List<AbstractName> oldConnectorNames = brokerNameConnectorNamesMap.remove(brokerService.getBrokerName());
+            if (oldConnectorNames!=null) {
+                stopConnectorWrapperGBeans(brokerService.getBrokerName());
+            }
+            // add new connectorsNames
+            brokerNameConnectorNamesMap.put(brokerService.getBrokerName(), connectorNames);
         } catch (Exception e) {
         }
     }
-
-    protected void stopConnectorWrapperGBeans(AbstractName brokerAbstractName) {
-        List<AbstractName> connectorNames = brokerNameConnectorNamesMap.remove(brokerAbstractName);
+ 
+    protected void stopConnectorWrapperGBeans(String brokerName) {
+        List<AbstractName> connectorNames = brokerNameConnectorNamesMap.get(brokerName);
         if (connectorNames == null) {
             return;
         }
@@ -126,5 +153,40 @@ public class ActiveMQBrokerServiceMonito
             } catch (Exception e) {
             }
         }
+    }    
+    
+    private Set<BrokerService> getBrokerService(Bundle bundle) {
+        Set<BrokerService> brokerServices = new HashSet<BrokerService>();
+ 
+        try {        
+            String filter;
+            if (bundle == null) {
+                filter = null;
+            } else {
+                String symbolicName = bundle.getSymbolicName();
+                String version = bundle.getVersion().toString();
+                filter = "(&(osgi.blueprint.container.symbolicname=" + symbolicName
+                        + ")(osgi.blueprint.container.version=" + version + "))";
+            }
+            
+            String clazz = "org.osgi.service.blueprint.container.BlueprintContainer";            
+            ServiceReference[] references = bundleContext.getServiceReferences(clazz, filter);
+            if (references != null) {
+                for (ServiceReference reference: references) {
+                    BlueprintContainer container = (BlueprintContainer) bundleContext.getService(reference);
+                    @SuppressWarnings("unchecked")
+                    Set<String> ids = (Set<String>) container.getComponentIds();
+                    for (Object id: ids) {
+                        Object object = container.getComponentInstance((String)id);
+                        if (object instanceof BrokerService) {
+                            brokerServices.add((BrokerService)object);
+                        }
+                    }
+                }
+            }            
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return brokerServices;
     }
 }