You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2006/10/25 17:02:23 UTC
svn commit: r467676 - in
/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq:
command/WireFormatInfo.java openwire/OpenWireFormat.java
openwire/OpenWireFormatFactory.java
Author: chirino
Date: Wed Oct 25 08:02:22 2006
New Revision: 467676
URL: http://svn.apache.org/viewvc?view=rev&rev=467676
Log:
http://issues.apache.org/activemq/browse/AMQ-1001
Modified:
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/command/WireFormatInfo.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormatFactory.java
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/command/WireFormatInfo.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/command/WireFormatInfo.java?view=diff&rev=467676&r1=467675&r2=467676
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/command/WireFormatInfo.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/command/WireFormatInfo.java Wed Oct 25 08:02:22 2006
@@ -253,6 +253,18 @@
setProperty("MaxInactivityDuration", new Long(maxInactivityDuration));
}
+ /**
+ * @throws IOException
+ */
+ public int getCacheSize() throws IOException {
+ Integer i = (Integer) getProperty("CacheSize");
+ return i == null ? 0 : i.intValue();
+ }
+ public void setCacheSize(int cacheSize) throws IOException {
+ setProperty("CacheSize", new Integer(cacheSize));
+ }
+
+
public Response visit(CommandVisitor visitor) throws Exception {
return visitor.processWireFormat(this);
}
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java?view=diff&rev=467676&r1=467675&r2=467676
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java Wed Oct 25 08:02:22 2006
@@ -43,7 +43,7 @@
static final byte NULL_TYPE = CommandTypes.NULL;
private static final int MARSHAL_CACHE_SIZE = Short.MAX_VALUE/2;
- private static final int MARSHAL_CACHE_PREFERED_SIZE = MARSHAL_CACHE_SIZE-100;
+ private static final int MARSHAL_CACHE_FREE_SPACE = 100;
private DataStreamMarshaller dataMarshallers[];
private int version = 2;
@@ -53,12 +53,13 @@
private boolean tightEncodingEnabled=false;
private boolean sizePrefixDisabled=false;
- private HashMap marshallCacheMap = new HashMap();
+ // The following fields are used for value caching
private short nextMarshallCacheIndex=0;
- private short nextMarshallCacheEvictionIndex=0;
+ private short nextMarshallCacheEvictionIndex=0;
+ private HashMap marshallCacheMap = new HashMap();
+ private DataStructure marshallCache[];
+ private DataStructure unmarshallCache[];
- private DataStructure marshallCache[] = new DataStructure[MARSHAL_CACHE_SIZE];
- private DataStructure unmarshallCache[] = new DataStructure[MARSHAL_CACHE_SIZE];
private WireFormatInfo preferedWireFormatInfo;
public OpenWireFormat() {
@@ -466,13 +467,13 @@
public void runMarshallCacheEvictionSweep() {
// Do we need to start evicting??
- while( marshallCacheMap.size() > MARSHAL_CACHE_PREFERED_SIZE ) {
+ while( marshallCacheMap.size() > marshallCache.length - MARSHAL_CACHE_FREE_SPACE ) {
marshallCacheMap.remove(marshallCache[nextMarshallCacheEvictionIndex]);
marshallCache[nextMarshallCacheEvictionIndex]=null;
nextMarshallCacheEvictionIndex++;
- if( nextMarshallCacheEvictionIndex >= MARSHAL_CACHE_SIZE ) {
+ if( nextMarshallCacheEvictionIndex >= marshallCache.length ) {
nextMarshallCacheEvictionIndex=0;
}
@@ -485,12 +486,12 @@
public Short addToMarshallCache(DataStructure o) {
short i = nextMarshallCacheIndex++;
- if( nextMarshallCacheIndex >= MARSHAL_CACHE_SIZE ) {
+ if( nextMarshallCacheIndex >= marshallCache.length ) {
nextMarshallCacheIndex=0;
}
// We can only cache that item if there is space left.
- if( marshallCacheMap.size() < MARSHAL_CACHE_SIZE ) {
+ if( marshallCacheMap.size() < marshallCache.length ) {
marshallCache[i] = o;
Short index = new Short(i);
marshallCacheMap.put(o, index);
@@ -571,6 +572,26 @@
this.cacheEnabled = info.isCacheEnabled() && preferedWireFormatInfo.isCacheEnabled();
this.tightEncodingEnabled = info.isTightEncodingEnabled() && preferedWireFormatInfo.isTightEncodingEnabled();
this.sizePrefixDisabled = info.isSizePrefixDisabled() && preferedWireFormatInfo.isSizePrefixDisabled();
+
+ if( cacheEnabled ) {
+
+ int size = Math.min(preferedWireFormatInfo.getCacheSize(), info.getCacheSize());
+ if( size == 0 ) {
+ size = MARSHAL_CACHE_SIZE;
+ }
+
+ marshallCache = new DataStructure[size];
+ unmarshallCache = new DataStructure[size];
+ nextMarshallCacheIndex=0;
+ nextMarshallCacheEvictionIndex =0;
+ marshallCacheMap = new HashMap();
+ } else {
+ marshallCache=null;
+ unmarshallCache=null;
+ nextMarshallCacheIndex=0;
+ nextMarshallCacheEvictionIndex=0;
+ marshallCacheMap = null;
+ }
}
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormatFactory.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormatFactory.java?view=diff&rev=467676&r1=467675&r2=467676
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormatFactory.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormatFactory.java Wed Oct 25 08:02:22 2006
@@ -37,6 +37,7 @@
private boolean tightEncodingEnabled=true;
private boolean sizePrefixDisabled=false;
private long maxInactivityDuration=30*1000;
+ private int cacheSize=1024;
public WireFormat createWireFormat() {
WireFormatInfo info = new WireFormatInfo();
@@ -49,6 +50,7 @@
info.setTightEncodingEnabled(tightEncodingEnabled);
info.setSizePrefixDisabled(sizePrefixDisabled);
info.seMaxInactivityDuration(maxInactivityDuration);
+ info.setCacheSize(cacheSize);
} catch (Exception e) {
IllegalStateException ise = new IllegalStateException("Could not configure WireFormatInfo");
ise.initCause(e);
@@ -115,4 +117,12 @@
public void setMaxInactivityDuration(long maxInactivityDuration) {
this.maxInactivityDuration = maxInactivityDuration;
}
+
+ public int getCacheSize() {
+ return cacheSize;
+ }
+
+ public void setCacheSize(int cacheSize) {
+ this.cacheSize = cacheSize;
+ }
}