Return-Path: Delivered-To: apmail-geronimo-dev-archive@www.apache.org Received: (qmail 99349 invoked from network); 14 Jun 2006 15:55:32 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 14 Jun 2006 15:55:31 -0000 Received: (qmail 88944 invoked by uid 500); 14 Jun 2006 15:55:28 -0000 Delivered-To: apmail-geronimo-dev-archive@geronimo.apache.org Received: (qmail 88801 invoked by uid 500); 14 Jun 2006 15:55:27 -0000 Mailing-List: contact dev-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 dev@geronimo.apache.org Received: (qmail 88790 invoked by uid 99); 14 Jun 2006 15:55:27 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 14 Jun 2006 08:55:27 -0700 X-ASF-Spam-Status: No, hits=2.8 required=10.0 tests=INFO_TLD,RCVD_IN_BL_SPAMCOP_NET,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: domain of chirino@gmail.com designates 66.249.92.168 as permitted sender) Received: from [66.249.92.168] (HELO ug-out-1314.google.com) (66.249.92.168) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 14 Jun 2006 08:55:25 -0700 Received: by ug-out-1314.google.com with SMTP id m3so390630uge for ; Wed, 14 Jun 2006 08:55:03 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:sender:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references:x-google-sender-auth; b=tc4JwIbtJElRc7WpDR5u4IhjOEE7aivrUCcKqqgl1ZR87gQSd7mi/EicBKFa60M+OqBiubtqPokLzloUGxuyaK3Oaz0FdaFE/XLWZ8TYxjoSrYAyxRRPV4A1yQ3UEKdT2Sl/WsgDPfycCuFKCy7EYzIOmXgVQIz5MIUjGWpw/FQ= Received: by 10.67.101.10 with SMTP id d10mr807932ugm; Wed, 14 Jun 2006 08:55:03 -0700 (PDT) Received: by 10.66.237.18 with HTTP; Wed, 14 Jun 2006 08:55:03 -0700 (PDT) Message-ID: Date: Wed, 14 Jun 2006 11:55:03 -0400 From: "Hiram Chirino" Sender: chirino@gmail.com To: dev@geronimo.apache.org Subject: Re: [RTC] ActiveMQ GBean modules In-Reply-To: <0A2E674B-8350-4BF1-9D10-86AFB1509C5F@yahoo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <0A2E674B-8350-4BF1-9D10-86AFB1509C5F@yahoo.com> X-Google-Sender-Auth: 5d136773056a6f2e X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Hi David, That's a great review and set of issue. Once I commit the patch could you create JIRA for each of those? lol, j/k. Perhaps I should start a new thread on this thought, but I just wanted to comment that we need to be careful about how critical and the level of perfection that we expect from the contributed patches. I would say that if a patch does not regress the project and it moves it forward in the right direction, the patch should be accepted even if it's not perfect. It kind of reminds me of something David B told me once, if the code is perfect and stable, you won't be able to build a community around the project it since it just works. This makes sense to me. If the code is 80% of the way there, then you give an opportunity for folks to join your community by submitting additional patches that help it get to the 100% mark. In short, I guess I would prefer to see a steady stream of small patches that 1 large patch not so often. And so to tie it back to the original thread, I think that patch that I submitted is large enough to start with :) Lets fix the rest of the issues incrementally. Regards, Hiram On 6/13/06, David Jencks wrote: > I think that this gbean adaptation code should be in geronimo rather > than amq. I'm OK with applying it as is but would prefer some issues > to be addressed first or, even better, immediately after the > transfer (assuming it is done with svn mv). > > 1. DataSourceReference should be replaced by the geronimo class that > does the same thing, ConnectionFactorySource. > > 2. I think it would be preferable to get the module/configuration > classloader in the constructor as a magic attribute and use it in > BrokerServiceGBeanImpl.doStart rather than the classloader of > BrokerServiceGBeanImpl. > > 3. Same for TransportConnectorGBeanImpl. > > 4. This is a question, not really an issue, about this code: > + protected TransportConnector createBrokerConnector(String url) > throws Exception { > + return brokerService.getBrokerContainer().addConnector(url); > + } > > To me it seems like this code is combining the functions of factory > object and container. Is this necessary and appropriate? I'd be > more comfortable with > Connector connector = ConnectorFactory.createConnector(url); > brokerService.getBrokerContainer().addConnector(connector); > > I find that the combination style typically creates problems whenever > trying to extend stuff, say by wrapping the connector. What do you > think? > > 5. hardcoding the protocols in ActiveMQManagerGBean seems like a > temporary expedient at best. > > 6. javadoc on public JMSConnector addConnector( ... in the manager > gbean seems wrong... does not appear to return an object name. > > 7. Typo and innaccuracies in the first package.html... this stuff is > only going to work in geronimo, jsr77/88 is not enough. > > 8. I'm not sure exactly what our official policy is but I prefer to > remove "public" from methods in interfaces since it is the only > choice and implied. > > +1 if the above are addressed before or right after commit. I only > insist on (1), the others are more like suggestions. > > thanks > david jencks > > > > > > On Jun 5, 2006, at 4:19 PM, Hiram Chirino wrote: > > > Howdy folks, > > > > Here's a patch that brings in the activemq gbean modules into > > geronimo. It's partly what was in activemq 4.x and integrated into > > geronimo 1.2-dead merged with the changes in the 3.x branch. > > > > It compiles at least and looks like a reasonable start. Once further > > integration work gets done we may need to tweak a little more. here's > > my +1 got get this committed. I guess I just need 3 more. > > > > > > Index: modules/activemq-gbean/project.properties > > =================================================================== > > --- modules/activemq-gbean/project.properties (revision 0) > > +++ modules/activemq-gbean/project.properties (revision 0) > > @@ -0,0 +1,3 @@ > > +# ------------------------------------------------------------------- > > +# Build Properties > > +# ------------------------------------------------------------------- > > > > Property changes on: modules/activemq-gbean/project.properties > > ___________________________________________________________________ > > Name: svn:executable > > + * > > > > Index: modules/activemq-gbean/project.xml > > =================================================================== > > --- modules/activemq-gbean/project.xml (revision 0) > > +++ modules/activemq-gbean/project.xml (revision 0) > > @@ -0,0 +1,104 @@ > > + > > + > > + > > + > > + > > + 3 > > + ../../etc/project.xml > > + > > + Geronimo :: ActiveMQ :: GBeans > > + geronimo-activemq-gbean > > + ActiveMQ Geronimo / GBean support > shortDescription> > > + ActiveMQ GBeans used for integration into Apache > > Geronimo > > + > > + > > + > > + > > + > > + > > + > > + incubator-activemq > > + activemq-core > > + 4.0-SNAPSHOT > > + > > + > > + > > + incubator-activemq > > + activeio-core > > + 3.0-SNAPSHOT > > + > > + > > + > > + geronimo > > + geronimo-activemq-gbean-management > > + ${pom.currentVersion} > > + > > + > > + > > + geronimo > > + geronimo-kernel > > + ${pom.currentVersion} > > + > > + > > + > > + geronimo > > + geronimo-system > > + ${pom.currentVersion} > > + > > + > > + > > + geronimo > > + geronimo-management > > + ${pom.currentVersion} > > + > > + > > + > > + geronimo > > + geronimo-j2ee > > + ${pom.currentVersion} > > + > > + > > + > > + mx4j > > + mx4j > > + ${mx4j_version} > > + > > + > > + > > + commons-logging > > + commons-logging > > + ${commons_logging_version} > > + http://jakarta.apache.org/commons/logging/ > > + > > + > > + > > + > > + > > + > > + > > + ${basedir}/src/main/java > > + ${basedir}/src/main/test > unitTestSourceDirectory> > > + > > + > > + > > + **/*Test.java > > + > > + > > + > > + > > + > > > > Property changes on: modules/activemq-gbean/project.xml > > ___________________________________________________________________ > > Name: svn:executable > > + * > > > > Index: modules/activemq-gbean/src/test/java/org/apache/activemq/ > > gbean/ConnectorTest.java > > =================================================================== > > --- modules/activemq-gbean/src/test/java/org/apache/activemq/gbean/ > > ConnectorTest.java (revision > > 0) > > +++ modules/activemq-gbean/src/test/java/org/apache/activemq/gbean/ > > ConnectorTest.java (revision > > 0) > > @@ -0,0 +1,61 @@ > > +/** > > + * > > + * Copyright 2005-2006 The Apache Software Foundation > > + * > > + * Licensed under the Apache License, Version 2.0 (the "License"); > > + * you may not use this file except in compliance with the License. > > + * You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > software > > + * distributed under the License is distributed on an "AS IS" BASIS, > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express > > or implied. > > + * See the License for the specific language governing > > permissions and > > + * limitations under the License. > > + */ > > +package org.apache.activemq.gbean; > > + > > +import org.apache.activemq.gbean.TransportConnectorGBeanImpl; > > + > > +import junit.framework.TestCase; > > + > > +/** > > + * Tests to ensure that URL parsing and updating doesn't blow up > > + * > > + * @version $Revision: 1.0$ > > + */ > > +public class ConnectorTest extends TestCase { > > + public TransportConnectorGBeanImpl test; > > + > > + protected void setUp() throws Exception { > > + } > > + > > + public void testURLManipulation() { > > + test = new TransportConnectorGBeanImpl(null, "foo", > > "localhost", 1234); > > + assertEquals("foo://localhost:1234", test.getUrl()); > > + assertEquals("foo", test.getProtocol()); > > + assertEquals("localhost", test.getHost()); > > + assertEquals(1234, test.getPort()); > > + test.setHost("0.0.0.0"); > > + assertEquals("foo://0.0.0.0:1234", test.getUrl()); > > + assertEquals("foo", test.getProtocol()); > > + assertEquals("0.0.0.0", test.getHost()); > > + assertEquals(1234, test.getPort()); > > + test.setPort(8765); > > + assertEquals("foo://0.0.0.0:8765", test.getUrl()); > > + assertEquals("foo", test.getProtocol()); > > + assertEquals("0.0.0.0", test.getHost()); > > + assertEquals(8765, test.getPort()); > > + test.setProtocol("bar"); > > + assertEquals("bar://0.0.0.0:8765", test.getUrl()); > > + assertEquals("bar", test.getProtocol()); > > + assertEquals("0.0.0.0", test.getHost()); > > + assertEquals(8765, test.getPort()); > > + test = new TransportConnectorGBeanImpl(null, "vm", > > "localhost", -1); > > + assertEquals("vm://localhost", test.getUrl()); > > + assertEquals("vm", test.getProtocol()); > > + assertEquals("localhost", test.getHost()); > > + assertEquals(-1, test.getPort()); > > + } > > +} > > Index: modules/activemq-gbean/src/main/java/org/apache/activemq/ > > gbean/BrokerServiceGBean.java > > =================================================================== > > --- modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > BrokerServiceGBean.java (revision > > 0) > > +++ modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > BrokerServiceGBean.java (revision > > 0) > > @@ -0,0 +1,34 @@ > > +/** > > + * > > + * Copyright 2005-2006 The Apache Software Foundation > > + * > > + * Licensed under the Apache License, Version 2.0 (the "License"); > > + * you may not use this file except in compliance with the License. > > + * You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > software > > + * distributed under the License is distributed on an "AS IS" BASIS, > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express > > or implied. > > + * See the License for the specific language governing > > permissions and > > + * limitations under the License. > > + */ > > +package org.apache.activemq.gbean; > > + > > +import org.apache.activemq.broker.BrokerService; > > +import org.apache.activemq.gbean.ActiveMQBroker; > > + > > +/** > > + * An interface to the ActiveMQContainerGBean for use by the > > + * ActiveMQConnectorGBean. > > + * > > + * @version $Revision: 1.1.1.1 $ > > + */ > > +public interface BrokerServiceGBean extends ActiveMQBroker { > > + > > + public abstract BrokerService getBrokerContainer(); > > + public String getBrokerName(); > > + > > + > > +} > > \ No newline at end of file > > > > Property changes on: > > modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > BrokerServiceGBean.java > > ___________________________________________________________________ > > Name: svn:executable > > + * > > > > Index: modules/activemq-gbean/src/main/java/org/apache/activemq/ > > gbean/BrokerServiceGBeanImpl.java > > =================================================================== > > --- modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > BrokerServiceGBeanImpl.java (revision > > 0) > > +++ modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > BrokerServiceGBeanImpl.java (revision > > 0) > > @@ -0,0 +1,209 @@ > > +/** > > + * > > + * Copyright 2005-2006 The Apache Software Foundation > > + * > > + * Licensed under the Apache License, Version 2.0 (the "License"); > > + * you may not use this file except in compliance with the License. > > + * You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > software > > + * distributed under the License is distributed on an "AS IS" BASIS, > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express > > or implied. > > + * See the License for the specific language governing > > permissions and > > + * limitations under the License. > > + */ > > +package org.apache.activemq.gbean; > > + > > +import java.net.URI; > > + > > +import javax.sql.DataSource; > > + > > +import org.apache.activemq.broker.BrokerFactory; > > +import org.apache.activemq.broker.BrokerService; > > +import org.apache.activemq.store.DefaultPersistenceAdapterFactory; > > +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.management.geronimo.JMSManager; > > +import org.apache.geronimo.management.geronimo.NetworkConnector; > > +import org.apache.geronimo.system.serverinfo.ServerInfo; > > + > > + > > +/** > > + * Default implementation of the ActiveMQ Message Server > > + * > > + * @version $Revision: 1.1.1.1 $ > > + */ > > +public class BrokerServiceGBeanImpl implements GBeanLifecycle, > > BrokerServiceGBean { > > + > > + private Log log = LogFactory.getLog(getClass().getName()); > > + > > + private String brokerName; > > + private String brokerUri; > > + private BrokerService brokerService; > > + private ServerInfo serverInfo; > > + private String dataDirectory; > > + private DataSourceReference dataSource; > > + > > + private String objectName; > > + private JMSManager manager; > > + > > + public BrokerServiceGBeanImpl() { > > + } > > + > > + public synchronized BrokerService getBrokerContainer() { > > + return brokerService; > > + } > > + > > + public synchronized void doStart() throws Exception { > > + ClassLoader old = Thread.currentThread > > ().getContextClassLoader(); > > + Thread.currentThread().setContextClassLoader > > (BrokerServiceGBeanImpl.class.getClassLoader()); > > + try { > > + if (brokerService == null) { > > + brokerService = createContainer(); > > + } > > + DefaultPersistenceAdapterFactory persistenceFactory = > > (DefaultPersistenceAdapterFactory) > > brokerService.getPersistenceFactory(); > > + > > persistenceFactory.setDataDirectory(serverInfo.resolve > > (dataDirectory)); > > + persistenceFactory.setDataSource((DataSource) > > dataSource.$getResource()); > > + brokerService.start(); > > + } finally { > > + Thread.currentThread().setContextClassLoader(old); > > + } > > + } > > + > > + protected BrokerService createContainer() throws Exception { > > + if( brokerUri!=null ) { > > + BrokerService answer = BrokerFactory.createBroker(new > > URI(brokerUri)); > > + brokerName = answer.getBrokerName(); > > + return answer; > > + } else { > > + BrokerService answer = new BrokerService(); > > + answer.setBrokerName(brokerName); > > + return answer; > > + } > > + } > > + > > + public synchronized void doStop() throws Exception { > > + if (brokerService != null) { > > + BrokerService temp = brokerService; > > + brokerService = null; > > + temp.stop(); > > + } > > + } > > + > > + public synchronized void doFail() { > > + if (brokerService != null) { > > + BrokerService temp = brokerService; > > + brokerService = null; > > + try { > > + temp.stop(); > > + } catch (Exception e) { > > + log.info("Caught while closing due to failure: " + > > e, e); > > + } > > + } > > + } > > + > > + public static final GBeanInfo GBEAN_INFO; > > + > > + static { > > + GBeanInfoBuilder infoFactory = new GBeanInfoBuilder("ActiveMQ > > Message Broker", BrokerServiceGBeanImpl.class, "JMSServer"); > > + infoFactory.addReference("serverInfo", ServerInfo.class); > > + infoFactory.addAttribute("brokerName", String.class, true); > > + infoFactory.addAttribute("brokerUri", String.class, true); > > + infoFactory.addAttribute("dataDirectory", String.class, > > true); > > + infoFactory.addReference("dataSource", > > DataSourceReference.class); > > + infoFactory.addAttribute("objectName", String.class, false); > > + infoFactory.addReference("manager", JMSManager.class); > > + infoFactory.addInterface(BrokerServiceGBean.class); > > + // infoFactory.setConstructor(new String[]{"brokerName, > > brokerUri"}); > > + GBEAN_INFO = infoFactory.getBeanInfo(); > > + } > > + > > + public static GBeanInfo getGBeanInfo() { > > + return GBEAN_INFO; > > + } > > + > > + /** > > + * @return Returns the brokerName. > > + */ > > + public String getBrokerName() { > > + return brokerName; > > + } > > + > > + public String getBrokerUri() { > > + return brokerUri; > > + } > > + > > + public void setBrokerName(String brokerName) { > > + this.brokerName = brokerName; > > + } > > + > > + public void setBrokerUri(String brokerUri) { > > + this.brokerUri = brokerUri; > > + } > > + > > + public ServerInfo getServerInfo() { > > + return serverInfo; > > + } > > + > > + public void setServerInfo(ServerInfo serverInfo) { > > + this.serverInfo = serverInfo; > > + } > > + > > + public String getDataDirectory() { > > + return dataDirectory; > > + } > > + > > + public void setDataDirectory(String dataDir) { > > + this.dataDirectory = dataDir; > > + } > > + > > + public DataSourceReference getDataSource() { > > + return dataSource; > > + } > > + > > + public void setDataSource(DataSourceReference dataSource) { > > + this.dataSource = dataSource; > > + } > > + > > + 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; > > + } > > + > > + public NetworkConnector[] getConnectors() { > > + return manager.getConnectorsForContainer(this); > > + } > > + > > + public NetworkConnector[] getConnectors(String protocol) { > > + return manager.getConnectorsForContainer(this, protocol); > > + } > > + > > + public JMSManager getManager() { > > + return manager; > > + } > > + > > + public void setManager(JMSManager manager) { > > + this.manager = manager; > > + } > > + > > + public void setObjectName(String objectName) { > > + this.objectName = objectName; > > + } > > + > > +} > > \ No newline at end of file > > > > Property changes on: > > modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > BrokerServiceGBeanImpl.java > > ___________________________________________________________________ > > Name: svn:executable > > + * > > > > Index: modules/activemq-gbean/src/main/java/org/apache/activemq/ > > gbean/TransportConnectorGBeanImpl.java > > =================================================================== > > --- modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > TransportConnectorGBeanImpl.java (revision > > 0) > > +++ modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > TransportConnectorGBeanImpl.java (revision > > 0) > > @@ -0,0 +1,168 @@ > > +/** > > + * > > + * Copyright 2005-2006 The Apache Software Foundation > > + * > > + * Licensed under the Apache License, Version 2.0 (the "License"); > > + * you may not use this file except in compliance with the License. > > + * You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > software > > + * distributed under the License is distributed on an "AS IS" BASIS, > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express > > or implied. > > + * See the License for the specific language governing > > permissions and > > + * limitations under the License. > > + */ > > +package org.apache.activemq.gbean; > > + > > +import java.net.InetSocketAddress; > > +import java.net.URI; > > +import java.net.URISyntaxException; > > + > > +import org.apache.activemq.broker.TransportConnector; > > +import org.apache.activemq.gbean.ActiveMQConnector; > > +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; > > + > > +/** > > + * Default implementation of the ActiveMQ connector > > + * > > + * @version $Revision: 1.1.1.1 $ > > + */ > > +public class TransportConnectorGBeanImpl implements GBeanLifecycle, > > ActiveMQConnector { > > + private Log log = LogFactory.getLog(getClass().getName()); > > + > > + private TransportConnector transportConnector; > > + private BrokerServiceGBean brokerService; > > + > > + private String protocol; > > + private String host; > > + private int port; > > + private String path; > > + private String query; > > + private String urlAsStarted; > > + > > + public TransportConnectorGBeanImpl(BrokerServiceGBean > > brokerService, String protocol, String host, int port) { > > + this.brokerService = brokerService; > > + this.protocol = protocol; > > + this.host = host; > > + this.port = port; > > + } > > + > > + public String getProtocol() { > > + return protocol; > > + } > > + > > + public void setProtocol(String protocol) { > > + this.protocol = protocol; > > + } > > + > > + public String getHost() { > > + return host; > > + } > > + > > + public void setHost(String host) { > > + this.host = host; > > + } > > + > > + public int getPort() { > > + return port; > > + } > > + > > + public void setPort(int port) { > > + this.port = port; > > + } > > + > > + public String getPath() { > > + return path; > > + } > > + > > + public void setPath(String path) { > > + this.path = path; > > + } > > + > > + public String getQuery() { > > + return query; > > + } > > + > > + public void setQuery(String query) { > > + this.query = query; > > + } > > + > > + public String getUrl() { > > + try { > > + return new URI(protocol, null, host, port, path, query, > > null).toString(); > > + } catch (URISyntaxException e) { > > + throw new IllegalStateException("Attributes don't form a > > valid URI: "+protocol+"://"+host+":"+port+"/"+path+"?"+query); > > + } > > + } > > + > > + public InetSocketAddress getListenAddress() { > > + try { > > + return transportConnector.getServer().getSocketAddress(); > > + } catch (Throwable e) { > > + log.debug("Failure to determine ListenAddress: "+e,e); > > + return null; > > + } > > + } > > + > > + public synchronized void doStart() throws Exception { > > + ClassLoader old = Thread.currentThread().getContextClassLoader > > (); > > + Thread.currentThread().setContextClassLoader > > (BrokerServiceGBeanImpl.class.getClassLoader()); > > + try { > > + if (transportConnector == null) { > > + urlAsStarted = getUrl(); > > + transportConnector = createBrokerConnector > > (urlAsStarted); > > + transportConnector.start(); > > + } > > + } finally { > > + Thread.currentThread().setContextClassLoader(old); > > + } > > + } > > + > > + public synchronized void doStop() throws Exception { > > + if (transportConnector != null) { > > + TransportConnector temp = transportConnector; > > + transportConnector = null; > > + temp.stop(); > > + } > > + } > > + > > + public synchronized void doFail() { > > + if (transportConnector != null) { > > + TransportConnector temp = transportConnector; > > + transportConnector = null; > > + try { > > + temp.stop(); > > + } > > + catch (Exception e) { > > + log.info("Caught while closing due to failure: " + > > e, e); > > + } > > + } > > + } > > + > > + protected TransportConnector createBrokerConnector(String url) > > throws Exception { > > + return brokerService.getBrokerContainer().addConnector(url); > > + } > > + > > + public static final GBeanInfo GBEAN_INFO; > > + > > + static { > > + GBeanInfoBuilder infoFactory = new GBeanInfoBuilder("ActiveMQ > > Transport Connector", TransportConnectorGBeanImpl.class, > > CONNECTOR_J2EE_TYPE); > > + infoFactory.addAttribute("url", String.class.getName(), > > false); > > + infoFactory.addReference("brokerService", > > BrokerServiceGBean.class); > > + infoFactory.addInterface(ActiveMQConnector.class, new > > String[]{"host","port","protocol","path","query"}, > > + new String[]{"host","port"}); > > + infoFactory.setConstructor(new GConstructorInfo(new > > String[]{"brokerService", "protocol", "host", "port"})); > > + GBEAN_INFO = infoFactory.getBeanInfo(); > > + } > > + > > + public static GBeanInfo getGBeanInfo() { > > + return GBEAN_INFO; > > + } > > +} > > > > Property changes on: > > modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > TransportConnectorGBeanImpl.java > > ___________________________________________________________________ > > Name: svn:executable > > + * > > > > Index: modules/activemq-gbean/src/main/java/org/apache/activemq/ > > gbean/DataSourceReference.java > > =================================================================== > > --- modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > DataSourceReference.java (revision > > 0) > > +++ modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > DataSourceReference.java (revision > > 0) > > @@ -0,0 +1,21 @@ > > +/** > > + * > > + * Copyright 2005-2006 The Apache Software Foundation > > + * > > + * Licensed under the Apache License, Version 2.0 (the "License"); > > + * you may not use this file except in compliance with the License. > > + * You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > software > > + * distributed under the License is distributed on an "AS IS" BASIS, > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express > > or implied. > > + * See the License for the specific language governing > > permissions and > > + * limitations under the License. > > + */ > > +package org.apache.activemq.gbean; > > + > > +public interface DataSourceReference { > > + public Object $getResource(); > > +} > > Index: modules/activemq-gbean/src/main/java/org/apache/activemq/ > > gbean/management/ActiveMQManagerGBean.java > > =================================================================== > > --- modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > management/ActiveMQManagerGBean.java (revision > > 0) > > +++ modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > management/ActiveMQManagerGBean.java (revision > > 0) > > @@ -0,0 +1,266 @@ > > +/** > > + * > > + * Copyright 2005-2006 The Apache Software Foundation > > + * > > + * Licensed under the Apache License, Version 2.0 (the "License"); > > + * you may not use this file except in compliance with the License. > > + * You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > software > > + * distributed under the License is distributed on an "AS IS" BASIS, > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express > > or implied. > > + * See the License for the specific language governing > > permissions and > > + * limitations under the License. > > + */ > > +package org.apache.activemq.gbean.management; > > + > > +import java.util.ArrayList; > > +import java.util.Iterator; > > +import java.util.List; > > +import java.util.Set; > > + > > +import org.apache.activemq.gbean.ActiveMQBroker; > > +import org.apache.activemq.gbean.ActiveMQConnector; > > +import org.apache.activemq.gbean.ActiveMQManager; > > +import org.apache.activemq.gbean.TransportConnectorGBeanImpl; > > +import org.apache.commons.logging.Log; > > +import org.apache.commons.logging.LogFactory; > > +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; > > +import org.apache.geronimo.gbean.ReferencePatterns; > > +import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; > > +import org.apache.geronimo.kernel.GBeanNotFoundException; > > +import org.apache.geronimo.kernel.Kernel; > > +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; > > + > > +/** > > + * Implementation of the ActiveMQ management interface. These are > > the ActiveMQ > > + * management features available at runtime. > > + * > > + * @version $Revision: 1.0$ > > + */ > > +public class ActiveMQManagerGBean implements ActiveMQManager { > > + private static final Log log = > > LogFactory.getLog(ActiveMQManagerGBean.class.getName()); > > + private Kernel kernel; > > + private String objectName; > > + > > + public ActiveMQManagerGBean(Kernel kernel, String objectName) { > > + this.kernel = kernel; > > + this.objectName = objectName; > > + } > > + > > + public String getProductName() { > > + return "ActiveMQ"; > > + } > > + > > + public String getObjectName() { > > + return objectName; > > + } > > + > > + public boolean isEventProvider() { > > + return false; > > + } > > + > > + public boolean isStateManageable() { > > + return true; > > + } > > + > > + public boolean isStatisticsProvider() { > > + return false; > > + } > > + > > + public Object[] getContainers() { > > + ProxyManager proxyManager = kernel.getProxyManager(); > > + AbstractNameQuery query = new > > AbstractNameQuery(ActiveMQBroker.class.getName()); > > + Set names = kernel.listGBeans(query); > > + 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() { > > + // see files in > > modules/core/src/conf/META-INF/services/org/activemq/transport/server/ > > + return new String[]{ "tcp", "stomp", "vm", "peer", "udp", > > "multicast", "failover"}; > > + } > > + > > + public NetworkConnector[] getConnectors() { > > + ProxyManager proxyManager = kernel.getProxyManager(); > > + AbstractNameQuery query = new > > AbstractNameQuery(ActiveMQConnector.class.getName()); > > + Set names = kernel.listGBeans(query); > > + 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 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); > > + for (Iterator it = names.iterator(); it.hasNext();) { > > + AbstractName name = (AbstractName) it.next(); > > + try { > > + if (kernel.getAttribute(name, "protocol").equals > > (protocol)) { > > + result.add(proxyManager.createProxy(name, > > ActiveMQConnector.class.getClassLoader())); > > + } > > + } catch (Exception e) { > > + log.error("Unable to check the protocol for a > > connector", e); > > + } > > + } > > + return (ActiveMQConnector[]) result.toArray(new > > ActiveMQConnector[names.size()]); > > + } > > + > > + 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()); > > + Set set = kernel.listGBeans(query); // all Jetty > > connectors > > + for (Iterator it = set.iterator(); it.hasNext();) { > > + AbstractName name = (AbstractName) it.next(); // a > > single Jetty connector > > + GBeanData data = kernel.getGBeanData(name); > > + ReferencePatterns refs = > > data.getReferencePatterns("activeMQContainer"); > > + if (containerName.equals(refs.getAbstractName())) { > > + results.add(mgr.createProxy(name, > > ActiveMQConnector.class.getClassLoader())); > > + } > > + } > > + return (ActiveMQConnector[]) results.toArray(new > > ActiveMQConnector[results.size()]); > > + } catch (Exception e) { > > + throw (IllegalArgumentException) new > > IllegalArgumentException("Unable to look up connectors for ActiveMQ > > broker '"+containerName).initCause(e); > > + } > > + } > > + > > + 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()); > > + Set set = kernel.listGBeans(query); // all Jetty > > connectors > > + for (Iterator it = set.iterator(); it.hasNext();) { > > + AbstractName name = (AbstractName) it.next(); // a > > single Jetty connector > > + GBeanData data = kernel.getGBeanData(name); > > + ReferencePatterns refs = > > data.getReferencePatterns("activeMQContainer"); > > + if(containerName.equals(refs.getAbstractName())) { > > + try { > > + String testProtocol = (String) > > kernel.getAttribute(name, "protocol"); > > + 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); > > + } > > + break; > > + } > > + } > > + return (ActiveMQConnector[]) results.toArray(new > > ActiveMQConnector[results.size()]); > > + } catch (Exception e) { > > + throw (IllegalArgumentException)new > > IllegalArgumentException("Unable to look up connectors for ActiveMQ > > broker '"+containerName +"': ").initCause(e); > > + } > > + } > > + > > + /** > > + * Creates a new connector, and returns the ObjectName for > > it. Note that > > + * the connector may well require further customization before > > being fully > > + * functional (e.g. SSL settings for a secure connector). > > + */ > > + public JMSConnector addConnector(JMSBroker broker, String > > uniqueName, String protocol, String host, int port) { > > + AbstractName brokerAbstractName = kernel.getAbstractNameFor > > (broker); > > + AbstractName name = > > kernel.getNaming().createChildName(brokerAbstractName, uniqueName, > > NameFactory.GERONIMO_SERVICE); > > + GBeanData connector = new GBeanData(name, > > TransportConnectorGBeanImpl.GBEAN_INFO); > > + //todo: if SSL is supported, need to add more properties or > > use a different GBean? > > + connector.setAttribute("protocol", protocol); > > + connector.setAttribute("host", host); > > + connector.setAttribute("port", new Integer(port)); > > + connector.setReferencePattern("activeMQContainer", > > brokerAbstractName); > > + EditableConfigurationManager mgr = > > ConfigurationUtil.getEditableConfigurationManager(kernel); > > + if(mgr != null) { > > + try { > > + > > mgr.addGBeanToConfiguration(brokerAbstractName.getArtifact(), > > connector, false); > > + return (JMSConnector) > > kernel.getProxyManager().createProxy(name, > > ActiveMQConnector.class.getClassLoader()); > > + } catch (InvalidConfigException e) { > > + log.error("Unable to add GBean", e); > > + return null; > > + } finally { > > + ConfigurationUtil.releaseConfigurationManager > > (kernel, mgr); > > + } > > + } else { > > + log.warn("The ConfigurationManager in the kernel does not > > allow editing"); > > + return null; > > + } > > + } > > + > > + public void removeConnector(AbstractName connectorName) { > > + try { > > + GBeanInfo info = kernel.getGBeanInfo(connectorName); > > + boolean found = false; > > + Set intfs = info.getInterfaces(); > > + for (Iterator it = intfs.iterator(); it.hasNext();) { > > + String intf = (String) it.next(); > > + if (intf.equals(ActiveMQConnector.class.getName())) { > > + found = true; > > + } > > + } > > + if (!found) { > > + throw new GBeanNotFoundException(connectorName); > > + } > > + EditableConfigurationManager mgr = > > ConfigurationUtil.getEditableConfigurationManager(kernel); > > + if (mgr != null) { > > + try { > > + > > mgr.removeGBeanFromConfiguration(connectorName.getArtifact(), > > connectorName); > > + } catch (InvalidConfigException e) { > > + log.error("Unable to add GBean", e); > > + } finally { > > + ConfigurationUtil.releaseConfigurationManager > > (kernel, mgr); > > + } > > + } else { > > + log.warn("The ConfigurationManager in the kernel does > > not allow editing"); > > + } > > + } catch (GBeanNotFoundException e) { > > + log.warn("No such GBean '" + connectorName + "'"); > > //todo: what if we want to remove a failed GBean? > > + } catch (Exception e) { > > + log.error(e); > > + } > > + } > > + > > + public static final GBeanInfo GBEAN_INFO; > > + > > + static { > > + GBeanInfoBuilder infoFactory = new GBeanInfoBuilder("ActiveMQ > > Manager", ActiveMQManagerGBean.class); > > + infoFactory.addAttribute("kernel", Kernel.class, false); > > + infoFactory.addAttribute("objectName", String.class, false); > > + infoFactory.addInterface(ActiveMQManager.class); > > + infoFactory.setConstructor(new String[]{"kernel", > > "objectName"}); > > + GBEAN_INFO = infoFactory.getBeanInfo(); > > + } > > + > > + public static GBeanInfo getGBeanInfo() { > > + return GBEAN_INFO; > > + } > > +} > > Index: modules/activemq-gbean/src/main/java/org/apache/activemq/ > > gbean/package.html > > =================================================================== > > --- modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > package.html (revision > > 0) > > +++ modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > package.html (revision > > 0) > > @@ -0,0 +1,11 @@ > > + > > + > > + > > + > > + > > +

> > + The JMS container using GBeaps for deployment in Geronimo or other > > JSR 77/88 based containers > > +

> > + > > + > > + > > > > Property changes on: > > modules/activemq-gbean/src/main/java/org/apache/activemq/gbean/ > > package.html > > ___________________________________________________________________ > > Name: svn:executable > > + * > > > > Index: modules/activemq-gbean/pom.xml > > =================================================================== > > --- modules/activemq-gbean/pom.xml (revision 0) > > +++ modules/activemq-gbean/pom.xml (revision 0) > > @@ -0,0 +1,83 @@ > > + > > + > > + > > + > + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 > > http://maven.apache.org/maven-v4_0_0.xsd" > > + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > + xmlns="http://maven.apache.org/POM/4.0.0"> > > + > > + 4.0.0 > > + > > + > > + org.apache.geronimo.modules > > + modules-parent > > + 1.2-SNAPSHOT > > + ../pom.xml > > + > > + > > + geronimo-activemq-gbean > > + ${geronimoVersion} > > + ActiveMQ :: GBeans > > + Geronimo ActiveMQ Integration > > + > > + > > + > > + > > + incubator-activemq > > + activemq-core > > + 4.0-SNAPSHOT > > + > > + > > + incubator-activemq > > + activeio-core > > + 3.0-SNAPSHOT > > + > > + > > + > > + org.apache.geronimo.modules > > + geronimo-activemq-gbean-management > > + > > + > > + org.apache.geronimo.modules > > + geronimo-kernel > > + > > + > > + org.apache.geronimo.modules > > + geronimo-system > > + > > + > > + org.apache.geronimo.modules > > + geronimo-management > > + > > + > > + org.apache.geronimo.modules > > + geronimo-j2ee > > + > > + > > + > > + commons-logging > > + commons-logging > > + > > + > > + > > + mx4j > > + mx4j > > + > > + > > + > > + > > + > > Index: modules/activemq-gbean-management/project.properties > > =================================================================== > > --- modules/activemq-gbean-management/project.properties (revision 0) > > +++ modules/activemq-gbean-management/project.properties (revision 0) > > @@ -0,0 +1,3 @@ > > +# ------------------------------------------------------------------- > > +# Build Properties > > +# ------------------------------------------------------------------- > > > > Property changes on: modules/activemq-gbean-management/ > > project.properties > > ___________________________________________________________________ > > Name: svn:executable > > + * > > > > Index: modules/activemq-gbean-management/project.xml > > =================================================================== > > --- modules/activemq-gbean-management/project.xml (revision 0) > > +++ modules/activemq-gbean-management/project.xml (revision 0) > > @@ -0,0 +1,37 @@ > > + > > + > > + > > + 3 > > + ../../etc/project.xml > > + > > + Geronimo :: ActiveMQ :: GBean Interfaces > > + geronimo-activemq-gbean-management > > + Geronimo / GBean management support > shortDescription> > > + ActiveMQ management interfaces used for integration > > into Apache Geronimo > > + > > + > > + > > + > > + > > + > > + > > + geronimo > > + geronimo-management > > + ${pom.currentVersion} > > + > > + > > + > > + > > + > > + > > + ${basedir}/src/main/java > > + ${basedir}/src/main/test > unitTestSourceDirectory> > > + > > + > > + > > + **/*Test.java > > + > > + > > + > > + > > + > > > > Property changes on: modules/activemq-gbean-management/project.xml > > ___________________________________________________________________ > > Name: svn:executable > > + * > > > > Index: modules/activemq-gbean-management/src/main/java/org/apache/ > > activemq/gbean/ActiveMQConnector.java > > =================================================================== > > --- modules/activemq-gbean-management/src/main/java/org/apache/ > > activemq/gbean/ActiveMQConnector.java (revision > > 0) > > +++ modules/activemq-gbean-management/src/main/java/org/apache/ > > activemq/gbean/ActiveMQConnector.java (revision > > 0) > > @@ -0,0 +1,34 @@ > > +/** > > + * > > + * Copyright 2005-2006 The Apache Software Foundation > > + * > > + * Licensed under the Apache License, Version 2.0 (the "License"); > > + * you may not use this file except in compliance with the License. > > + * You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > software > > + * distributed under the License is distributed on an "AS IS" BASIS, > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express > > or implied. > > + * See the License for the specific language governing > > permissions and > > + * limitations under the License. > > + */ > > +package org.apache.activemq.gbean; > > + > > +import org.apache.geronimo.management.geronimo.JMSConnector; > > + > > +/** > > + * The GBean interface for the ActiveMQ network connector GBean > > + * > > + * @version $Revision: 1.0$ > > + */ > > +public interface ActiveMQConnector extends JMSConnector { > > + public final static String CONNECTOR_J2EE_TYPE = "JMSConnector"; > > + > > + // Additional stuff you can add to an ActiveMQ connector URI > > + public String getPath(); > > + public void setPath(String path); > > + public String getQuery(); > > + public void setQuery(String query); > > +} > > Index: modules/activemq-gbean-management/src/main/java/org/apache/ > > activemq/gbean/ActiveMQManager.java > > =================================================================== > > --- modules/activemq-gbean-management/src/main/java/org/apache/ > > activemq/gbean/ActiveMQManager.java (revision > > 0) > > +++ modules/activemq-gbean-management/src/main/java/org/apache/ > > activemq/gbean/ActiveMQManager.java (revision > > 0) > > @@ -0,0 +1,29 @@ > > +/** > > + * > > + * Copyright 2005-2006 The Apache Software Foundation > > + * > > + * Licensed under the Apache License, Version 2.0 (the "License"); > > + * you may not use this file except in compliance with the License. > > + * You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > software > > + * distributed under the License is distributed on an "AS IS" BASIS, > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express > > or implied. > > + * See the License for the specific language governing > > permissions and > > + * limitations under the License. > > + */ > > +package org.apache.activemq.gbean; > > + > > +import org.apache.geronimo.management.J2EEManagedObject; > > +import org.apache.geronimo.management.geronimo.JMSManager; > > + > > +/** > > + * The GBean interface for the ActiveMQ management GBean. This > > defines the > > + * features that should be available to the management interface > > at runtime. > > + * > > + * @version $Revision: 1.0$ > > + */ > > +public interface ActiveMQManager extends JMSManager, > > J2EEManagedObject { > > +} > > Index: modules/activemq-gbean-management/src/main/java/org/apache/ > > activemq/gbean/ActiveMQBroker.java > > =================================================================== > > --- modules/activemq-gbean-management/src/main/java/org/apache/ > > activemq/gbean/ActiveMQBroker.java (revision > > 0) > > +++ modules/activemq-gbean-management/src/main/java/org/apache/ > > activemq/gbean/ActiveMQBroker.java (revision > > 0) > > @@ -0,0 +1,30 @@ > > +/** > > + * > > + * Copyright 2005-2006 The Apache Software Foundation > > + * > > + * Licensed under the Apache License, Version 2.0 (the "License"); > > + * you may not use this file except in compliance with the License. > > + * You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > software > > + * distributed under the License is distributed on an "AS IS" BASIS, > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express > > or implied. > > + * See the License for the specific language governing > > permissions and > > + * limitations under the License. > > + */ > > +package org.apache.activemq.gbean; > > + > > +import org.apache.geronimo.management.geronimo.JMSBroker; > > + > > +/** > > + * The management interface for the ActiveMQ broker GBean. > > + * This is separate from ActiveMQContainer because that interface > > has hard > > + * links to code in activemq-core, yet we still want to be able to > > + * distinguish ActiveMQ brokers from non-ActiveMQ JMS brokers. > > + * > > + * @version $Revision: 1.0$ > > + */ > > +public interface ActiveMQBroker extends JMSBroker { > > +} > > Index: modules/activemq-gbean-management/src/main/java/org/apache/ > > activemq/gbean/package.html > > =================================================================== > > --- modules/activemq-gbean-management/src/main/java/org/apache/ > > activemq/gbean/package.html (revision > > 0) > > +++ modules/activemq-gbean-management/src/main/java/org/apache/ > > activemq/gbean/package.html (revision > > 0) > > @@ -0,0 +1,12 @@ > > + > > + > > + > > + > > + > > +

> > + The management API for ActiveMQ, when run in a > > + container like Geronimo > > +

> > + > > + > > + > > > > Property changes on: > > modules/activemq-gbean-management/src/main/java/org/apache/activemq/ > > gbean/package.html > > ___________________________________________________________________ > > Name: svn:executable > > + * > > > > Index: modules/activemq-gbean-management/pom.xml > > =================================================================== > > --- modules/activemq-gbean-management/pom.xml (revision 0) > > +++ modules/activemq-gbean-management/pom.xml (revision 0) > > @@ -0,0 +1,53 @@ > > + > > + > > + > > + > + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 > > http://maven.apache.org/maven-v4_0_0.xsd" > > + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > + xmlns="http://maven.apache.org/POM/4.0.0"> > > + > > + 4.0.0 > > + > > + > > + org.apache.geronimo.modules > > + modules-parent > > + 1.2-SNAPSHOT > > + ../pom.xml > > + > > + > > + geronimo-activemq-gbean-management > > + ${geronimoVersion} > > + Geronimo :: ActiveMQ :: GBean Interfaces > > + ActiveMQ Management Interfaces used by Geronimo > description> > > + > > + > > + > > + > > + org.apache.geronimo.modules > > + geronimo-management > > + > > + > > + backport-util-concurrent > > + backport-util-concurrent > > + > > + > > + log4j > > + log4j > > + > > + > > + > > + > > > > > > -- > > Regards, > > Hiram > > -- Regards, Hiram