2014-10-31 06:20:28 -04:00
< html >
< head >
2014-11-19 03:44:57 -05:00
< title > ActiveMQ Embedded JMS Server Example< / title >
2014-10-31 06:20:28 -04:00
< link rel = "stylesheet" type = "text/css" href = "../common/common.css" / >
< link rel = "stylesheet" type = "text/css" href = "../common/prettify.css" / >
< script type = "text/javascript" src = "../common/prettify.js" > < / script >
< / head >
< body onload = "prettyPrint()" >
< h1 > Embedded JMS Server Example< / h1 >
2014-11-19 03:44:57 -05:00
< p > This examples shows how to setup and run an embedded JMS server using ActiveMQ.< / p >
< p > ActiveMQ was designed using POJOs (Plain Old Java Objects) which means embedding ActiveMQ in your own application
2014-10-31 06:20:28 -04:00
is as simple as instantiating a few objects.< / p >
< p > This example does not use any configuration files. The server is configured using POJOs and can be easily ported to any dependency injection framework.< br / >
We will setup and run a full-fledged JMS server which binds its JMS resources to JNDI and can be accessed by remote clients.< / p >
< h2 > Example step-by-step< / h2 >
< p > < i > To run the example, simply type < code > mvn verify< / code > from this directory< / i > < / p >
< ol >
2014-11-19 03:44:57 -05:00
< li > Create ActiveMQ core configuration, and set the properties accordingly< / li >
2014-10-31 06:20:28 -04:00
< pre class = "prettyprint" >
< code > Configuration configuration = new ConfigurationImpl();
configuration.setPersistenceEnabled(false);
configuration.setSecurityEnabled(false);
configuration.getAcceptorConfigurations().add(new TransportConfiguration(NettyAcceptorFactory.class.getName()));< / code >
Configuration configuration = new ConfigurationImpl();< / pre >
2014-11-19 03:44:57 -05:00
< li > Create the ActiveMQ core server< / li >
2014-10-31 06:20:28 -04:00
< pre class = "prettyprint" >
2014-11-20 05:08:43 -05:00
< code > ActiveMQServer activemqServer = ActiveMQ.newActiveMQServer(configuration);< / code >
2014-10-31 06:20:28 -04:00
< / pre >
< li > Create and start the JNDI server (using JBoss JNDI implementation)< / li >
< pre class = "prettyprint" >
< code > System.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
NamingBeanImpl naming = new NamingBeanImpl();
naming.start();
Main jndiServer = new Main();
jndiServer.setNamingInfo(naming);
jndiServer.setPort(1099);
jndiServer.setBindAddress("localhost");
jndiServer.setRmiPort(1098);
jndiServer.setRmiBindAddress("localhost");
jndiServer.start();< / code >
< / pre >
< li > Create the JMS configuration< / li >
< pre class = "prettyprint" >
< code > JMSConfiguration jmsConfig = new JMSConfigurationImpl();< / code >
< / pre >
< li > Configure context used to bind the JMS resources to JNDI< / li >
< pre class = "prettyprint" >
< code > Hashtable< String, String> env = new Hashtable< String, String>();
env.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
env.put("java.naming.provider.url", "jnp://localhost:1099");
env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
Context context = new InitialContext(env);
jmsConfig.setContext(context);< / code >
< / pre >
< li > Configure the JMS ConnectionFactory< / li >
< pre class = "prettyprint" >
< code > TransportConfiguration connectorConfig = new TransportConfiguration(NettyConnectorFactory.class.getName());
ConnectionFactoryConfiguration cfConfig = new ConnectionFactoryConfigurationImpl("cf", connectorConfig, "/cf");
jmsConfig.getConnectionFactoryConfigurations().add(cfConfig);< / code >
< / pre >
< li > Configure the JMS Queue< / li >
< pre class = "prettyprint" >
< code > QueueConfiguration queueConfig = new QueueConfigurationImpl("queue1", null, false, "/queue/queue1");
jmsConfig.getQueueConfigurations().add(queueConfig);< / code >
< / pre >
2014-11-19 03:44:57 -05:00
< li > Start the JMS Server using the ActiveMQ core server and the JMS configuration< / li >
2014-10-31 06:20:28 -04:00
< pre class = "prettyprint" >
2014-11-20 05:08:43 -05:00
< code > JMSServerManager jmsServer = new JMSServerManagerImpl(activemqServer, jmsConfig);
2014-10-31 06:20:28 -04:00
jmsServer.start();< / code >
< / pre >
< p > At this point the JMS server is started and any JMS clients can look up JMS resources from JNDI to send/receive
messages from the server. To keep the example simple, we will send and receive a JMS message from the same JVM
used to run the JMS server.< / p >
< li > Lookup JMS resources defined in the configuration < / li >
< pre class = "prettyprint" >
< code > ConnectionFactory cf = (ConnectionFactory)context.lookup("/cf");
Queue queue = (Queue)context.lookup("/queue/queue1");< / code >
< / pre >
< li > Send and receive a message using JMS API< / li >
< p > See the < a href = "../../queue/readme.html" > Queue Example< / a > for detailed steps to send and receive a JMS message< / p >
< p > Finally, we stop the JMS server and its associated resources.< / p >
< li > Stop the JMS server< / li >
< pre class = "prettyprint" >
< code > jmsServer.stop();< / code >
< / pre >
< li > Stop the JNDI server< / li >
< pre class = "prettyprint" >
< code > naming.stop();
jndiServer.stop();< / code >
< / pre >
< / ol >
< / body >
< / html >