activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jiang <zju_...@163.com>
Subject Re: How to create BrokerService
Date Thu, 17 May 2007 01:53:57 GMT

bsnyder thanks a lot .The example you shown works well.  But I still have a
question: In ActiveMQ , there is a broker.jmx package , in this package
there are a lot of classes such as BrokerView/QueryView and so on. I think
if I use these classes many things will be easiyer. For example
DestinationView class , it has many method to use .But  its constructor has
a ManagedRegionBroker , I don't no how to create one ManagedRegionBroker
object(Its constructor is so  complex , it need BrokerService and so on) . I
do wonder whether I can use these classes to meet the need I mentioned
before(addTopic/removeTopic ...).

public DestinationView(ManagedRegionBroker broker, Destination destination){
        this.broker = broker;
        this.destination=destination;
    }


bsnyder wrote:
> 
> On 5/16/07, Jiang <zju_jjc@163.com> wrote:
>>
>> bsnyder thanks a lot.
>> In fact I just want to admin ActiveMQ from remote admin tools(which
>> written
>> by myself). I want to add/remove destinations on that  MQ server .  From
>> my
>> opinion, I think I should first get a referece of the remote server ,then
>> I
>> can do some operations on the server through that ref ( What I do is not
>> create the broker really , In fact it has been created and run on the
>> server
>> when Activemq server starts.I just use it .Maybe what I think is wrong).
>> So
>> I connect to the broker at first step use the original code BrokerService
>> service = BrokerFactory.createBroker(new URI("xxxxx")); or maybe the code
>> you write for example , then I will use the code below:
>>      ActiveMQDestination[] destinations = service.getDestinations(); 
>> //to
>> get destinations list
>>      BrokerView brview = service.getAdminView();    //get the admin
>> BrokerView
>>      brview.addTopic("Hello");    //add Hello topic to the broker ---
>> Step 1
>>      brview.addTopic("World");  //add World topic to the broker---Step 2
>>      brview.removeTopic("Hello");  //remove Hello topic from the
>> broker---Step3
>>     brview.removeTopic("World");  //remove World topic from the
>> broker---Step 4
>> All the add/remove actions can been seen from the jconsole (after Step1 ,
>> we
>> can seen from jconsole that Hello Topic has been added. after Step2 we
>> can
>> seen World topic has been added. after Step3 Hello topic can been seen
>> removed. after Step4 just as Step3 )
>>
>> bsnyder what I say is right ? (Now the code I wirte above has not been
>> tested for lack of environment. I will test it late )
> 
> OK, I see what you need now. You need to use the methods exposed via
> JMX to achieve this task. I'm attaching a file that is an example of
> exactly this. Let me know if you have any questions.
> 
> Bruce
> -- 
> perl -e 'print
> unpack("u30","D0G)U8V4\@4VYY9&5R\"F)R=6-E+G-N>61E<D\!G;6%I;\"YC;VT*"
> );'
> 
> Apache Geronimo - http://geronimo.apache.org/
> Apache ActiveMQ - http://activemq.org/
> Apache ServiceMix - http://servicemix.org/
> Castor - http://castor.org/
> 
> package com.logicblaze.fuse;
> 
> import java.io.IOException;
> import java.net.MalformedURLException;
> import java.util.HashMap;
> import java.util.Iterator;
> import java.util.Map;
> import java.util.Set;
> import java.util.logging.Level;
> import java.util.logging.Logger;
> 
> import javax.management.AttributeNotFoundException;
> import javax.management.InstanceNotFoundException;
> import javax.management.IntrospectionException;
> import javax.management.MBeanAttributeInfo;
> import javax.management.MBeanException;
> import javax.management.MBeanInfo;
> import javax.management.MBeanServerConnection;
> import javax.management.MalformedObjectNameException;
> import javax.management.ObjectInstance;
> import javax.management.ObjectName;
> import javax.management.Query;
> import javax.management.QueryExp;
> import javax.management.ReflectionException;
> import javax.management.remote.JMXConnector;
> import javax.management.remote.JMXConnectorFactory;
> import javax.management.remote.JMXServiceURL;
> 
> import junit.framework.Test;
> import junit.framework.TestCase;
> import junit.framework.TestSuite;
> 
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
> 
> /**
>  * Programmatic JMX example
>  * 
>  * Instructions for running this code:
>  * <ol type="1">
>  * <li>Start up FUSE</li>
>  * <li>Execute the build for this test using the following command on the
> command line:
>  * <tt>$ mvn install </tt> </li>
>  * </ol>
>  */
> public class AMQJmxExampleTest extends TestCase {
>     private static final Log log =
> LogFactory.getLog(AMQJmxExampleTest.class);
> 
>     public String amqJmxUrl =
> "service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi";
> 
>     /**
>      * Create the test case
>      * 
>      * @param testName name of the test case
>      */
>     public AMQJmxExampleTest(String testName) {
>         super(testName);
>     }
> 
>     /**
>      * @return the suite of tests being tested
>      */
>     public static Test suite() {
>         return new TestSuite(JmxExampleTest.class);
>     }
> 
>     public void testApp() {
>         MBeanServerConnection connection;
>         
>         String clientServiceName =
> "org.apache.activemq:ContainerName=ServiceMix,Type=SystemService,Name=ClientFactory";
>         
>         String topicName = "Boulder.Colorado";
>         
>         try {
>             // Acquire a connection to the MBean server
>             connection = connect();
>             
>             // How many MBeans are running? 
>             count(connection);
>             
>             // Query for a single MBean 
>             query(connection, clientServiceName);
>             
>             // Query all MBeans 
>             query(connection, "");
>             
>             // Check for the topic first 
>             Set mbeans = queryForTopic(connection, topicName);
>             
>             log.info("Located [" + mbeans.size() + "] MBeans");
>             
>             if(mbeans.size() > 0) {
>                 // Create a new topic on the broker
>                 createTopic(connection, topicName);
>             }
>             else {
>                 // Remove the topic from the broker and then create it
>                 removeTopic(connection, topicName);
>                 createTopic(connection, topicName);
>             }
>             
>             mbeans = queryForTopic(connection, topicName);
>             
>             log.info("Located [" + mbeans.size() + "] MBeans");
>             
>         } catch (IOException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         }
>     }
>     
>     public MBeanServerConnection connect() 
>         throws IOException {
>         JMXConnector connector = null;
>         MBeanServerConnection connection = null;
> 
>         String username = "";
> 
>         String password = "";
> 
>         Map env = new HashMap();
>         String[] credentials = new String[] { username, password };
>         env.put(JMXConnector.CREDENTIALS, credentials);
> 
>         try {
>             connector = JMXConnectorFactory.newJMXConnector(new
> JMXServiceURL(amqJmxUrl), env);
>             connector.connect();
>             connection = connector.getMBeanServerConnection();
>         } catch (MalformedURLException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (IOException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         }
>         
>         return connection; 
>     }
>     
>     public void count(MBeanServerConnection conn)
>         throws IOException {
>         int numberOfMBeans = conn.getMBeanCount().intValue();
>         log.info("Number of MBeans currently running: " + numberOfMBeans);
>     }
>     
>     public void query(MBeanServerConnection conn, String query)
>         throws IOException {
>         if (conn != null && query != null) {
>             listMBeans(conn, query);
>         } else if (conn != null && query.equals("")) {
>             listAllMBeanNames(conn);
>         } else {
>             log.fatal("Unable to connect to ServiceMix");
>         }
>     }
>     
>     public void listMBeans(MBeanServerConnection conn, String query) 
>         throws IOException {
>         ObjectName name;
>         Set names = null; 
>         try {
>             name = new ObjectName(query);
>             names = conn.queryMBeans(name, name);
>         } catch (MalformedObjectNameException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (NullPointerException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         }
>         
>         for(Iterator iter = names.iterator(); iter.hasNext(); ) {
>             ObjectInstance obj = (ObjectInstance) iter.next();
>             log.info("+ " + obj.getClassName());
>         }
>     }
>     
>     public void listAllMBeanNames(MBeanServerConnection conn)
>         throws IOException {
>         Set names = getAllMBeanNames(conn);
> 
>         for (Iterator iter = names.iterator(); iter.hasNext();) {
>             ObjectName objName = (ObjectName) iter.next();
>             log.info("+ " + objName);
>         }
>     }
>     
>     public void listMBeanAttrs(MBeanServerConnection conn, String query) 
>         throws IOException {
>         ObjectName objName = null;
>         try {
>             objName = new ObjectName(query);
>             log.info("+ " + objName.getCanonicalName()); 
>             
>             MBeanInfo info = getMBeanInfo(conn, objName); 
>             MBeanAttributeInfo[] attrs = info.getAttributes(); 
>             
>             for(int i = 0; i < attrs.length; ++i) {
>                 Object obj = conn.getAttribute(objName,
> attrs[i].getName());
>                 log.info("  - " + attrs[i].getName() + obj);
>             }
>         } catch (MalformedObjectNameException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (NullPointerException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (AttributeNotFoundException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (InstanceNotFoundException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (MBeanException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (ReflectionException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         }
>     }
>     
>     public void createTopic(MBeanServerConnection conn, String topicName)
>         throws IOException {
>         String brokerNameQuery =
> "org.apache.activemq:BrokerName=localhost,Type=Broker";
>         String addTopicOperationName = "addTopic";
>         Object[] params = { topicName };
>         String[] sig = { "java.lang.String" };
>         
>         doTopicCrud(conn, topicName, brokerNameQuery,
> addTopicOperationName, params, sig, "creat");
>     }
>     
>     private void removeTopic(MBeanServerConnection conn, String topicName) 
>         throws IOException {
>         String brokerNameQuery =
> "org.apache.activemq:BrokerName=localhost,Type=Broker";
>         String removeTopicOperationName = "removeTopic";
>         Object[] params = { topicName };
>         String[] sig = { "java.lang.String" };
>         
>         doTopicCrud(conn, topicName, brokerNameQuery,
> removeTopicOperationName, params, sig, "remov");
>     }
> 
>     private void doTopicCrud(MBeanServerConnection conn, String topicName, 
>             String brokerNameQuery, String operationName, Object[] params,
> String[] sig, String verb) 
>         throws IOException {
>         ObjectName brokerObjName;
>         
>         try {
>                 log.info( verb + "ing new topic: [" + topicName + "]");
>                 brokerObjName = new ObjectName(brokerNameQuery); 
>                 conn.invoke(brokerObjName, operationName, params, sig);
>                 log.info("Topic [" + topicName + "] has been " + verb +
> "ed");
>         } catch (MalformedObjectNameException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (NullPointerException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (InstanceNotFoundException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (MBeanException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (ReflectionException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         }
>     }
>     
>     
> 
>     private void printMBeans(String topicName, Set mbeans) {
>         if (!mbeans.isEmpty()) {
>             for (Iterator iter = mbeans.iterator(); iter.hasNext();) {
>                 ObjectInstance mbean = (ObjectInstance) iter.next();
>                 log.info("+ " + mbean.getClassName());
>             }
>         } 
>         else {
>             log.info("Unable to locate MBean for " + topicName);
>         }
>     }
> 
>     public Set queryForTopic(MBeanServerConnection conn, String topicName) 
>         throws IOException {
>         // Was the topic created?  
>         String topicsQuery =
> "org.apache.activemq:BrokerName=localhost,Type=Topic,*";
>         // listMBeans(conn, topicsQuery);
> 
>         // Use JMX query expressions
>         QueryExp queryExp = Query.eq(Query.attr("name"),
> Query.value(topicName)); 
> 
>         ObjectName objName;
>         Set mbeans = null; 
>         try {
>             objName = new ObjectName(topicsQuery);
>             log.info("Querying for " + topicName);
>             mbeans = conn.queryMBeans(objName, queryExp);       
>         } catch (MalformedObjectNameException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (NullPointerException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         }
>         
>         return mbeans;
>     }
> 
>     public void listAllMBeanAttrs(MBeanServerConnection conn, Set names) 
>         throws IOException {
> 
>         for (Iterator iter = names.iterator(); iter.hasNext();) {
>             ObjectName objName = (ObjectName) iter.next();
>             log.info("+ " + objName);
> 
>             MBeanInfo info = getMBeanInfo(conn, objName);
>             
>             MBeanAttributeInfo[] attrs = info.getAttributes();
> 
>             if (attrs == null)
>                 continue;
> 
>             for (int i = 0; i < attrs.length; ++i) {
>                 try {
>                     Object obj = conn.getAttribute(objName,
> attrs[i].getName());
>                     log.info(" - " + attrs[i].getName() + " = " + obj);
>                 } catch (NullPointerException e) {
>                     // TODO Auto-generated catch block
>                     e.printStackTrace();
>                 } catch (AttributeNotFoundException e) {
>                     // TODO Auto-generated catch block
>                     e.printStackTrace();
>                 } catch (InstanceNotFoundException e) {
>                     // TODO Auto-generated catch block
>                     e.printStackTrace();
>                 } catch (MBeanException e) {
>                     // TODO Auto-generated catch block
>                     e.printStackTrace();
>                 } catch (ReflectionException e) {
>                     // TODO Auto-generated catch block
>                     e.printStackTrace();
>                 }
>             }
>         }
>     }
>     
>     public void query(MBeanServerConnection conn, QueryExp queryExp)
>         throws IOException {
>         log.info("Not yet implemented"); 
>     }
>     
>     // Private
> ----------------------------------------------------------------
> 
>     private MBeanInfo getMBeanInfo(MBeanServerConnection conn, ObjectName
> objName) 
>         throws IOException {
>         MBeanInfo info = null;
>         
>         try {
>             info = conn.getMBeanInfo((ObjectName) objName);
>         } catch (InstanceNotFoundException e1) {
>             // TODO Auto-generated catch block
>             e1.printStackTrace();
>         } catch (IntrospectionException e1) {
>             // TODO Auto-generated catch block
>             e1.printStackTrace();
>         } catch (ReflectionException e1) {
>             // TODO Auto-generated catch block
>             e1.printStackTrace();
>         }
>         
>         return info;
>     }
>     
>     private Set getAllMBeanNames(MBeanServerConnection conn)
>         throws IOException {
>         return conn.queryNames(null, null);
>     }
> }
> 
> 

-- 
View this message in context: http://www.nabble.com/How-to-create-BrokerService-tf3762284s2354.html#a10657563
Sent from the ActiveMQ - Dev mailing list archive at Nabble.com.


Mime
View raw message