You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2006/03/15 23:41:55 UTC
svn commit: r386196 -
/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/DatagramHeaderMarshaller.java
Author: jstrachan
Date: Wed Mar 15 14:41:53 2006
New Revision: 386196
URL: http://svn.apache.org/viewcvs?rev=386196&view=rev
Log:
cache around endpoints so that they are reused - so that networks using brokerIds & brokerInfos can store the state on the endpoint
Modified:
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/DatagramHeaderMarshaller.java
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/DatagramHeaderMarshaller.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/DatagramHeaderMarshaller.java?rev=386196&r1=386195&r2=386196&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/DatagramHeaderMarshaller.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/DatagramHeaderMarshaller.java Wed Mar 15 14:41:53 2006
@@ -25,6 +25,8 @@
import java.net.DatagramPacket;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
+import java.util.HashMap;
+import java.util.Map;
/**
*
@@ -32,16 +34,20 @@
*/
public class DatagramHeaderMarshaller {
+ // TODO for large dynamic networks
+ // we may want to evict endpoints that disconnect
+ // from a transport - e.g. for multicast
+ private Map endpoints = new HashMap();
+
/**
* Reads any header if applicable and then creates an endpoint object
*/
public Endpoint createEndpoint(ByteBuffer readBuffer, SocketAddress address) {
- return new DatagramEndpoint(address.toString(), address);
+ return getEndpoint(address);
}
public Endpoint createEndpoint(DatagramPacket datagram, DataInputStream dataIn) {
- SocketAddress address = datagram.getSocketAddress();
- return new DatagramEndpoint(address.toString(), address);
+ return getEndpoint(datagram.getSocketAddress());
}
public void writeHeader(Command command, ByteBuffer writeBuffer) {
@@ -57,4 +63,23 @@
public void writeHeader(Command command, DataOutputStream dataOut) {
}
+ /**
+ * Gets the current endpoint object for this address or creates one if not available.
+ *
+ * Note that this method does not need to be synchronized as its only ever going to be
+ * used by the already-synchronized read() method of a CommandChannel
+ *
+ */
+ protected Endpoint getEndpoint(SocketAddress address) {
+ Endpoint endpoint = (Endpoint) endpoints.get(address);
+ if (endpoint == null) {
+ endpoint = createEndpoint(address);
+ endpoints.put(address, endpoint);
+ }
+ return endpoint;
+ }
+
+ protected Endpoint createEndpoint(SocketAddress address) {
+ return new DatagramEndpoint(address.toString(), address);
+ }
}