It seems like I no longer have commit privs on ActiveMQ 3.  Could
someone look into that and in the mean time apply the attached patch
and push a new 3.2.4 SNAPSHOT to the repo?

Thanks,
    Aaron
Index: modules/gbean-g1_1/src/java/org/activemq/gbean/ActiveMQConnectorGBean.java
===================================================================
--- modules/gbean-g1_1/src/java/org/activemq/gbean/ActiveMQConnectorGBean.java	(revision 1112)
+++ modules/gbean-g1_1/src/java/org/activemq/gbean/ActiveMQConnectorGBean.java	(working copy)
@@ -17,24 +17,23 @@
  **/
 package org.activemq.gbean;
 
-import java.net.InetSocketAddress;
-import java.net.URI;
-import java.net.URISyntaxException;
-import javax.jms.JMSException;
-
+import org.activemq.ActiveMQConnectionFactory;
+import org.activemq.broker.BrokerConnector;
+import org.activemq.broker.impl.BrokerConnectorImpl;
+import org.activemq.io.WireFormat;
+import org.activemq.io.impl.DefaultWireFormat;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.gbean.GBeanLifecycle;
 import org.apache.geronimo.gbean.GConstructorInfo;
-import org.apache.geronimo.kernel.Kernel;
-import org.activemq.ActiveMQConnectionFactory;
-import org.activemq.broker.BrokerConnector;
-import org.activemq.broker.impl.BrokerConnectorImpl;
-import org.activemq.io.WireFormat;
-import org.activemq.io.impl.DefaultWireFormat;
 
+import javax.jms.JMSException;
+import java.net.InetSocketAddress;
+import java.net.URI;
+import java.net.URISyntaxException;
+
 /**
  * Default implementation of the ActiveMQ connector
  *
Index: modules/gbean-g1_1/src/java/org/activemq/gbean/ActiveMQContainerGBean.java
===================================================================
--- modules/gbean-g1_1/src/java/org/activemq/gbean/ActiveMQContainerGBean.java	(revision 1112)
+++ modules/gbean-g1_1/src/java/org/activemq/gbean/ActiveMQContainerGBean.java	(working copy)
@@ -42,6 +42,7 @@
     private Log log = LogFactory.getLog(getClass().getName());
 
     private final String brokerName;
+    private final String objectName;
 
     private BrokerContext context = BrokerContext.getInstance();
     private BrokerContainer container;
@@ -56,9 +57,10 @@
         jaasConfiguration = null;
         securityRoles = null;
         persistenceAdapter=null;
+        objectName = null;
     }
 	
-    public ActiveMQContainerGBean(String brokerName, PersistenceAdapter persistenceAdapter,  String jaasConfiguration, Properties securityRoles) {
+    public ActiveMQContainerGBean(String brokerName, PersistenceAdapter persistenceAdapter,  String jaasConfiguration, Properties securityRoles, String objectName) {
 		
         assert brokerName != null;
 		assert persistenceAdapter != null;
@@ -67,12 +69,29 @@
         this.jaasConfiguration=jaasConfiguration;
 		this.persistenceAdapter = persistenceAdapter;
         this.securityRoles = securityRoles;
+        this.objectName = objectName;
     }
 
     public synchronized BrokerContainer getBrokerContainer() {
         return container;
     }
 
+    public String getObjectName() {
+        return objectName;
+    }
+
+    public boolean isStateManageable() {
+        return true;
+    }
+
+    public boolean isStatisticsProvider() {
+        return false; // todo: return true once stats are integrated
+    }
+
+    public boolean isEventProvider() {
+        return true;
+    }
+
     /**
      * @see org.activemq.gbean.ActiveMQContainer#getBrokerAdmin()
      */
@@ -136,8 +155,9 @@
         infoFactory.addReference("persistenceAdapter", PersistenceAdapter.class);
         infoFactory.addAttribute("jaasConfiguration", String.class, true);
         infoFactory.addAttribute("securityRoles", Properties.class, true);
+        infoFactory.addAttribute("objectName", String.class, false);
         infoFactory.addInterface(ActiveMQContainer.class);
-        infoFactory.setConstructor(new String[]{"brokerName", "persistenceAdapter", "jaasConfiguration", "securityRoles"});
+        infoFactory.setConstructor(new String[]{"brokerName", "persistenceAdapter", "jaasConfiguration", "securityRoles", "objectName"});
         GBEAN_INFO = infoFactory.getBeanInfo();
     }
 
