[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