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>