[jboss-user] [JBoss Messaging] - Re: Embedded server - how to create JMS Topic?

Leos.Bitto do-not-reply at jboss.com
Mon Jul 13 06:26:03 EDT 2009


Because I have started this thread about embedding the JBoss Messaging server, here is my solution for everybody who would need it:


  | import java.util.HashMap;
  | import java.util.HashSet;
  | import java.util.Map;
  | import java.util.Set;
  | import org.jboss.messaging.core.config.Configuration;
  | import org.jboss.messaging.core.config.TransportConfiguration;
  | import org.jboss.messaging.core.config.impl.ConfigurationImpl;
  | import org.jboss.messaging.core.remoting.impl.invm.InVMAcceptorFactory;
  | import org.jboss.messaging.core.remoting.impl.invm.TransportConstants;
  | import org.jboss.messaging.core.server.Messaging;
  | import org.jboss.messaging.core.server.MessagingServer;
  | import org.jboss.messaging.jms.JBossQueue;
  | import org.jboss.messaging.jms.JBossTopic;
  | import org.jboss.messaging.utils.SimpleString;
  | 
  | public class EmbeddedServer {
  | 
  |     private final MessagingServer server;
  | 
  |     public EmbeddedServer() {
  |         final Set<TransportConfiguration> transports = new HashSet<TransportConfiguration>();
  |         transports.add(new TransportConfiguration(InVMAcceptorFactory.class.getName()));
  |         server = createMessagingServer(transports);
  |     }
  | 
  |     public EmbeddedServer(int serverID) {
  |         final Map<String,Object> params = new HashMap<String,Object>();
  |         params.put(TransportConstants.SERVER_ID_PROP_NAME, serverID);
  |         final Set<TransportConfiguration> transports = new HashSet<TransportConfiguration>();
  |         transports.add(new TransportConfiguration(InVMAcceptorFactory.class.getName(), params));
  |         server = createMessagingServer(transports);
  |     }
  | 
  |     public static MessagingServer createMessagingServer(Set<TransportConfiguration> transports) {
  |         final Configuration configuration = new ConfigurationImpl();
  |         configuration.setPersistenceEnabled(false);
  |         configuration.setSecurityEnabled(false);
  |         configuration.setAcceptorConfigurations(transports);
  |         return Messaging.newMessagingServer(configuration);
  |     }
  | 
  |     public void start() throws Exception {
  |         server.start();
  |     }
  | 
  |     public void stop() throws Exception {
  |         server.stop();
  |     }
  | 
  |     public JBossQueue createQueue(String name, boolean temporary) throws Exception {
  |         final SimpleString q = JBossQueue.createAddressFromName(name);
  |         server.createQueue(q, q, null, false, temporary);
  |         return new JBossQueue(name);
  |     }
  | 
  |     public JBossQueue createQueue(String name) throws Exception {
  |         return createQueue(name, false);
  |     }
  | 
  |     public JBossQueue createTemporaryQueue(String name) throws Exception {
  |         return createQueue(name, true);
  |     }
  | 
  |     public JBossTopic createTopic(String name, boolean temporary) throws Exception {
  |         final SimpleString t = JBossTopic.createAddressFromName(name);
  |         server.createQueue(t, t, new SimpleString("__JBMX=-1"), false, temporary);
  |         return new JBossTopic(name);
  |     }
  | 
  |     public JBossTopic createTopic(String name) throws Exception {
  |         return createTopic(name, false);
  |     }
  | 
  |     public JBossTopic createTemporaryTopic(String name) throws Exception {
  |         return createTopic(name, true);
  |     }
  | }
  | 

You need javax.jms.(XA)ConnectionFactory, too:


  | import java.util.HashMap;
  | import java.util.Map;
  | import org.jboss.messaging.core.config.TransportConfiguration;
  | import org.jboss.messaging.core.remoting.impl.invm.InVMConnectorFactory;
  | import org.jboss.messaging.core.remoting.impl.invm.TransportConstants;
  | import org.jboss.messaging.jms.client.JBossConnectionFactory;
  | 
  | public class InVMConnector {
  | 
  |     public static final String DEFAULT_NAME = InVMConnectorFactory.class.getName();
  | 
  |     public static JBossConnectionFactory createJBossConnectionFactory() {
  |         return createJBossConnectionFactory(DEFAULT_NAME);
  |     }
  | 
  |     public static JBossConnectionFactory createJBossConnectionFactory(String className) {
  |         final TransportConfiguration transportConfiguration =
  |                 new TransportConfiguration(className);
  |         return new JBossConnectionFactory(transportConfiguration);
  |     }
  | 
  |     public static JBossConnectionFactory createJBossConnectionFactory(int serverID) {
  |         return createJBossConnectionFactory(serverID, DEFAULT_NAME);
  |     }
  | 
  |     public static JBossConnectionFactory createJBossConnectionFactory(int serverID, String className) {
  |         final Map<String,Object> connectionParams = new HashMap<String,Object>();
  |         connectionParams.put(TransportConstants.SERVER_ID_PROP_NAME, serverID);
  |         final TransportConfiguration transportConfiguration =
  |                 new TransportConfiguration(className, connectionParams);
  |         return new JBossConnectionFactory(transportConfiguration);
  |     }
  | 
  | }
  | 

These two classes are designed to be used with the ApplicationContext from Spring Framework, here is a sample configuration:


  |     <bean id="JBMServer" class="EmbeddedServer" init-method="start" destroy-method="stop" />
  | 
  |     <bean id="JBMInVMConnectionFactory" class="InVMConnector" factory-method="createJBossConnectionFactory" depends-on="JBMServer" />
  | 
  |     <bean id="JBMtestQueue" factory-bean="JBMServer" factory-method="createQueue">
  |         <constructor-arg value="testQueue" />
  |     </bean>
  | 
  |     <bean id="JBMtestTopic" factory-bean="JBMServer" factory-method="createTopic">
  |         <constructor-arg value="testTopic" />
  |     </bean>
  | 

This solution is obviously useful only when the message persistence is not needed. If the persistence is needed, running an embedded server seems to be inappropriate - run a standalone server in that case instead.

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

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



More information about the jboss-user mailing list