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 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user