You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jg...@apache.org on 2021/06/16 13:36:22 UTC
[tomee-chatterbox] 03/06: Wrap the message in a proxy,
so we don't need all the libraries the NATS Streaming client uses
in TomEE's classpath
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 <jo...@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);
}
}