This is an automated email from the ASF dual-hosted git repository. jgallimore pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomee-chatterbox.git
commit 0a41080d443c9a5e1be6c133233af379577c2f9a Author: Jonathan Gallimore <j...@jrg.me.uk> AuthorDate: Wed Jun 9 12:07:52 2021 +0100 Wrap the message in a proxy, so we don't need all the libraries the NATS Streaming client uses in TomEE's classpath --- chatterbox-nats/chatterbox-nats-api/pom.xml | 6 ------ .../tomee/chatterbox/nats/api/InboundListener.java | 4 +--- .../api/{InboundListener.java => NATSMessage.java} | 24 ++++++++++++++-------- chatterbox-nats/chatterbox-nats-impl/pom.xml | 1 - .../nats/adapter/NATSResourceAdapter.java | 16 +++++++++++++-- chatterbox-nats/chatterbox-nats-sample-war/pom.xml | 7 ------- .../src/main/java/org/superbiz/EchoBean.java | 8 +++----- 7 files changed, 34 insertions(+), 32 deletions(-) diff --git a/chatterbox-nats/chatterbox-nats-api/pom.xml b/chatterbox-nats/chatterbox-nats-api/pom.xml index db16e68..6f4ca62 100644 --- a/chatterbox-nats/chatterbox-nats-api/pom.xml +++ b/chatterbox-nats/chatterbox-nats-api/pom.xml @@ -45,11 +45,5 @@ <artifactId>javaee-api</artifactId> <scope>provided</scope> </dependency> - <dependency> - <groupId>io.nats</groupId> - <artifactId>java-nats-streaming</artifactId> - <version>2.2.3</version> - <scope>provided</scope> - </dependency> </dependencies> </project> diff --git a/chatterbox-nats/chatterbox-nats-api/src/main/java/org/apache/tomee/chatterbox/nats/api/InboundListener.java b/chatterbox-nats/chatterbox-nats-api/src/main/java/org/apache/tomee/chatterbox/nats/api/InboundListener.java index 94d6294..5f7ea6c 100644 --- a/chatterbox-nats/chatterbox-nats-api/src/main/java/org/apache/tomee/chatterbox/nats/api/InboundListener.java +++ b/chatterbox-nats/chatterbox-nats-api/src/main/java/org/apache/tomee/chatterbox/nats/api/InboundListener.java @@ -16,13 +16,11 @@ */ package org.apache.tomee.chatterbox.nats.api; -import io.nats.streaming.Message; - /** * @version $Revision$ $Date$ */ public interface InboundListener { - public void onMessage(final Message message) throws NATSException; + public void onMessage(final NATSMessage message) throws NATSException; } diff --git a/chatterbox-nats/chatterbox-nats-api/src/main/java/org/apache/tomee/chatterbox/nats/api/InboundListener.java b/chatterbox-nats/chatterbox-nats-api/src/main/java/org/apache/tomee/chatterbox/nats/api/NATSMessage.java similarity index 64% copy from chatterbox-nats/chatterbox-nats-api/src/main/java/org/apache/tomee/chatterbox/nats/api/InboundListener.java copy to chatterbox-nats/chatterbox-nats-api/src/main/java/org/apache/tomee/chatterbox/nats/api/NATSMessage.java index 94d6294..2335bf6 100644 --- a/chatterbox-nats/chatterbox-nats-api/src/main/java/org/apache/tomee/chatterbox/nats/api/InboundListener.java +++ b/chatterbox-nats/chatterbox-nats-api/src/main/java/org/apache/tomee/chatterbox/nats/api/NATSMessage.java @@ -16,13 +16,21 @@ */ package org.apache.tomee.chatterbox.nats.api; -import io.nats.streaming.Message; - -/** - * @version $Revision$ $Date$ - */ -public interface InboundListener { - - public void onMessage(final Message message) throws NATSException; +import java.time.Instant; +public interface NATSMessage { + Instant getInstant(); + long getSequence(); + String getSubject(); + void setSubject(String subject); + String getReplyTo(); + void setReplyTo(String reply); + byte[] getData(); + void setData(byte[] data); + void setData(byte[] data, int offset, int length); + long getTimestamp(); + public boolean isRedelivered(); + public int getCrc32(); + public void ack(); + public String toString(); } diff --git a/chatterbox-nats/chatterbox-nats-impl/pom.xml b/chatterbox-nats/chatterbox-nats-impl/pom.xml index d46e53a..fbe5f30 100644 --- a/chatterbox-nats/chatterbox-nats-impl/pom.xml +++ b/chatterbox-nats/chatterbox-nats-impl/pom.xml @@ -59,7 +59,6 @@ <groupId>io.nats</groupId> <artifactId>java-nats-streaming</artifactId> <version>2.2.3</version> - <scope>provided</scope> </dependency> </dependencies> </project> diff --git a/chatterbox-nats/chatterbox-nats-impl/src/main/java/org/apache/tomee/chatterbox/nats/adapter/NATSResourceAdapter.java b/chatterbox-nats/chatterbox-nats-impl/src/main/java/org/apache/tomee/chatterbox/nats/adapter/NATSResourceAdapter.java index 804a24f..4ed4485 100644 --- a/chatterbox-nats/chatterbox-nats-impl/src/main/java/org/apache/tomee/chatterbox/nats/adapter/NATSResourceAdapter.java +++ b/chatterbox-nats/chatterbox-nats-impl/src/main/java/org/apache/tomee/chatterbox/nats/adapter/NATSResourceAdapter.java @@ -24,6 +24,7 @@ import io.nats.streaming.StreamingConnectionFactory; import io.nats.streaming.Subscription; import org.apache.tomee.chatterbox.nats.api.InboundListener; import org.apache.tomee.chatterbox.nats.api.NATSException; +import org.apache.tomee.chatterbox.nats.api.NATSMessage; import javax.resource.ResourceException; import javax.resource.spi.ActivationSpec; @@ -38,7 +39,9 @@ import javax.resource.spi.work.Work; import javax.resource.spi.work.WorkManager; import javax.transaction.xa.XAResource; import java.io.IOException; +import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; +import java.lang.reflect.Proxy; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.lang.IllegalStateException; @@ -51,7 +54,7 @@ public class NATSResourceAdapter implements ResourceAdapter { static { try { - ONMESSAGE = InboundListener.class.getMethod("onMessage", Message.class); + ONMESSAGE = InboundListener.class.getMethod("onMessage", NATSMessage.class); } catch (Exception e) { throw new RuntimeException(e); } @@ -75,6 +78,7 @@ public class NATSResourceAdapter implements ResourceAdapter { connection = cf.createConnection(); } catch (Throwable t) { // TODO: log this + t.printStackTrace(); } } @@ -154,7 +158,15 @@ public class NATSResourceAdapter implements ResourceAdapter { try { try { messageEndpoint.beforeDelivery(ONMESSAGE); - ((InboundListener) messageEndpoint).onMessage(msg); + + final NATSMessage message = (NATSMessage) Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{InboundListener.class}, new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + return method.invoke(msg, args); + } + }); + + ((InboundListener) messageEndpoint).onMessage(message); } finally { messageEndpoint.afterDelivery(); } diff --git a/chatterbox-nats/chatterbox-nats-sample-war/pom.xml b/chatterbox-nats/chatterbox-nats-sample-war/pom.xml index 25827a3..0dbf389 100644 --- a/chatterbox-nats/chatterbox-nats-sample-war/pom.xml +++ b/chatterbox-nats/chatterbox-nats-sample-war/pom.xml @@ -40,12 +40,6 @@ <scope>provided</scope> </dependency> <dependency> - <groupId>io.nats</groupId> - <artifactId>java-nats-streaming</artifactId> - <version>2.2.3</version> - <scope>provided</scope> - </dependency> - <dependency> <groupId>${project.groupId}</groupId> <artifactId>chatterbox-nats-impl</artifactId> <version>${project.version}</version> @@ -95,7 +89,6 @@ <tomeeClassifier>plus</tomeeClassifier> <libs> <lib>org.apache.tomee.chatterbox:chatterbox-nats-api:${project.version}:jar</lib> - <lib>io.nats:java-nats-streaming:2.2.3:jar</lib> </libs> <apps> <app>org.apache.tomee.chatterbox:chatterbox-nats-rar:${project.version}:rar</app> diff --git a/chatterbox-nats/chatterbox-nats-sample-war/src/main/java/org/superbiz/EchoBean.java b/chatterbox-nats/chatterbox-nats-sample-war/src/main/java/org/superbiz/EchoBean.java index 2c0e81a..e66e0ff 100644 --- a/chatterbox-nats/chatterbox-nats-sample-war/src/main/java/org/superbiz/EchoBean.java +++ b/chatterbox-nats/chatterbox-nats-sample-war/src/main/java/org/superbiz/EchoBean.java @@ -17,12 +17,11 @@ package org.superbiz; import org.apache.tomee.chatterbox.nats.api.InboundListener; +import org.apache.tomee.chatterbox.nats.api.NATSMessage; import org.apache.tomee.chatterbox.nats.api.NATSException; -import io.nats.streaming.Message; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; -import java.io.IOException; import java.nio.charset.StandardCharsets; @MessageDriven(name = "Echo", activationConfig = { @@ -30,15 +29,14 @@ import java.nio.charset.StandardCharsets; }) public class EchoBean implements InboundListener { - @Override - public void onMessage(final Message message) throws NATSException { + public void onMessage(final NATSMessage message) throws NATSException { try { final String text = new String(message.getData(), StandardCharsets.UTF_8); System.out.println(text); message.ack(); - } catch (IOException e) { + } catch (Exception e) { throw new NATSException(e); } }