# Embedded JMS Server Example

This examples shows how to setup and run an embedded JMS server using ActiveMQ Artemis along with ActiveMQ Artemis configuration files.

## Example step-by-step

To run the example, simply type `mvn verify -Pexample` from this directory

1. Create ActiveMQ Artemis core configuration files and make sure they are within your classpath. By default, ActiveMQ expects the configuration file name to be "broker.xml".
2. Create an embedded ActiveMQ Artemis JMS server

                EmbeddedJMS jmsServer = new EmbeddedJMS();

3. Setup security configurations

                SecurityConfiguration securityConfig = new SecurityConfiguration();
                securityConfig.addUser("guest", "guest");
                securityConfig.addRole("guest", "guest");
                securityConfig.setDefaultUser("guest");
                jmsServer.setSecurityManager(new ActiveMQSecurityManagerImpl(securityConfig));

4. Start the embedded ActiveMQ Artemis JMS server

                jmsServer.start()

5. Create JMS resources (connection factory and queue) for the example

                JMSServerManager jmsServerManager = jmsServer.getJMSServerManager();
                List connectors = new ArrayList();
                connectors.add("in-vm");
                jmsServerManager.createConnectionFactory("ConnectionFactory", false, JMSFactoryType.CF, connectors, "ConnectionFactory");
                jmsServerManager.createQueue(false, "exampleQueue", null, false, "queue/exampleQueue");

At this point the JMS server is started and any JMS clients can look up JMS resources from the 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.

6. Lookup JMS resources defined in the configuration

                ConnectionFactory cf = (ConnectionFactory)jmsServer.lookup("ConnectionFactory");
                Queue queue = (Queue)jmsServer.lookup("queue/exampleQueue");

7. Send and receive a message using JMS API

See the Queue Example for detailed steps to send and receive a JMS message

Finally, we stop the JMS server and its associated resources.

8. Close the connection

                if (connection != null)
                {
                   connection.close();
                }

9. Stop the JMS server

                jmsServer.stop();