Index: modules/gbean-g1_1/src/java/org/activemq/gbean/management/ActiveMQManagerGBean.java
===================================================================
--- modules/gbean-g1_1/src/java/org/activemq/gbean/management/ActiveMQManagerGBean.java	(revision 1112)
+++ modules/gbean-g1_1/src/java/org/activemq/gbean/management/ActiveMQManagerGBean.java	(working copy)
@@ -17,12 +17,6 @@
  **/
 package org.activemq.gbean.management;
 
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
 import org.activemq.gbean.ActiveMQBroker;
 import org.activemq.gbean.ActiveMQConnector;
 import org.activemq.gbean.ActiveMQConnectorGBean;
@@ -42,7 +36,16 @@
 import org.apache.geronimo.kernel.config.ConfigurationUtil;
 import org.apache.geronimo.kernel.config.EditableConfigurationManager;
 import org.apache.geronimo.kernel.config.InvalidConfigException;
+import org.apache.geronimo.kernel.proxy.ProxyManager;
+import org.apache.geronimo.management.geronimo.JMSBroker;
+import org.apache.geronimo.management.geronimo.JMSConnector;
+import org.apache.geronimo.management.geronimo.NetworkConnector;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
 /**
  * Implementation of the ActiveMQ management interface.  These are the ActiveMQ
  * mangement features available at runtime.
@@ -61,10 +64,17 @@
         return "ActiveMQ";
     }
 
-    public AbstractName[] getContainers() {
+    public Object[] getContainers() {
+        ProxyManager proxyManager = kernel.getProxyManager();
         AbstractNameQuery query = new AbstractNameQuery(ActiveMQBroker.class.getName());
         Set names = kernel.listGBeans(query);
-        return (AbstractName[]) names.toArray(new AbstractName[names.size()]);
+        ActiveMQBroker[] results = new ActiveMQBroker[names.size()];
+        int i=0;
+        for (Iterator it = names.iterator(); it.hasNext(); i++) {
+            AbstractName name = (AbstractName) it.next();
+            results[i] = (ActiveMQBroker) proxyManager.createProxy(name, ActiveMQBroker.class.getClassLoader());
+        }
+        return results;
     }
 
     public String[] getSupportedProtocols() {
@@ -72,33 +82,43 @@
         return new String[]{"activeio", "jabber", "multicast", "openwire", "peer", "stomp", "tcp", "udp", "vm",};
     }
 
-    public AbstractName[] getConnectors() {
+    public NetworkConnector[] getConnectors() {
+        ProxyManager proxyManager = kernel.getProxyManager();
         AbstractNameQuery query = new AbstractNameQuery(ActiveMQConnector.class.getName());
         Set names = kernel.listGBeans(query);
-        return (AbstractName[]) names.toArray(new AbstractName[names.size()]);
+        ActiveMQConnector[] results = new ActiveMQConnector[names.size()];
+        int i=0;
+        for (Iterator it = names.iterator(); it.hasNext(); i++) {
+            AbstractName name = (AbstractName) it.next();
+            results[i] = (ActiveMQConnector) proxyManager.createProxy(name, ActiveMQConnector.class.getClassLoader());
+        }
+        return results;
     }
 
-    public AbstractName[] getConnectors(String protocol) {
-        if (protocol == null) {
+    public NetworkConnector[] getConnectors(String protocol) {
+        if(protocol == null) {
             return getConnectors();
         }
+        List result = new ArrayList();
+        ProxyManager proxyManager = kernel.getProxyManager();
         AbstractNameQuery query = new AbstractNameQuery(ActiveMQConnector.class.getName());
         Set names = kernel.listGBeans(query);
-        List result = new ArrayList();
         for (Iterator it = names.iterator(); it.hasNext();) {
             AbstractName name = (AbstractName) it.next();
             try {
                 if (kernel.getAttribute(name, "protocol").equals(protocol)) {
-                    result.add(name);
+                    result.add(proxyManager.createProxy(name, ActiveMQConnector.class.getClassLoader()));
                 }
             } catch (Exception e) {
                 log.error("Unable to check the protocol for a connector", e);
             }
         }
-        return (AbstractName[]) result.toArray(new AbstractName[result.size()]);
+        return (ActiveMQConnector[]) result.toArray(new ActiveMQConnector[names.size()]);
     }
 
-    public AbstractName[] getConnectorsForContainer(AbstractName broker) {
+    public NetworkConnector[] getConnectorsForContainer(Object broker) {
+        AbstractName containerName = kernel.getAbstractNameFor(broker);
+        ProxyManager mgr = kernel.getProxyManager();
         try {
             List results = new ArrayList();
             AbstractNameQuery query = new AbstractNameQuery(ActiveMQConnector.class.getName());
@@ -107,21 +127,22 @@
                 AbstractName name = (AbstractName) it.next(); // a single Jetty connector
                 GBeanData data = kernel.getGBeanData(name);
                 ReferencePatterns refs = data.getReferencePatterns("activeMQContainer");
-                //TODO configid need to verify that the refpattern is resolved
-                if (broker.equals(refs.getAbstractName())) {
-                    results.add(name);
+                if (containerName.equals(refs.getAbstractName())) {
+                    results.add(mgr.createProxy(name, ActiveMQConnector.class.getClassLoader()));
                 }
             }
-            return (AbstractName[]) results.toArray(new AbstractName[results.size()]);
+            return (ActiveMQConnector[]) results.toArray(new ActiveMQConnector[results.size()]);
         } catch (Exception e) {
-            throw new IllegalArgumentException("Unable to look up connectors for Jetty container '" + broker + "': " + e);
+            throw (IllegalArgumentException) new IllegalArgumentException("Unable to look up connectors for ActiveMQ broker '"+containerName).initCause(e);
         }
     }
 
-    public AbstractName[] getConnectorsForContainer(AbstractName broker, String protocol) {
-        if (protocol == null) {
+    public NetworkConnector[] getConnectorsForContainer(Object broker, String protocol) {
+        if(protocol == null) {
             return getConnectorsForContainer(broker);
         }
+        AbstractName containerName = kernel.getAbstractNameFor(broker);
+        ProxyManager mgr = kernel.getProxyManager();
         try {
             List results = new ArrayList();
             AbstractNameQuery query = new AbstractNameQuery(ActiveMQConnector.class.getName());
@@ -130,22 +151,21 @@
                 AbstractName name = (AbstractName) it.next(); // a single Jetty connector
                 GBeanData data = kernel.getGBeanData(name);
                 ReferencePatterns refs = data.getReferencePatterns("activeMQContainer");
-                //TODO configid need to verify that the refpattern is resolved
-                if (broker.equals(refs.getAbstractName())) {
+                if(containerName.equals(refs.getAbstractName())) {
                     try {
                         String testProtocol = (String) kernel.getAttribute(name, "protocol");
-                        if (testProtocol != null && testProtocol.equals(protocol)) {
-                            results.add(name);
+                        if(testProtocol != null && testProtocol.equals(protocol)) {
+                            results.add(mgr.createProxy(name, ActiveMQConnector.class.getClassLoader()));
                         }
                     } catch (Exception e) {
-                        log.error("Unable to look up protocol for connector '" + name + "'", e);
+                        log.error("Unable to look up protocol for connector '"+name+"'",e);
                     }
                     break;
                 }
             }
-            return (AbstractName[]) results.toArray(new AbstractName[results.size()]);
+            return (ActiveMQConnector[]) results.toArray(new ActiveMQConnector[results.size()]);
         } catch (Exception e) {
-            throw (IllegalArgumentException) new IllegalArgumentException("Unable to look up connectors for Jetty container '" + broker + "': ").initCause(e);
+            throw (IllegalArgumentException)new IllegalArgumentException("Unable to look up connectors for ActiveMQ broker '"+containerName +"': ").initCause(e);
         }
     }
 
@@ -154,8 +174,8 @@
      * the connector may well require further customization before being fully
      * functional (e.g. SSL settings for a secure connector).
      */
-    public String addConnector(String broker, String uniqueName, String protocol, String host, int port) {
-        AbstractName brokerName = new AbstractName(URI.create(broker));
+    public JMSConnector addConnector(JMSBroker broker, String uniqueName, String protocol, String host, int port) {
+        AbstractName brokerName = kernel.getAbstractNameFor(broker);
         AbstractName name = kernel.getNaming().createChildName(brokerName, brokerName + "." + protocol + "." + host + (port > -1 ? "." + port : "") + "-" + uniqueName, NameFactory.GERONIMO_SERVICE);
         GBeanData connector = new GBeanData(name, ActiveMQConnectorGBean.GBEAN_INFO);
         //todo: if SSL is supported, need to add more properties or use a different GBean?
@@ -176,7 +196,7 @@
             log.error("Unable to add GBean ", e);
             return null;
         }
-        return name.toString();
+        return (JMSConnector) kernel.getProxyManager().createProxy(name, ActiveMQConnector.class.getClassLoader());
     }
 
     public void removeConnector(AbstractName connectorName) {

Reply via email to