[jboss-user] [JBoss Messaging] - Re: programmatically deploy clustered topic

fatbatman do-not-reply at jboss.com
Fri Oct 12 10:41:22 EDT 2007


Hi Tim,

Thanks for the suggestion I might have a play with the farm service in the future. 

If anyone is interested, for now I use something like the following, it seems to do what I need;

public void addTopicMessageListener(String jndiName, MessageListener messageListener) throws NamingException, JMSException, Exception {
  |        
  | 	String topicName = jndiName.substring(jndiName.lastIndexOf('/')+1);
  | 
  |         try{        	
  |         	//CHECK IF THE TOPIC IS DEPLOYED LOCALLY
  |         	Topic topic = (Topic)haInitialContext.lookup(jndiName);    	
  | 	        log("OK Topic " + jndiName+ " exists");
  | 	        
  |                 //I think this will throw an exception if the Topic is on a remote machine
  | 	        MessageConsumer subscriber = localJMSSession.createConsumer(topic);	     
  | 	        subscriber.setMessageListener(messageListener);
  | 	        log("Lstener "+messageListener+" add to topic " + topicName);
  |         }catch(Exception e){
  |         	log("NO TOPIC, OR TOPIC WAS ON A REMOTE ONLY WHEN ADDING MessageListener TO topic "+topicName+". "+e.getMessage());
  | 
  | 		//DEPLOY THE TOPIC ON THIS MACHINE		
  | 		MBeanServerConnection mBeanServer = MBeanServerLocator.locateJBoss(); 	      
  | 		ServerPeerMBean serverPeerMBean = (ServerPeerMBean) MBeanServerInvocationHandler.newProxyInstance(mBeanServer, new ObjectName("jboss.messaging:service=ServerPeer"), ServerPeerMBean.class, false);
  | 		serverPeerMBean.deployTopic(topicName, jndiName); 
  | 
  | 		//MAKE IT CLUSTERED
  | 		ObjectName on = new ObjectName("jboss.messaging.destination:service=Topic,name="+topicName);
  | 		MBeanInfo mbeanInfo = MBeanServerLocator.locateJBoss().getMBeanInfo(on);
  | 		MBeanServerLocator.locateJBoss().invoke(on, "stop", null, null);
  | 		MBeanServerLocator.locateJBoss().setAttribute(on, new Attribute("Clustered", true));
  | 		MBeanServerLocator.locateJBoss().invoke(on, "start", null, null);
  | 
  | 		//TRY TO ADD THE messageListenerAgain
  | 		Topic topic = localJMSSession.createTopic(topicName);
  | 	        MessageConsumer subscriber = localJMSSession.createConsumer(topic);	     
  | 	        subscriber.setMessageListener(messageListener);
  | 	        log("Successfully added listener "+messageListener+" to distributed topic " + topicName);
  |         }
  | 
  | }



cheers

James





View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4094631#4094631

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4094631



More information about the jboss-user mailing list