You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2015/09/26 00:10:04 UTC

[2/4] activemq-artemis git commit: Add stom-embedded-interceptor example

Add stom-embedded-interceptor example


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/26e191a0
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/26e191a0
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/26e191a0

Branch: refs/heads/master
Commit: 26e191a07d3b784078b9bb38e8797786ced81d09
Parents: fe16ffe
Author: Julian Scheid <ju...@gmail.com>
Authored: Fri Sep 25 17:53:20 2015 +0200
Committer: Clebert Suconic <cl...@apache.org>
Committed: Fri Sep 25 14:56:26 2015 -0400

----------------------------------------------------------------------
 .../stomp/stomp-embedded-interceptor/pom.xml    |  92 ++++++++++++++
 .../stomp-embedded-interceptor/readme.html      |  37 ++++++
 .../StompEmbeddedWithInterceptorExample.java    | 126 +++++++++++++++++++
 .../src/main/resources/broker.xml               |  48 +++++++
 4 files changed, 303 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/26e191a0/examples/protocols/stomp/stomp-embedded-interceptor/pom.xml
----------------------------------------------------------------------
diff --git a/examples/protocols/stomp/stomp-embedded-interceptor/pom.xml b/examples/protocols/stomp/stomp-embedded-interceptor/pom.xml
new file mode 100644
index 0000000..22c726c
--- /dev/null
+++ b/examples/protocols/stomp/stomp-embedded-interceptor/pom.xml
@@ -0,0 +1,92 @@
+<?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.stomp</groupId>
+      <artifactId>stomp-examples</artifactId>
+      <version>1.1.1-SNAPSHOT</version>
+   </parent>
+
+   <artifactId>stomp-embedded-interceptor</artifactId>
+   <packaging>jar</packaging>
+   <name>ActiveMQ Artemis JMS Stomp Embedded Interceptor 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-server</artifactId>
+         <version>${project.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>artemis-stomp-protocol</artifactId>
+         <version>${project.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>artemis-hornetq-protocol</artifactId>
+         <version>${project.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>io.netty</groupId>
+         <artifactId>netty-all</artifactId>
+      </dependency>
+   </dependencies>
+
+   <build>
+      <plugins>
+         <plugin>
+            <groupId>org.apache.activemq</groupId>
+            <artifactId>artemis-maven-plugin</artifactId>
+            <executions>
+               <execution>
+                  <id>runClient</id>
+                  <goals>
+                     <goal>runClient</goal>
+                  </goals>
+                  <configuration>
+                     <clientClass>org.apache.activemq.artemis.jms.example.StompEmbeddedWithInterceptorExample</clientClass>
+                  </configuration>
+               </execution>
+            </executions>
+            <dependencies>
+               <dependency>
+                  <groupId>org.apache.activemq.examples.stomp</groupId>
+                  <artifactId>stomp-embedded-interceptor</artifactId>
+                  <version>${project.version}</version>
+               </dependency>
+            </dependencies>
+         </plugin>
+      </plugins>
+   </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/26e191a0/examples/protocols/stomp/stomp-embedded-interceptor/readme.html
----------------------------------------------------------------------
diff --git a/examples/protocols/stomp/stomp-embedded-interceptor/readme.html b/examples/protocols/stomp/stomp-embedded-interceptor/readme.html
new file mode 100644
index 0000000..46cd264
--- /dev/null
+++ b/examples/protocols/stomp/stomp-embedded-interceptor/readme.html
@@ -0,0 +1,37 @@
+<!--
+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 Stomp 1.1 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>Stomp 1.2 Example</h1>
+
+     <pre>To run the example, simply type <b>mvn verify -Pexample</b> from this directory.</pre>
+
+     <p>This example shows you how to configure ActiveMQ Artemis to intercept received Stomp messages.</p>
+     <p>The example will start a ActiveMQ Artemis server configured with Stomp and JMS.</p>
+     <p>The client will open a socket to initiate a Stomp 1.2 connection and then send one Stomp message (using TCP directly).
+       The interceptor will print each message received.</p>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/26e191a0/examples/protocols/stomp/stomp-embedded-interceptor/src/main/java/org/apache/activemq/artemis/jms/example/StompEmbeddedWithInterceptorExample.java
----------------------------------------------------------------------
diff --git a/examples/protocols/stomp/stomp-embedded-interceptor/src/main/java/org/apache/activemq/artemis/jms/example/StompEmbeddedWithInterceptorExample.java b/examples/protocols/stomp/stomp-embedded-interceptor/src/main/java/org/apache/activemq/artemis/jms/example/StompEmbeddedWithInterceptorExample.java
new file mode 100644
index 0000000..e9a9156
--- /dev/null
+++ b/examples/protocols/stomp/stomp-embedded-interceptor/src/main/java/org/apache/activemq/artemis/jms/example/StompEmbeddedWithInterceptorExample.java
@@ -0,0 +1,126 @@
+/*
+ * 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 org.apache.activemq.artemis.api.core.ActiveMQException;
+import org.apache.activemq.artemis.api.core.TransportConfiguration;
+import org.apache.activemq.artemis.core.config.Configuration;
+import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
+import org.apache.activemq.artemis.core.config.impl.SecurityConfiguration;
+import org.apache.activemq.artemis.core.protocol.stomp.StompConnection;
+import org.apache.activemq.artemis.core.protocol.stomp.StompFrame;
+import org.apache.activemq.artemis.core.protocol.stomp.StompFrameInterceptor;
+import org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory;
+import org.apache.activemq.artemis.jms.server.embedded.EmbeddedJMS;
+import org.apache.activemq.artemis.jms.server.config.ConnectionFactoryConfiguration;
+import org.apache.activemq.artemis.jms.server.config.impl.ConnectionFactoryConfigurationImpl;
+import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
+import org.apache.activemq.artemis.spi.core.security.ActiveMQSecurityManagerImpl;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.HashSet;
+
+/**
+ * This example demonstrates how to run an ActiveMQ Artemis embedded with JMS
+ */
+public class StompEmbeddedWithInterceptorExample {
+
+   public static class MyStompInterceptor
+      implements StompFrameInterceptor {
+
+      public boolean intercept(StompFrame frame, RemotingConnection remotingConnection)
+         throws ActiveMQException {
+
+         StompConnection connection = (StompConnection) remotingConnection;
+
+         System.out.println("Intercepted frame " + frame + " on connection " + connection);
+
+         return false;
+      }
+   }
+
+   private static final String END_OF_FRAME = "\u0000";
+
+   public static void main(final String[] args) throws Exception {
+      EmbeddedJMS jmsServer = new EmbeddedJMS(); 
+      String brokerConfigPath = StompEmbeddedWithInterceptorExample.class.getResource("/broker.xml").toString();
+      jmsServer.setConfigResourcePath(brokerConfigPath);
+
+      jmsServer.start();
+      jmsServer.getActiveMQServer().getRemotingService().addIncomingInterceptor(new MyStompInterceptor());
+
+      System.out.println("Started Embedded JMS Server");
+
+      // Step 1. Create a TCP socket to connect to the Stomp port
+      Socket socket = new Socket("localhost", 61616);
+
+      // Step 2. Send a CONNECT frame to connect to the server
+      String connectFrame = "CONNECT\n" +
+         "accept-version:1.2\n" +
+         "host:localhost\n" +
+         "login:guest\n" +
+         "passcode:guest\n" +
+         "request-id:1\n" +
+         "\n" +
+         END_OF_FRAME;
+      sendFrame(socket, connectFrame);
+
+      // Step 3. Send a SEND frame (a Stomp message) to the
+      // jms.queue.exampleQueue address with a text body
+      String text = "Hello World from Stomp 1.2 !";
+      String message = "SEND\n" +
+         "destination:jms.queue.exampleQueue\n" +
+         "\n" +
+         text +
+         END_OF_FRAME;
+      sendFrame(socket, message);
+      System.out.println("Sent Stomp message: " + text);
+
+      // Step 4. Send a DISCONNECT frame to disconnect from the server
+      String disconnectFrame = "DISCONNECT\n" +
+         "\n" +
+         END_OF_FRAME;
+      sendFrame(socket, disconnectFrame);
+
+      // Step 5. Slose the TCP socket
+      socket.close();
+
+      Thread.sleep(1000);
+      jmsServer.stop();
+   }
+
+   private static void sendFrame(Socket socket, String data) throws Exception {
+      byte[] bytes = data.getBytes(StandardCharsets.UTF_8);
+      OutputStream outputStream = socket.getOutputStream();
+      for (int i = 0; i < bytes.length; i++) {
+         outputStream.write(bytes[i]);
+      }
+      outputStream.flush();
+   }
+}

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/26e191a0/examples/protocols/stomp/stomp-embedded-interceptor/src/main/resources/broker.xml
----------------------------------------------------------------------
diff --git a/examples/protocols/stomp/stomp-embedded-interceptor/src/main/resources/broker.xml b/examples/protocols/stomp/stomp-embedded-interceptor/src/main/resources/broker.xml
new file mode 100644
index 0000000..474a897
--- /dev/null
+++ b/examples/protocols/stomp/stomp-embedded-interceptor/src/main/resources/broker.xml
@@ -0,0 +1,48 @@
+<?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">
+
+   <core xmlns="urn:activemq:core">
+
+      <persistence-enabled>false</persistence-enabled>
+
+      <acceptors>
+        <acceptor name="artemis">tcp://127.0.0.1:61616?protocols=STOMP</acceptor>
+      </acceptors>
+
+      <!-- Other config -->
+
+      <security-settings>
+         <!--security for example queue-->
+         <security-setting match="#">
+            <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>
+
+   </core>
+</configuration>