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) {