http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/management-notifications/readme.html ---------------------------------------------------------------------- diff --git a/examples/jms/management-notifications/readme.html b/examples/jms/management-notifications/readme.html deleted file mode 100644 index 6a76f62..0000000 --- a/examples/jms/management-notifications/readme.html +++ /dev/null @@ -1,215 +0,0 @@ -<!-- -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. ---> - -<html> - <head> - <title>ActiveMQ Artemis Management Notification Example</title> - <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>Management Notification Example</h1> - - <pre>To run the example, simply type <b>mvn verify</b> from this directory, <br>or <b>mvn -PnoServer verify</b> if you want to start and create the server manually.</pre> - - <p>This example shows how to receive management notifications from ActiveMQ Artemis using JMS Messages.</p> - <p>ActiveMQ Artemis servers emit management notifications when events of interest occur (consumers are created or closed, - destinations are created or deleted, security authentication fails, etc.).<br /> - These notifications can be received either by using JMX (see <a href="../jmx/readme.html">JMX example</a>) or by receiving JMS Messages - from a well-known destination.</p> - <p>This example will setup a JMS MessageListener to receive management notifications. We will also perform normal JMS operations to see the kind - of notifications they trigger.</p> - - <h2>Example configuration</h2> - - <p>ActiveMQ Artemis can configured to send JMS messages when management notifications are emitted on the server.</p> - <p>By default, the management name is called <code>activemq.notifications</code> but this can be configured in <a href="server0/broker.xml">broker.xml</a>. - For this example, we will set it to <code>jms.topic.notificationsTopic</code> to be able to receive notifications from a JMS Topic.</p> - <pre class="prettyprint"> - <code><management-notification-address>jms.topic.notificationsTopic</management-notification-address></code> - </pre> - - <p>Since we want to lookup the notifications topic using JNDI, we also declare it in <a href="server0/activemq-jms.xml">activemq-jms.xml</a> - <pre class="prettyprint"> - <code><topic name="notificationsTopic"> - <entry name="/topic/notificationsTopic"/> - </topic></code> - </pre> - <p>The notification queue requires permission to create/delete temporary queues and consume messages. - This is also configured in <a href="server0/broker.xml">broker.xml</a></p> - <pre class="prettyprint"> - <code><!--security for notification topic--> - <security-setting match="jms.topic.notificationsTopic"> - <permission type="consume" roles="guest"/> - <permission type="createNonDurableQueue" roles="guest"/> - <permission type="deleteNonDurableQueue" roles="guest"/> - </security-setting></code> - </pre> - - <h2>Example step-by-step</h2> -x <ol> - <li>First we need to get an initial context so we can look-up the JMS connection factory and destination objects from JNDI. This initial context will get its properties from <a href="server0/client-jndi.properties">client-jndi.properties</a></li> - <pre class="prettyprint"> - <code>InitialContext initialContext = getContext(0);</code> - </pre> - - <li>We look up the JMS queue object from JNDI</li> - <pre class="prettyprint"> - <code>Queue queue = (Queue) initialContext.lookup("/queue/exampleQueue");</code> - </pre> - - <li>We look up the JMS connection factory object from JNDI</li> - <pre class="prettyprint"> - <code>ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("/ConnectionFactory");</code> - </pre> - - <li>We create a JMS connection, a session and a message producer for the example queue</li> - <pre class="prettyprint"> - <code>connection = cf.createConnection(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - MessageProducer producer = session.createProducer(queue);</code> - </pre> - - <li>We look up the JMS Topic used to receive the notifications from JNDI</li> - <pre class="prettyprint"> - <code>Topic notificationsTopic = (Topic) initialContext.lookup("/topic/notificationsTopic");</code> - </pre> - - <li>We create a MessageConsumer for the notification queue and set its MessageListener. When a notification is received, we will simply display all the message properties</li> - <pre class="prettyprint"> - <code>MessageConsumer notificationConsumer = session.createConsumer(notificationsTopic); - notificationConsumer.setMessageListener(new MessageListener() - { - public void onMessage(Message notif) - { - System.out.println("------------------------"); - System.out.println("Received notification:"); - try - { - Enumeration propertyNames = notif.getPropertyNames(); - while (propertyNames.hasMoreElements()) - { - String propertyName = (String)propertyNames.nextElement(); - System.out.format(" %s: %s\n", propertyName, notif.getObjectProperty(propertyName)); - } - } - catch (JMSException e) - { - } - System.out.println("------------------------"); - } - });</code> - </pre> - - <li>We start the connection to receive messages</li> - <pre class="prettyprint"> - <code>connection.start();</code> - </pre> - - <p><em>Now that a message listener is setup to receive management notifications, we will perform regular JMS operations to - see what kind of notifications are triggered</em></p> - - <li>We create a JMS message consumer on the example queue</li> - <pre class="prettyprint"> - <code>MessageConsumer consumer = session.createConsumer(queue);</code> - </pre> - - <p>This will generate a <code>CONSUMER_CREATED</code> notification: - <pre class="prettyprint"> - <code>------------------------ - Received notification: - _AMQ_RoutingName: jms.queue.exampleQueue - _AMQ_Address: jms.queue.exampleQueue - ... - _AMQ_ConsumerCount: 1 - ... - _AMQ_NotifType: CONSUMER_CREATED - ------------------------</code> - </pre> - <p>The notification tells us that a consumer was created for the JMS queue <code>exampleQueue</code>. When the notification - was emitted, this consumer was the only one for the queue</p> - - <li>We close this consumer</li> - <pre class="prettyprint"> - <code>consumer.close();</code> - </pre> - - <p>This will generate a <code>CONSUMER_CLOSED</code> notification: - <pre class="prettyprint"> - <code>------------------------ - Received notification: - _AMQ_RoutingName: jms.queue.exampleQueue - _AMQ_Address: jms.queue.exampleQueue - ... - _AMQ_ConsumerCount: 0 - ... - _AMQ_NotifType: CONSUMER_CLOSED - ------------------------</code> - </pre> - <p>The notification tells us that a consumer was closed for the JMS queue <code>exampleQueue</code>. When the notification - was emitted, there were no other consumers on the queue</p> - - <li>As a last example, we will create a connection with invalid user credentials</li> - <pre class="prettyprint"> - <code>try - { - cf.createConnection("not.a.valid.user", "not.a.valid.password"); - } catch (JMSException e) - { - }</code> - </pre> - - <p>This will generate a <code>SECURITY_AUTHENTICATION_VIOLATION</code> notification: - <pre class="prettyprint"> - <code>------------------------ - Received notification: - _AMQ_User: not.a.valid.user - ... - _AMQ_NotifType: SECURITY_AUTHENTICATION_VIOLATION - ------------------------ - </code> - </pre> - <p>The notification tells us that a user named <code>not.a.valid.user</code> failed to authenticate when creating a connection to ActiveMQ Artemis.</p> - - <li>And finally, <b>always</b> remember to close your JMS connections and resources after use, in a <code>finally</code> block. Closing a JMS connection will automatically close all of its sessions, consumers, producer and browser objects</li> - - <pre class="prettyprint"> - <code>finally - { - if (initialContext != null) - { - initialContext.close(); - } - if (connection != null) - { - connection.close(); - } - }</code> - </pre> - </ol> - - <h2>More information</h2> - - <ul> - <li>User Manual's <a href="../../../docs/user-manual/en/html_single/index.html#management.notifications">Management Notifications chapter</a></li> - </ul> - - </body> -</html>
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/management-notifications/src/main/java/org/apache/activemq/artemis/jms/example/ManagementNotificationExample.java ---------------------------------------------------------------------- diff --git a/examples/jms/management-notifications/src/main/java/org/apache/activemq/artemis/jms/example/ManagementNotificationExample.java b/examples/jms/management-notifications/src/main/java/org/apache/activemq/artemis/jms/example/ManagementNotificationExample.java deleted file mode 100644 index 5fc00cf..0000000 --- a/examples/jms/management-notifications/src/main/java/org/apache/activemq/artemis/jms/example/ManagementNotificationExample.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.activemq.artemis.jms.example; - -import java.util.Enumeration; - -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageListener; -import javax.jms.MessageProducer; -import javax.jms.Queue; -import javax.jms.Session; -import javax.jms.Topic; -import javax.naming.InitialContext; - -/** - * An example that shows how to receive management notifications using JMS messages. - */ -public class ManagementNotificationExample { - - public static void main(final String[] args) throws Exception { - Connection connection = null; - InitialContext initialContext = null; - try { - // Step 1. Create an initial context to perform the JNDI lookup. - initialContext = new InitialContext(); - - // Step 2. Perform a lookup on the queue - Queue queue = (Queue) initialContext.lookup("queue/exampleQueue"); - - // Step 3. Perform a lookup on the Connection Factory - ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("ConnectionFactory"); - - // Step 4.Create a JMS connection, a session and a producer for the queue - connection = cf.createConnection(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - MessageProducer producer = session.createProducer(queue); - - // Step 5. Perform a lookup on the notifications topic - Topic notificationsTopic = (Topic) initialContext.lookup("topic/notificationsTopic"); - - // Step 6. Create a JMS message consumer for the notification queue and set its message listener - // It will display all the properties of the JMS Message - MessageConsumer notificationConsumer = session.createConsumer(notificationsTopic); - notificationConsumer.setMessageListener(new MessageListener() { - public void onMessage(final Message notif) { - System.out.println("------------------------"); - System.out.println("Received notification:"); - try { - Enumeration propertyNames = notif.getPropertyNames(); - while (propertyNames.hasMoreElements()) { - String propertyName = (String) propertyNames.nextElement(); - System.out.format(" %s: %s%n", propertyName, notif.getObjectProperty(propertyName)); - } - } - catch (JMSException e) { - } - System.out.println("------------------------"); - } - }); - - // Step 7. Start the Connection to allow the consumers to receive messages - connection.start(); - - // Step 8. Create a JMS Message Consumer on the queue - MessageConsumer consumer = session.createConsumer(queue); - - // Step 9. Close the consumer - consumer.close(); - - // Step 10. Try to create a connection with unknown user - try { - cf.createConnection("not.a.valid.user", "not.a.valid.password"); - } - catch (JMSException e) { - } - - // sleep a little bit to be sure to receive the notification for the security - // authentication violation before leaving the example - Thread.sleep(2000); - } - finally { - // Step 11. Be sure to close the resources! - if (initialContext != null) { - initialContext.close(); - } - if (connection != null) { - connection.close(); - } - } - } -} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/management-notifications/src/main/resources/activemq/server0/artemis-roles.properties ---------------------------------------------------------------------- diff --git a/examples/jms/management-notifications/src/main/resources/activemq/server0/artemis-roles.properties b/examples/jms/management-notifications/src/main/resources/activemq/server0/artemis-roles.properties deleted file mode 100644 index 4e2d44c..0000000 --- a/examples/jms/management-notifications/src/main/resources/activemq/server0/artemis-roles.properties +++ /dev/null @@ -1,17 +0,0 @@ -## --------------------------------------------------------------------------- -## Licensed to the Apache Software Foundation (ASF) under one or more -## contributor license agreements. See the NOTICE file distributed with -## this work for additional information regarding copyright ownership. -## The ASF licenses this file to You under the Apache License, Version 2.0 -## (the "License"); you may not use this file except in compliance with -## the License. You may obtain a copy of the License at -## -## http://www.apache.org/licenses/LICENSE-2.0 -## -## Unless required by applicable law or agreed to in writing, software -## distributed under the License is distributed on an "AS IS" BASIS, -## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -## See the License for the specific language governing permissions and -## limitations under the License. -## --------------------------------------------------------------------------- -guest=guest \ No newline at end of file http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/management-notifications/src/main/resources/activemq/server0/artemis-users.properties ---------------------------------------------------------------------- diff --git a/examples/jms/management-notifications/src/main/resources/activemq/server0/artemis-users.properties b/examples/jms/management-notifications/src/main/resources/activemq/server0/artemis-users.properties deleted file mode 100644 index 4e2d44c..0000000 --- a/examples/jms/management-notifications/src/main/resources/activemq/server0/artemis-users.properties +++ /dev/null @@ -1,17 +0,0 @@ -## --------------------------------------------------------------------------- -## Licensed to the Apache Software Foundation (ASF) under one or more -## contributor license agreements. See the NOTICE file distributed with -## this work for additional information regarding copyright ownership. -## The ASF licenses this file to You under the Apache License, Version 2.0 -## (the "License"); you may not use this file except in compliance with -## the License. You may obtain a copy of the License at -## -## http://www.apache.org/licenses/LICENSE-2.0 -## -## Unless required by applicable law or agreed to in writing, software -## distributed under the License is distributed on an "AS IS" BASIS, -## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -## See the License for the specific language governing permissions and -## limitations under the License. -## --------------------------------------------------------------------------- -guest=guest \ No newline at end of file http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/management-notifications/src/main/resources/activemq/server0/broker.xml ---------------------------------------------------------------------- diff --git a/examples/jms/management-notifications/src/main/resources/activemq/server0/broker.xml b/examples/jms/management-notifications/src/main/resources/activemq/server0/broker.xml deleted file mode 100644 index 2c97901..0000000 --- a/examples/jms/management-notifications/src/main/resources/activemq/server0/broker.xml +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version='1.0'?> -<!-- -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. ---> - -<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns="urn:activemq" - xsi:schemaLocation="urn:activemq ../../../../src/schema/artemis-server.xsd"> - - <jms xmlns="urn:activemq:jms"> - <!--the queue used by the example--> - <queue name="exampleQueue"/> - - <!--the notifications topic used by the example--> - <topic name="notificationsTopic"/> - </jms> - - <core xmlns="urn:activemq:core"> - - <bindings-directory>${data.dir}/server0/data/messaging/bindings</bindings-directory> - - <journal-directory>${data.dir}/server0/data/messaging/journal</journal-directory> - - <large-messages-directory>${data.dir}/server0/data/messaging/largemessages</large-messages-directory> - - <paging-directory>${data.dir}/server0/data/messaging/paging</paging-directory> - - - <management-notification-address>jms.topic.notificationsTopic</management-notification-address> - - <!-- Netty standard TCP acceptor --> - <acceptors> - <acceptor name="netty">tcp://localhost:61616</acceptor> - </acceptors> - - <!-- Other configs --> - - <security-settings> - <!--security for example queue--> - <security-setting match="jms.queue.exampleQueue"> - <permission type="createDurableQueue" roles="guest"/> - <permission type="deleteDurableQueue" roles="guest"/> - <permission type="createNonDurableQueue" roles="guest"/> - <permission type="deleteNonDurableQueue" roles="guest"/> - <permission type="consume" roles="guest"/> - <permission type="send" roles="guest"/> - </security-setting> - - <!--security for notification queue--> - <security-setting match="jms.topic.notificationsTopic"> - <permission type="consume" roles="guest"/> - <permission type="createNonDurableQueue" roles="guest"/> - <permission type="deleteNonDurableQueue" roles="guest"/> - </security-setting> - - <!-- security settings for JMS temporary queue --> - <security-setting match="queuetempjms.*"> - <permission type="createNonDurableQueue" roles="guest"/> - <permission type="deleteNonDurableQueue" roles="guest"/> - <permission type="consume" roles="guest"/> - <permission type="send" roles="guest"/> - </security-setting> - </security-settings> - - </core> -</configuration> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/management-notifications/src/main/resources/jndi.properties ---------------------------------------------------------------------- diff --git a/examples/jms/management-notifications/src/main/resources/jndi.properties b/examples/jms/management-notifications/src/main/resources/jndi.properties deleted file mode 100644 index 2582245..0000000 --- a/examples/jms/management-notifications/src/main/resources/jndi.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory -connectionFactory.ConnectionFactory=tcp://localhost:61616 -queue.queue/exampleQueue=exampleQueue -topic.topic/notificationsTopic=notificationsTopic http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/management/pom.xml ---------------------------------------------------------------------- diff --git a/examples/jms/management/pom.xml b/examples/jms/management/pom.xml deleted file mode 100644 index b84b8f5..0000000 --- a/examples/jms/management/pom.xml +++ /dev/null @@ -1,118 +0,0 @@ -<?xml version='1.0'?> -<!-- -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. ---> - -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>org.apache.activemq.examples.jms</groupId> - <artifactId>jms-examples</artifactId> - <version>1.0.1-SNAPSHOT</version> - </parent> - - <artifactId>management</artifactId> - <packaging>jar</packaging> - <name>ActiveMQ Artemis JMS Management Example</name> - - <properties> - <activemq.basedir>${project.basedir}/../../..</activemq.basedir> - </properties> - - <dependencies> - <dependency> - <groupId>org.apache.activemq</groupId> - <artifactId>artemis-jms-client</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <profiles> - <profile> - <!-- specify -PnoServer if you don't want to start the server --> - <id>noServer</id> - <properties> - <noServer>true</noServer> - </properties> - </profile> - </profiles> - <build> - <plugins> - <plugin> - <groupId>org.apache.activemq</groupId> - <artifactId>artemis-maven-plugin</artifactId> - <executions> - <execution> - <id>create</id> - <goals> - <goal>create</goal> - </goals> - <configuration> - <ignore>${noServer}</ignore> - </configuration> - </execution> - <execution> - <id>start</id> - <goals> - <goal>cli</goal> - </goals> - <configuration> - <ignore>${noServer}</ignore> - <spawn>true</spawn> - <testURI>tcp://localhost:61616</testURI> - <args> - <param>run</param> - </args> - </configuration> - </execution> - <execution> - <id>runClient</id> - <goals> - <goal>runClient</goal> - </goals> - <configuration> - <clientClass>org.apache.activemq.artemis.jms.example.ManagementExample</clientClass> - </configuration> - </execution> - <execution> - <id>stop</id> - <goals> - <goal>cli</goal> - </goals> - <configuration> - <ignore>${noServer}</ignore> - <args> - <param>stop</param> - </args> - </configuration> - </execution> - </executions> - <dependencies> - <dependency> - <groupId>org.apache.activemq.examples.jms</groupId> - <artifactId>management</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - </plugin> - </plugins> - </build> - -</project> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/management/readme.html ---------------------------------------------------------------------- diff --git a/examples/jms/management/readme.html b/examples/jms/management/readme.html deleted file mode 100644 index 423d41e..0000000 --- a/examples/jms/management/readme.html +++ /dev/null @@ -1,208 +0,0 @@ -<!-- -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. ---> - -<html> - <head> - <title>ActiveMQ Artemis Management Example</title> - <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>Management Example</h1> - <p>This example shows how to manage ActiveMQ Artemis using JMS Messages to invoke management operations on the server.</a></p> - <p>To manage ActiveMQ Artemis using JMX, see the <a href="../jmx/readme.html">JMX</a> example.</p> - - <h2>Example configuration</h2> - - <p>ActiveMQ Artemis can be managed by sending JMS messages with specific properties to its <em>management</em> queue.</p> - </p>By default, the management name is called <code>activemq.management</code> but this can be configured in <a href="server0/broker.xml">broker.xml</a> - <pre class="prettyprint"> - <code><management-address>activemq.management</management-address></code> - </pre> - - <p>The management queue requires a "special" user permission <code>manage</code> to be able to receive management messages. - This is also configured in <a href="server0/broker.xml">broker.xml</a></p> - <pre class="prettyprint"> - <code><security-setting match="activemq.management"> - <permission type="manage" roles="guest" /> - </security-setting></code> - </pre> - - <h2>Example step-by-step</h2> - <p><em>To run the example, simply type <code>mvn verify -Pexample</code> from this directory</em></p> - <ol> - <li>First we need to get an initial context so we can look-up the JMS connection factory and destination objects from JNDI. This initial context will get its properties from <a href="server0/client-jndi.properties">client-jndi.properties</a></li> - <pre class="prettyprint"> - <code>InitialContext initialContext = getContext(0);</code> - </pre> - - <li>We look up the JMS queue object from JNDI</li> - <pre class="prettyprint"> - <code>Queue queue = (Queue) initialContext.lookup("/queue/exampleQueue");</code> - </pre> - - <li>We look up the JMS connection factory object from JNDI</li> - <pre class="prettyprint"> - <code>ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("/ConnectionFactory");</code> - </pre> - - <li>We create a JMS connection</li> - <pre class="prettyprint"> - <code>connection = cf.createConnection();</code> - </pre> - - <li>We create a JMS session. The session is created as non transacted and will auto acknowledge messages.</li> - <pre class="prettyprint"> - <code>Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);</code> - </pre> - - <li>We create a JMS message producer on the session. This will be used to send the messages.</li> - <pre class="prettyprint"> - <code>MessageProducer messageProducer = session.createProducer(topic);</code> - </pre> - - <li>We create a JMS text message that we are going to send.</li> - <pre class="prettyprint"> - <code>TextMessage message = session.createTextMessage("This is a text message");</code> - </pre> - - <li>We send message to the queue</li> - <pre class="prettyprint"> - <code>messageProducer.send(message);</code> - </pre> - - <p><em>Now that we have a message in the queue, we will manage the queue by retrieving the number of messages in the queue - (i.e. 1) and by removing the message which has been sent in step 8.</em></p> - - <li>We create the JMS management queue. This is a <em>special</em> queue which is not looked up from JNDI but instantiated directly</li> - <pre class="prettyprint"> - <code>Queue managementQueue = new ActiveMQQueue("activemq.management", "activemq.management");</code> - </pre> - - <li>We create a <code>QueueRequestor</code> to send messages to the management queue and receive replies (see <a href="../queue-requestor/readme.html">queue-requestor example</a>)</li> - <pre class="prettyprint"> - <code>QueueRequestor requestor = new QueueRequestor(session, managementQueue);</code> - </pre> - - <li>We start the connection to receive replies on the requestor</li> - <pre class="prettyprint"> - <code>connection.start()</code> - </pre> - - <li>We create a JMS message which will be used as a <em>management</em> message</li> - <pre class="prettyprint"> - <code>Message m = session.createMessage();</code> - </pre> - - <li>a <em>management</em> message has well-defined properties that ActiveMQ Artemis server needs to know to perform management operations.<br /> - We use a helper class <code>JMSManagementHelper</code> to fill these properties: - <ul> - <li>The name of the resource to manage <code>jms.queue.exampleQueue</code> - (i.e. <code>jms.queue</code> followed by the name of the queue as defined in <a href="server0/activemq-jms.xml">activemq-jms.xml</a>)</li> - <li>In our case, the name of the attribute to retrieve <code>MessageCount</code></li> - </ul> - </li> - <pre class="prettyprint"> - <code>JMSManagementHelper.putAttribute(m, "jms.queue.exampleQueue", "MessageCount");</code> - </pre> - - <li>We send the <em>management</em> message using the requestor and wait for a reply</li> - <pre class="prettyprint"> - <code>Message reply = requestor.request(m);</code> - </pre> - - <li>We use a helper class <code>JMSManagementHelper</code> to retrieve the result from the reply message: - <pre class="prettyprint"> - <code>int messageCount = (Integer)JMSManagementHelper.getResult(reply); - System.out.println(queue.getQueueName() + " contains " + messageCount + " messages");</code> - </pre> - - <li>We create another JMS message to use as a management message</li> - <pre class="prettyprint"> - <code>m = session.createMessage();</code> - </pre> - - <li>This time, we fill the <em>management</em> message with properties to <em>invoke</em> a management operation on the queue - <ul> - <li>the name of the resource <code>jms.queue.exampleQueue</code></li> - <li>the name of the management operation <code>removeMessage</code></li> - <li>any parameters required to invoke the management operations (in our case, the JMS Message ID of the message sent in step 8)</li> - </ul> - </li> - <pre class="prettyprint"> - <code>JMSManagementHelper.putOperationInvocation(m, "jms.queue.exampleQueue", "removeMessage", message.getJMSMessageID());</code> - </pre> - - <li>Again, we use the requestor to send the management message and wait for a reply</li> - <pre class="prettyprint"> - <code>reply = requestor.request(m);</code> - </pre> - - <li>We use the helper class to check that the operation was successfully invoked on the server</li> - <pre class="prettyprint"> - <code>boolean success = JMSManagementHelper.hasOperationSucceeded(reply); - System.out.println("operation invocation has succeeded: " + success);</code> - </pre> - - <li>We use a helper class <code>JMSManagementHelper</code> to retrieve the result from the reply message: - (in our case, the <code>removeMessage</code> method returns a boolean)</li> - <pre class="prettyprint"> - <code>boolean messageRemoved = (Boolean)JMSManagementHelper.getResult(reply); - System.out.println("message has been removed: " + messageRemoved);</code> - </pre> - - <p><em>We will now consume the message from the queue but there will be none: the message sent at step 8 was removed by the management operation</em></p> - - <li>We create a JMS message consumer on the queue</li> - <pre class="prettyprint"> - <code>MessageConsumer messageConsumer = session.createConsumer(queue);</code> - </pre> - - <li>We try to receive a message from the queue. Since there is none, the call will timeout after 5000ms and messageReceived will be null - </li> - <pre class="prettyprint"> - <code>TextMessage messageReceived = (TextMessage) messageConsumer.receive(5000); - System.out.println("Received message: " + messageReceived);</code> - </pre> - - <li>And finally, <b>always</b> remember to close your JMS connections and resources after use, in a <code>finally</code> block. Closing a JMS connection will automatically close all of its sessions, consumers, producer and browser objects</li> - - <pre class="prettyprint"> - <code>finally - { - if (initialContext != null) - { - initialContext.close(); - } - if (connection != null) - { - connection.close(); - } - }</code> - </pre> - </ol> - - <h2>More information</h2> - - <ul> - <li>User Manual's <a href="../../../docs/user-manual/en/html_single/index.html#management.jms">Using Management Via JMS chapter</a></li> - </ul> - </body> -</html> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/management/src/main/java/org/apache/activemq/artemis/jms/example/ManagementExample.java ---------------------------------------------------------------------- diff --git a/examples/jms/management/src/main/java/org/apache/activemq/artemis/jms/example/ManagementExample.java b/examples/jms/management/src/main/java/org/apache/activemq/artemis/jms/example/ManagementExample.java deleted file mode 100644 index 8c780c3..0000000 --- a/examples/jms/management/src/main/java/org/apache/activemq/artemis/jms/example/ManagementExample.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.activemq.artemis.jms.example; - -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Queue; -import javax.jms.QueueConnection; -import javax.jms.QueueConnectionFactory; -import javax.jms.QueueRequestor; -import javax.jms.QueueSession; -import javax.jms.Session; -import javax.jms.TextMessage; -import javax.naming.InitialContext; - -import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient; -import org.apache.activemq.artemis.api.jms.management.JMSManagementHelper; - -/** - * An example that shows how to manage ActiveMQ Artemis using JMS messages. - */ -public class ManagementExample { - - public static void main(final String[] args) throws Exception { - QueueConnection connection = null; - InitialContext initialContext = null; - try { - // Step 1. Create an initial context to perform the JNDI lookup. - initialContext = new InitialContext(); - - // Step 2. Perfom a lookup on the queue - Queue queue = (Queue) initialContext.lookup("queue/exampleQueue"); - - // Step 3. Perform a lookup on the Connection Factory - QueueConnectionFactory cf = (QueueConnectionFactory) initialContext.lookup("ConnectionFactory"); - - // Step 4.Create a JMS Connection - connection = cf.createQueueConnection(); - - // Step 5. Create a JMS Session - QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); - - // Step 6. Create a JMS Message Producer - MessageProducer producer = session.createProducer(queue); - - // Step 7. Create a Text Message - TextMessage message = session.createTextMessage("This is a text message"); - System.out.println("Sent message: " + message.getText()); - - // Step 8. Send the Message - producer.send(message); - - // Step 9. create the JMS management queue. - // It is a "special" queue and it is not looked up from JNDI but constructed directly - Queue managementQueue = ActiveMQJMSClient.createQueue("activemq.management"); - - // Step 10. Create a QueueRequestor for the management queue (see queue-requestor example) - QueueRequestor requestor = new QueueRequestor(session, managementQueue); - - // Step 11. Start the Connection to allow the queue requestor to receive replies - connection.start(); - - // Step 12. Create a JMS message which is used to send a management message - Message m = session.createMessage(); - - // Step 13. Use a helper class to fill the JMS message with management information: - // * the name of the resource to manage - // * in this case, we want to retrieve the value of the messageCount of the queue - JMSManagementHelper.putAttribute(m, "jms.queue.exampleQueue", "messageCount"); - - // Step 14. Use the requestor to send the request and wait for the reply - Message reply = requestor.request(m); - - // Step 15. Use a helper class to retrieve the operation result - int messageCount = (Integer) JMSManagementHelper.getResult(reply); - System.out.println(queue.getQueueName() + " contains " + messageCount + " messages"); - - // Step 16. Create another JMS message to use as a management message - m = session.createMessage(); - - // Step 17. Use a helper class to fill the JMS message with management information: - // * the object name of the resource to manage (i.e. the queue) - // * in this case, we want to call the "removeMessage" operation with the JMS MessageID - // of the message sent to the queue in step 8. - JMSManagementHelper.putOperationInvocation(m, "jms.queue.exampleQueue", "removeMessage", message.getJMSMessageID()); - - // Step 18 Use the requestor to send the request and wait for the reply - reply = requestor.request(m); - - // Step 19. Use a helper class to check that the operation has succeeded - boolean success = JMSManagementHelper.hasOperationSucceeded(reply); - System.out.println("operation invocation has succeeded: " + success); - - // Step 20. Use a helper class to retrieve the operation result - // in that case, a boolean which is true if the message was removed, false else - boolean messageRemoved = (Boolean) JMSManagementHelper.getResult(reply); - System.out.println("message has been removed: " + messageRemoved); - - // Step 21. Create a JMS Message Consumer on the queue - MessageConsumer messageConsumer = session.createConsumer(queue); - - // Step 22. Trying to receive a message. Since the only message in the queue was removed by a management - // operation, - // there is none to consume. The call will timeout after 5000ms and messageReceived will be null - TextMessage messageReceived = (TextMessage) messageConsumer.receive(5000); - System.out.println("Received message: " + messageReceived); - } - finally { - // Step 23. Be sure to close the resources! - if (initialContext != null) { - initialContext.close(); - } - if (connection != null) { - connection.close(); - } - } - } -} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/management/src/main/resources/activemq/server0/artemis-roles.properties ---------------------------------------------------------------------- diff --git a/examples/jms/management/src/main/resources/activemq/server0/artemis-roles.properties b/examples/jms/management/src/main/resources/activemq/server0/artemis-roles.properties deleted file mode 100644 index 4e2d44c..0000000 --- a/examples/jms/management/src/main/resources/activemq/server0/artemis-roles.properties +++ /dev/null @@ -1,17 +0,0 @@ -## --------------------------------------------------------------------------- -## Licensed to the Apache Software Foundation (ASF) under one or more -## contributor license agreements. See the NOTICE file distributed with -## this work for additional information regarding copyright ownership. -## The ASF licenses this file to You under the Apache License, Version 2.0 -## (the "License"); you may not use this file except in compliance with -## the License. You may obtain a copy of the License at -## -## http://www.apache.org/licenses/LICENSE-2.0 -## -## Unless required by applicable law or agreed to in writing, software -## distributed under the License is distributed on an "AS IS" BASIS, -## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -## See the License for the specific language governing permissions and -## limitations under the License. -## --------------------------------------------------------------------------- -guest=guest \ No newline at end of file http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/management/src/main/resources/activemq/server0/artemis-users.properties ---------------------------------------------------------------------- diff --git a/examples/jms/management/src/main/resources/activemq/server0/artemis-users.properties b/examples/jms/management/src/main/resources/activemq/server0/artemis-users.properties deleted file mode 100644 index 4e2d44c..0000000 --- a/examples/jms/management/src/main/resources/activemq/server0/artemis-users.properties +++ /dev/null @@ -1,17 +0,0 @@ -## --------------------------------------------------------------------------- -## Licensed to the Apache Software Foundation (ASF) under one or more -## contributor license agreements. See the NOTICE file distributed with -## this work for additional information regarding copyright ownership. -## The ASF licenses this file to You under the Apache License, Version 2.0 -## (the "License"); you may not use this file except in compliance with -## the License. You may obtain a copy of the License at -## -## http://www.apache.org/licenses/LICENSE-2.0 -## -## Unless required by applicable law or agreed to in writing, software -## distributed under the License is distributed on an "AS IS" BASIS, -## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -## See the License for the specific language governing permissions and -## limitations under the License. -## --------------------------------------------------------------------------- -guest=guest \ No newline at end of file http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/management/src/main/resources/activemq/server0/broker.xml ---------------------------------------------------------------------- diff --git a/examples/jms/management/src/main/resources/activemq/server0/broker.xml b/examples/jms/management/src/main/resources/activemq/server0/broker.xml deleted file mode 100644 index 36eec30..0000000 --- a/examples/jms/management/src/main/resources/activemq/server0/broker.xml +++ /dev/null @@ -1,76 +0,0 @@ -<?xml version='1.0'?> -<!-- -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. ---> - -<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns="urn:activemq" - xsi:schemaLocation="urn:activemq /schema/artemis-server.xsd"> - - <jms xmlns="urn:activemq:jms"> - <!--the queue used by the example--> - <queue name="exampleQueue"/> - </jms> - - <core xmlns="urn:activemq:core"> - - <bindings-directory>${data.dir}/server0/data/messaging/bindings</bindings-directory> - - <journal-directory>${data.dir}/server0/data/messaging/journal</journal-directory> - - <large-messages-directory>${data.dir}/server0/data/messaging/largemessages</large-messages-directory> - - <paging-directory>${data.dir}/server0/data/messaging/paging</paging-directory> - - - <management-address>jms.queue.activemq.management</management-address> - - <!-- Netty standard TCP acceptor --> - <acceptors> - <acceptor name="netty">tcp://localhost:61616</acceptor> - </acceptors> - - <security-settings> - - <!--security for example queue--> - <security-setting match="jms.queue.exampleQueue"> - <permission type="createDurableQueue" roles="guest"/> - <permission type="deleteDurableQueue" roles="guest"/> - <permission type="createNonDurableQueue" roles="guest"/> - <permission type="deleteNonDurableQueue" roles="guest"/> - <permission type="consume" roles="guest"/> - <permission type="send" roles="guest"/> - </security-setting> - - <!--security for management queue--> - <security-setting match="jms.queue.activemq.management"> - <permission type="manage" roles="guest"/> - </security-setting> - - <!-- security settings for JMS temporary queue --> - <security-setting match="jms.tempqueue.#"> - <permission type="createNonDurableQueue" roles="guest"/> - <permission type="deleteNonDurableQueue" roles="guest"/> - <permission type="consume" roles="guest"/> - <permission type="send" roles="guest"/> - </security-setting> - - </security-settings> - - </core> -</configuration> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/management/src/main/resources/jndi.properties ---------------------------------------------------------------------- diff --git a/examples/jms/management/src/main/resources/jndi.properties b/examples/jms/management/src/main/resources/jndi.properties deleted file mode 100644 index 93537c4..0000000 --- a/examples/jms/management/src/main/resources/jndi.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory -connectionFactory.ConnectionFactory=tcp://localhost:61616 -queue.queue/exampleQueue=exampleQueue http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/message-counters/pom.xml ---------------------------------------------------------------------- diff --git a/examples/jms/message-counters/pom.xml b/examples/jms/message-counters/pom.xml deleted file mode 100644 index a046a37..0000000 --- a/examples/jms/message-counters/pom.xml +++ /dev/null @@ -1,126 +0,0 @@ -<?xml version='1.0'?> -<!-- -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. ---> - -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>org.apache.activemq.examples.jms</groupId> - <artifactId>jms-examples</artifactId> - <version>1.0.1-SNAPSHOT</version> - </parent> - - <artifactId>message-counters</artifactId> - <packaging>jar</packaging> - <name>ActiveMQ Artemis JMS Message Counter Example</name> - - <properties> - <activemq.basedir>${project.basedir}/../../..</activemq.basedir> - </properties> - - <dependencies> - <dependency> - <groupId>org.apache.activemq</groupId> - <artifactId>artemis-server</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.apache.activemq</groupId> - <artifactId>artemis-jms-client</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <profiles> - <profile> - <!-- specify -PnoServer if you don't want to start the server --> - <id>noServer</id> - <properties> - <noServer>true</noServer> - </properties> - </profile> - </profiles> - <build> - <plugins> - <plugin> - <groupId>org.apache.activemq</groupId> - <artifactId>artemis-maven-plugin</artifactId> - <executions> - <execution> - <id>create</id> - <goals> - <goal>create</goal> - </goals> - <configuration> - <ignore>${noServer}</ignore> - <javaOptions>-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=3001 - -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false - </javaOptions> - </configuration> - </execution> - <execution> - <id>start</id> - <goals> - <goal>cli</goal> - </goals> - <configuration> - <ignore>${noServer}</ignore> - <spawn>true</spawn> - <testURI>tcp://localhost:61616</testURI> - <args> - <param>run</param> - </args> - </configuration> - </execution> - <execution> - <id>runClient</id> - <goals> - <goal>runClient</goal> - </goals> - <configuration> - <clientClass>org.apache.activemq.artemis.jms.example.MessageCounterExample</clientClass> - </configuration> - </execution> - <execution> - <id>stop</id> - <goals> - <goal>cli</goal> - </goals> - <configuration> - <ignore>${noServer}</ignore> - <args> - <param>stop</param> - </args> - </configuration> - </execution> - </executions> - <dependencies> - <dependency> - <groupId>org.apache.activemq.examples.jms</groupId> - <artifactId>message-counters</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - </plugin> - </plugins> - </build> - -</project> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/message-counters/readme.html ---------------------------------------------------------------------- diff --git a/examples/jms/message-counters/readme.html b/examples/jms/message-counters/readme.html deleted file mode 100644 index 69cbef3..0000000 --- a/examples/jms/message-counters/readme.html +++ /dev/null @@ -1,197 +0,0 @@ -<!-- -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. ---> - -<html> - <head> - <title>ActiveMQ Artemis Message Counter Example</title> - <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>JMS Message Counter Example</h1> - - <pre>To run the example, simply type <b>mvn verify</b> from this directory, <br>or <b>mvn -PnoServer verify</b> if you want to start and create the server manually.</pre> - - <p>This example shows you how to use message counters to obtain message information for a JMS queue.</p> - <p>The example will show how to configure sampling of message counters.<br /> - We will produce and consume 1 message from a queue. Interleaved with the JMS operation, we will retrieve the queue's message counters - at different times to display the metrics on the queue. - </p> - <h2>Example setup</h2> - <p>Message counter is configured in the server configuration file <a href="server0/broker.xml">broker.xml</a>:</p> - <pre class="prettyprint"> - <code><message-counter-enabled>true</message-counter-enabled> - <message-counter-sample-period>2000</message-counter-sample-period> - <message-counter-max-day-history>2</message-counter-max-day-history></code> - </pre> - <p>By default, Message counter is not enabled (for performance reason). To enable them, set <code>message-counter-enabled</code> to <code>true</code>.<br /> - Queues are sampled every 10 seconds by default. For this example we will reduce it to 2 seconds by setting <code>message-counter-sample-period</code> to <code>2000</code>.<br /> - ActiveMQ Artemis holds in memory the message counters' history for a maximum number of days (10 by default). We can change the number of days the history is kept by setting - the <code>message-counter-max-day-history</code> parameter.</p> - <p>The sample period and the max day history parameters have a small impact on the performance of ActiveMQ Artemis (the resources taken to sample a queue are not available to the system's - normal use). You should set these parameters accordingly to the use and throughput of your messages.</p> - - <h2>Example step-by-step</h2> - <ol> - <li>First we need to get an initial context so we can look-up the JMS connection factory and destination objects from JNDI. This initial context will get it's properties from the <code>client-jndi.properties</code> file in the directory <code>../common/config</code></li> - <pre class="prettyprint"> - <code>InitialContext initialContext = getContext();</code> - </pre> - - <li>We look up the JMS queue object from JNDI</li> - <pre class="prettyprint"> - <code>Queue queue = (Queue) initialContext.lookup("/queue/exampleQueue");</code> - </pre> - - <li>We look up the JMS connection factory object from JNDI</li> - <pre class="prettyprint"> - <code>ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("/ConnectionFactory");</code> - </pre> - - <li>We create a JMS connection, session and producer for the queue</li> - <pre class="prettyprint"> - <code> connection = cf.createQueueConnection(); - QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); - MessageProducer producer = session.createProducer(queue);</code> - </pre> - - <li>We create and send a JMS text message</li> - <pre class="prettyprint"> - <code>TextMessage message = session.createTextMessage("This is a text message"); - producer.send(message); - System.out.println("Sent message: " + message.getText());</code> - </pre> - - <li>We will now sleep a little bit to be sure the queue is sample. Since we have configure the sample period to be 2 seconds, - we will sleep for 3 seconds to be sure that a sample is taken</li> - <pre class="prettyprint"> - <code>System.out.println("Sleep a little bit to have the queue sampled..."); - Thread.sleep(3000);</code> - </pre> - - <p>We now need to retrieve the message counters. They're available from the JMS Queue management resource. In this example, we - will retrieve them using JMX (see the <a href="../jmx/readme.html">JMX example</a> for a more complete description). You can also use JMS message to retrieve them (see the <a href="../management/readme.html">Management example</a> to - learn about managing ActiveMQ Artemis using JMS messages).</p> - - <li>We retrieve the JMX MBean used to manage the JMS queue</li> - <pre class="prettyprint"> - <code>ObjectName on = ObjectNameBuilder.DEFAULT.getJMSQueueObjectName(queue.getQueueName()); - JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(JMX_URL), new HashMap()); - MBeanServerConnection mbsc = connector.getMBeanServerConnection(); - JMSQueueControl queueControl = (JMSQueueControl)MBeanServerInvocationHandler.newProxyInstance(mbsc, - on, - JMSQueueControl.class, - false);</code> - </pre> - - <li>We retrieve the message counter and display them. MessageCounters are retrieved as <code>JSON Strings</code> for portability reason (whether - JMX is used for management or JMS messages). To make it simpler to use them in the code, there is a <code>MessageCounterInfo</code> data structure.</li> - <pre class="prettyprint"> - <code>String counters = queueControl.listMessageCounter(); - MessageCounterInfo messageCounter = MessageCounterInfo.fromJSON(counters);</code>> - </pre> - - <li>We display the message counters</li> - <pre class="prettyprint"> - <code>displayMessageCounter(messageCounter);</code> - </pre> - - <p>The message counter contains a variety of metrics on the queue which is sampled (total messages added to the queue, current depth of the queue, deltas since the last sample, timestamp - of the last message added, timestamp of the last sample, etc.)</p> - <pre class="prettyprint"> - <code> - private void displayMessageCounter(MessageCounterInfo counter) - { - System.out.format("%s (sample updated at %s)\n", counter.getName(), counter.getUdpateTimestamp()); - System.out.format(" %s message(s) added to the queue (since last sample: %s)\n", counter.getCount(), - counter.getCountDelta()); - System.out.format(" %s message(s) in the queue (since last sample: %s)\n", counter.getDepth(), - counter.getDepthDelta()); - System.out.format(" last message added at %s\n\n", counter.getLastAddTimestamp()); - }</code> - </pre> - - <li>We sleep again to have the queue sampled</li> - <pre class="prettyprint"> - <code>System.out.println("Sleep a little bit again..."); - Thread.sleep(3000);</code> - </pre> - - <li>We list the message counters again</li> - <pre class="prettyprint"> - <code>counters = queueControl.listMessageCounter(); - messageCounter = MessageCounterInfo.fromJSON(counters); - displayMessageCounter(messageCounter);</code> - </pre> - - <p>We will now consume a message from the queue before listing a last time the message counters</p> - - <li>We create a consumer for the queue</li> - <pre class="prettyprint"> - <code>MessageConsumer consumer = session.createConsumer(queue);</code> - </pre> - - <li>We start the connection to receive messages on the consumer</li> - <pre class="prettyprint"> - <code>connection.start();</code> - </pre> - - <li>We receive a message from the queue</li> - <pre class="prettyprint"> - <code>TextMessage messageReceived = (TextMessage)consumer.receive(5000); - System.out.format("Received message: %s\n\n", messageReceived.getText());</code> - </pre> - - <li>We sleep one last time to have the queue sampled</li> - <pre class="prettyprint"> - <code>System.out.println("Sleep a little bit one last time..."); - Thread.sleep(3000);</code> - </pre> - - <li>We list the message counters a final time (this time with no message in the queue)</li> - <pre class="prettyprint"> - <code>counters = queueControl.listMessageCounter(); - messageCounter = MessageCounterInfo.fromJSON(counters); - displayMessageCounter(messageCounter);</code> - </pre> - - </p> - <li>And finally, <b>always</b> remember to close your JMS connections and resources after use, in a <code>finally</code> block. Closing a JMS connection will automatically close all of its sessions, consumers, producer and browser objects</li> - - <pre class="prettyprint"> - <code>finally - { - if (initialContext != null) - { - initialContext.close(); - } - if (connection != null) - { - connection.close(); - } - }</code> - </pre> - </ol> - - <li>User Manual's <a href="../../../docs/user-manual/en/html_single/index.html#management.message-counters">Message Counters chapter</a></li> - <li><a href="../../../docs/api/org/jboss/messaging/core/management/MessageCounterInfo.html">MessageCounterInfo</a> is a helper class used - to create a MessageCounterInfo object from the JSON String which represents message counters</li> - </body> -</html> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/message-counters/src/main/java/org/apache/activemq/artemis/jms/example/MessageCounterExample.java ---------------------------------------------------------------------- diff --git a/examples/jms/message-counters/src/main/java/org/apache/activemq/artemis/jms/example/MessageCounterExample.java b/examples/jms/message-counters/src/main/java/org/apache/activemq/artemis/jms/example/MessageCounterExample.java deleted file mode 100644 index 8e6cc26..0000000 --- a/examples/jms/message-counters/src/main/java/org/apache/activemq/artemis/jms/example/MessageCounterExample.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.activemq.artemis.jms.example; - -import java.util.HashMap; - -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Queue; -import javax.jms.QueueConnection; -import javax.jms.QueueConnectionFactory; -import javax.jms.QueueSession; -import javax.jms.Session; -import javax.jms.TextMessage; -import javax.management.MBeanServerConnection; -import javax.management.MBeanServerInvocationHandler; -import javax.management.ObjectName; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.naming.InitialContext; - -import org.apache.activemq.artemis.api.core.management.MessageCounterInfo; -import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder; -import org.apache.activemq.artemis.api.jms.management.JMSQueueControl; - -/** - * An example showing how to use message counters to have information on a queue. - */ -public class MessageCounterExample { - - private static final String JMX_URL = "service:jmx:rmi:///jndi/rmi://localhost:3001/jmxrmi"; - - public static void main(final String[] args) throws Exception { - QueueConnection connection = null; - InitialContext initialContext = null; - try { - // Step 1. Create an initial context to perform the JNDI lookup. - initialContext = new InitialContext(); - - // Step 2. Perfom a lookup on the queue - Queue queue = (Queue) initialContext.lookup("queue/exampleQueue"); - - // Step 3. Perform a lookup on the Connection Factory - QueueConnectionFactory cf = (QueueConnectionFactory) initialContext.lookup("ConnectionFactory"); - - // Step 4.Create a JMS Connection, session and a producer for the queue - connection = cf.createQueueConnection(); - QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); - MessageProducer producer = session.createProducer(queue); - - // Step 5. Create and send a Text Message - TextMessage message = session.createTextMessage("This is a text message"); - producer.send(message); - System.out.println("Sent message: " + message.getText()); - - // Step 6. Sleep a little bit so that the queue is sampled - System.out.println("Sleep a little bit to have the queue sampled..."); - Thread.sleep(3000); - - // Step 7. Use JMX to retrieve the message counters using the JMSQueueControl - ObjectName on = ObjectNameBuilder.DEFAULT.getJMSQueueObjectName(queue.getQueueName()); - JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(JMX_URL), new HashMap<String, Object>()); - MBeanServerConnection mbsc = connector.getMBeanServerConnection(); - JMSQueueControl queueControl = MBeanServerInvocationHandler.newProxyInstance(mbsc, on, JMSQueueControl.class, false); - - // Step 8. List the message counters and convert them to MessageCounterInfo data structure. - String counters = queueControl.listMessageCounter(); - MessageCounterInfo messageCounter = MessageCounterInfo.fromJSON(counters); - - // Step 9. Display the message counter - displayMessageCounter(messageCounter); - - // Step 10. Sleep again to have the queue sampled again - System.out.println("Sleep a little bit again..."); - Thread.sleep(3000); - - // Step 11. List the messages counters again - counters = queueControl.listMessageCounter(); - messageCounter = MessageCounterInfo.fromJSON(counters); - displayMessageCounter(messageCounter); - - // Step 12. Create a JMS consumer on the queue - MessageConsumer consumer = session.createConsumer(queue); - - // Step 13. Start the connection to receive messages on the consumer - connection.start(); - - // Step 14. Receive a JMS message from the queue. It corresponds to the message sent at step #5 - TextMessage messageReceived = (TextMessage) consumer.receive(5000); - System.out.format("Received message: %s%n%n", messageReceived.getText()); - - // Step 15. Sleep on last time to have the queue sampled - System.out.println("Sleep a little bit one last time..."); - Thread.sleep(3000); - - // Step 16. Display one last time the message counter - counters = queueControl.listMessageCounter(); - messageCounter = MessageCounterInfo.fromJSON(counters); - displayMessageCounter(messageCounter); - } - finally { - // Step 17. Be sure to close our JMS resources! - if (initialContext != null) { - initialContext.close(); - } - if (connection != null) { - connection.close(); - } - } - } - - private static void displayMessageCounter(final MessageCounterInfo counter) { - System.out.format("%s (sample updated at %s)%n", counter.getName(), counter.getUdpateTimestamp()); - System.out.format(" %s message(s) added to the queue (since last sample: %s)%n", counter.getCount(), counter.getCountDelta()); - System.out.format(" %s message(s) in the queue (since last sample: %s)%n", counter.getDepth(), counter.getDepthDelta()); - System.out.format(" last message added at %s%n%n", counter.getLastAddTimestamp()); - } - -} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/message-counters/src/main/resources/activemq/server0/artemis-roles.properties ---------------------------------------------------------------------- diff --git a/examples/jms/message-counters/src/main/resources/activemq/server0/artemis-roles.properties b/examples/jms/message-counters/src/main/resources/activemq/server0/artemis-roles.properties deleted file mode 100644 index 4e2d44c..0000000 --- a/examples/jms/message-counters/src/main/resources/activemq/server0/artemis-roles.properties +++ /dev/null @@ -1,17 +0,0 @@ -## --------------------------------------------------------------------------- -## Licensed to the Apache Software Foundation (ASF) under one or more -## contributor license agreements. See the NOTICE file distributed with -## this work for additional information regarding copyright ownership. -## The ASF licenses this file to You under the Apache License, Version 2.0 -## (the "License"); you may not use this file except in compliance with -## the License. You may obtain a copy of the License at -## -## http://www.apache.org/licenses/LICENSE-2.0 -## -## Unless required by applicable law or agreed to in writing, software -## distributed under the License is distributed on an "AS IS" BASIS, -## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -## See the License for the specific language governing permissions and -## limitations under the License. -## --------------------------------------------------------------------------- -guest=guest \ No newline at end of file http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/message-counters/src/main/resources/activemq/server0/artemis-users.properties ---------------------------------------------------------------------- diff --git a/examples/jms/message-counters/src/main/resources/activemq/server0/artemis-users.properties b/examples/jms/message-counters/src/main/resources/activemq/server0/artemis-users.properties deleted file mode 100644 index 4e2d44c..0000000 --- a/examples/jms/message-counters/src/main/resources/activemq/server0/artemis-users.properties +++ /dev/null @@ -1,17 +0,0 @@ -## --------------------------------------------------------------------------- -## Licensed to the Apache Software Foundation (ASF) under one or more -## contributor license agreements. See the NOTICE file distributed with -## this work for additional information regarding copyright ownership. -## The ASF licenses this file to You under the Apache License, Version 2.0 -## (the "License"); you may not use this file except in compliance with -## the License. You may obtain a copy of the License at -## -## http://www.apache.org/licenses/LICENSE-2.0 -## -## Unless required by applicable law or agreed to in writing, software -## distributed under the License is distributed on an "AS IS" BASIS, -## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -## See the License for the specific language governing permissions and -## limitations under the License. -## --------------------------------------------------------------------------- -guest=guest \ No newline at end of file http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/message-counters/src/main/resources/activemq/server0/broker.xml ---------------------------------------------------------------------- diff --git a/examples/jms/message-counters/src/main/resources/activemq/server0/broker.xml b/examples/jms/message-counters/src/main/resources/activemq/server0/broker.xml deleted file mode 100644 index 8d4ed29..0000000 --- a/examples/jms/message-counters/src/main/resources/activemq/server0/broker.xml +++ /dev/null @@ -1,86 +0,0 @@ -<?xml version='1.0'?> -<!-- -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. ---> - -<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns="urn:activemq" - xsi:schemaLocation="urn:activemq ../../../../src/schema/artemis-server.xsd"> - - <jms xmlns="urn:activemq:jms"> - <!--the queue used by the example--> - <queue name="exampleQueue"/> - - <!--the expiry queue where expired messages will be sent--> - <queue name="expiryQueue"/> - </jms> - - <core xmlns="urn:activemq:core"> - - <bindings-directory>${data.dir}/server0/data/messaging/bindings</bindings-directory> - - <journal-directory>${data.dir}/server0/data/messaging/journal</journal-directory> - - <large-messages-directory>${data.dir}/server0/data/messaging/largemessages</large-messages-directory> - - <paging-directory>${data.dir}/server0/data/messaging/paging</paging-directory> - - - <jmx-management-enabled>true</jmx-management-enabled> - <message-counter-enabled>true</message-counter-enabled> - <message-counter-sample-period>2000</message-counter-sample-period> - <message-counter-max-day-history>2</message-counter-max-day-history> - - <!-- Acceptors --> - <acceptors> - <acceptor name="netty-acceptor">tcp://localhost:61616</acceptor> - </acceptors> - - <!-- Other config --> - - <security-settings> - <!--security for example queue--> - <security-setting match="jms.queue.exampleQueue"> - <permission type="createDurableQueue" roles="guest"/> - <permission type="deleteDurableQueue" roles="guest"/> - <permission type="createNonDurableQueue" roles="guest"/> - <permission type="deleteNonDurableQueue" roles="guest"/> - <permission type="consume" roles="guest"/> - <permission type="send" roles="guest"/> - </security-setting> - - <!--security for dead letter queue--> - <security-setting match="jms.queue.expiryQueue"> - <permission type="createDurableQueue" roles="guest"/> - <permission type="deleteDurableQueue" roles="guest"/> - <permission type="createNonDurableQueue" roles="guest"/> - <permission type="deleteNonDurableQueue" roles="guest"/> - <permission type="consume" roles="guest"/> - <permission type="send" roles="guest"/> - </security-setting> - </security-settings> - - <address-settings> - <!--override the expiry address for the example--> - <address-setting match="jms.queue.exampleQueue"> - <expiry-address>jms.queue.expiryQueue</expiry-address> - </address-setting> - </address-settings> - - </core> -</configuration> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/21bf4406/examples/jms/message-counters/src/main/resources/jndi.properties ---------------------------------------------------------------------- diff --git a/examples/jms/message-counters/src/main/resources/jndi.properties b/examples/jms/message-counters/src/main/resources/jndi.properties deleted file mode 100644 index 231fa30..0000000 --- a/examples/jms/message-counters/src/main/resources/jndi.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory -connectionFactory.ConnectionFactory=tcp://localhost:61616 -queue.queue/exampleQueue=exampleQueue -queue.queue/expiryQueue=expiryQueue
