[infinispan-commits] Infinispan SVN: r335 - in trunk/core/src/main/java/org/infinispan/marshall/jboss: externalizers and 1 other directory.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Thu May 21 18:21:55 EDT 2009
Author: galder.zamarreno at jboss.com
Date: 2009-05-21 18:21:55 -0400 (Thu, 21 May 2009)
New Revision: 335
Added:
trunk/core/src/main/java/org/infinispan/marshall/jboss/ConstantObjectTable.java
trunk/core/src/main/java/org/infinispan/marshall/jboss/NumberClassExternalizer.java
Removed:
trunk/core/src/main/java/org/infinispan/marshall/jboss/CustomObjectTable.java
trunk/core/src/main/java/org/infinispan/marshall/jboss/ExternalizerClassFactory.java
trunk/core/src/main/java/org/infinispan/marshall/jboss/MagicNumberClassTable.java
trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/InternalCachedEntryExternalizer.java
trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/RequestIgnoredResponseExternalizer.java
trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/UnsuccessfulResponseExternalizer.java
Modified:
trunk/core/src/main/java/org/infinispan/marshall/jboss/JBossMarshaller.java
Log:
[ISPN-59] (Add unit test that verifies number of written bytes) Some minor class name refactoring to reflect the new implementation and remove deprecated classes.
Copied: trunk/core/src/main/java/org/infinispan/marshall/jboss/ConstantObjectTable.java (from rev 334, trunk/core/src/main/java/org/infinispan/marshall/jboss/CustomObjectTable.java)
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/ConstantObjectTable.java (rev 0)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/ConstantObjectTable.java 2009-05-21 22:21:55 UTC (rev 335)
@@ -0,0 +1,270 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.infinispan.marshall.jboss;
+
+import net.jcip.annotations.Immutable;
+
+import org.infinispan.CacheException;
+import org.infinispan.atomic.AtomicHashMap;
+import org.infinispan.commands.LockControlCommand;
+import org.infinispan.commands.control.StateTransferControlCommand;
+import org.infinispan.commands.read.GetKeyValueCommand;
+import org.infinispan.commands.remote.ClusteredGetCommand;
+import org.infinispan.commands.remote.MultipleRpcCommand;
+import org.infinispan.commands.remote.SingleRpcCommand;
+import org.infinispan.commands.tx.CommitCommand;
+import org.infinispan.commands.tx.PrepareCommand;
+import org.infinispan.commands.tx.RollbackCommand;
+import org.infinispan.commands.write.ClearCommand;
+import org.infinispan.commands.write.InvalidateCommand;
+import org.infinispan.commands.write.InvalidateL1Command;
+import org.infinispan.commands.write.PutKeyValueCommand;
+import org.infinispan.commands.write.PutMapCommand;
+import org.infinispan.commands.write.RemoveCommand;
+import org.infinispan.commands.write.ReplaceCommand;
+import org.infinispan.container.entries.ImmortalCacheEntry;
+import org.infinispan.container.entries.ImmortalCacheValue;
+import org.infinispan.container.entries.MortalCacheEntry;
+import org.infinispan.container.entries.MortalCacheValue;
+import org.infinispan.container.entries.TransientCacheEntry;
+import org.infinispan.container.entries.TransientCacheValue;
+import org.infinispan.container.entries.TransientMortalCacheEntry;
+import org.infinispan.container.entries.TransientMortalCacheValue;
+import org.infinispan.loaders.bucket.Bucket;
+import org.infinispan.marshall.MarshalledValue;
+import org.infinispan.marshall.jboss.externalizers.ArrayListExternalizer;
+import org.infinispan.marshall.jboss.externalizers.BucketExternalizer;
+import org.infinispan.marshall.jboss.externalizers.DeltaAwareExternalizer;
+import org.infinispan.marshall.jboss.externalizers.ExceptionResponseExternalizer;
+import org.infinispan.marshall.jboss.externalizers.ExtendedResponseExternalizer;
+import org.infinispan.marshall.jboss.externalizers.GlobalTransactionExternalizer;
+import org.infinispan.marshall.jboss.externalizers.ImmortalCacheEntryExternalizer;
+import org.infinispan.marshall.jboss.externalizers.ImmortalCacheValueExternalizer;
+import org.infinispan.marshall.jboss.externalizers.ImmutableMapExternalizer;
+import org.infinispan.marshall.jboss.externalizers.JGroupsAddressExternalizer;
+import org.infinispan.marshall.jboss.externalizers.LinkedListExternalizer;
+import org.infinispan.marshall.jboss.externalizers.MapExternalizer;
+import org.infinispan.marshall.jboss.externalizers.MarshalledValueExternalizer;
+import org.infinispan.marshall.jboss.externalizers.MortalCacheEntryExternalizer;
+import org.infinispan.marshall.jboss.externalizers.MortalCacheValueExternalizer;
+import org.infinispan.marshall.jboss.externalizers.ReplicableCommandExternalizer;
+import org.infinispan.marshall.jboss.externalizers.SetExternalizer;
+import org.infinispan.marshall.jboss.externalizers.SingletonListExternalizer;
+import org.infinispan.marshall.jboss.externalizers.StateTransferControlCommandExternalizer;
+import org.infinispan.marshall.jboss.externalizers.SuccessfulResponseExternalizer;
+import org.infinispan.marshall.jboss.externalizers.TransactionLogExternalizer;
+import org.infinispan.marshall.jboss.externalizers.TransientCacheEntryExternalizer;
+import org.infinispan.marshall.jboss.externalizers.TransientCacheValueExternalizer;
+import org.infinispan.marshall.jboss.externalizers.TransientMortalCacheEntryExternalizer;
+import org.infinispan.marshall.jboss.externalizers.TransientMortalCacheValueExternalizer;
+import org.infinispan.remoting.responses.ExceptionResponse;
+import org.infinispan.remoting.responses.ExtendedResponse;
+import org.infinispan.remoting.responses.RequestIgnoredResponse;
+import org.infinispan.remoting.responses.SuccessfulResponse;
+import org.infinispan.remoting.responses.UnsuccessfulResponse;
+import org.infinispan.remoting.transport.Transport;
+import org.infinispan.remoting.transport.jgroups.JGroupsAddress;
+import org.infinispan.transaction.xa.GlobalTransaction;
+import org.infinispan.util.FastCopyHashMap;
+import org.infinispan.util.Util;
+import org.jboss.marshalling.Marshaller;
+import org.jboss.marshalling.ObjectTable;
+import org.jboss.marshalling.Unmarshaller;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.IdentityHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+/**
+ * Constant ObjectTable that marshalls constant instances regardless of whether
+ * these are generic objects such as UnsuccessfulResponse.INSTANCE, or home grown
+ * Externalizer implementations. In both cases, this is a hugely efficient way of
+ * sending around constant singleton objects.
+ *
+ * @author Galder Zamarreño
+ * @since 4.0
+ */
+public class ConstantObjectTable implements ObjectTable {
+ private static final Map<String, String> EXTERNALIZERS = new HashMap<String, String>();
+
+ static {
+ EXTERNALIZERS.put(GlobalTransaction.class.getName(), GlobalTransactionExternalizer.class.getName());
+ EXTERNALIZERS.put(JGroupsAddress.class.getName(), JGroupsAddressExternalizer.class.getName());
+ EXTERNALIZERS.put(ArrayList.class.getName(), ArrayListExternalizer.class.getName());
+ EXTERNALIZERS.put(LinkedList.class.getName(), LinkedListExternalizer.class.getName());
+ EXTERNALIZERS.put(HashMap.class.getName(), MapExternalizer.class.getName());
+ EXTERNALIZERS.put(TreeMap.class.getName(), MapExternalizer.class.getName());
+ EXTERNALIZERS.put(HashSet.class.getName(), SetExternalizer.class.getName());
+ EXTERNALIZERS.put(TreeSet.class.getName(), SetExternalizer.class.getName());
+ EXTERNALIZERS.put("org.infinispan.util.Immutables$ImmutableMapWrapper", ImmutableMapExternalizer.class.getName());
+ EXTERNALIZERS.put(MarshalledValue.class.getName(), MarshalledValueExternalizer.class.getName());
+ EXTERNALIZERS.put(FastCopyHashMap.class.getName(), MapExternalizer.class.getName());
+ EXTERNALIZERS.put("java.util.Collections$SingletonList", SingletonListExternalizer.class.getName());
+ EXTERNALIZERS.put("org.infinispan.transaction.TransactionLog$LogEntry", TransactionLogExternalizer.class.getName());
+ EXTERNALIZERS.put(ExtendedResponse.class.getName(), ExtendedResponseExternalizer.class.getName());
+ EXTERNALIZERS.put(SuccessfulResponse.class.getName(), SuccessfulResponseExternalizer.class.getName());
+ EXTERNALIZERS.put(ExceptionResponse.class.getName(), ExceptionResponseExternalizer.class.getName());
+ EXTERNALIZERS.put(AtomicHashMap.class.getName(), DeltaAwareExternalizer.class.getName());
+
+ EXTERNALIZERS.put(StateTransferControlCommand.class.getName(), StateTransferControlCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(ClusteredGetCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(MultipleRpcCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(SingleRpcCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(GetKeyValueCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(PutKeyValueCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(RemoveCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(InvalidateCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(ReplaceCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(ClearCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(PutMapCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(PrepareCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(CommitCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(RollbackCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(InvalidateL1Command.class.getName(), ReplicableCommandExternalizer.class.getName());
+ EXTERNALIZERS.put(LockControlCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+
+ EXTERNALIZERS.put(ImmortalCacheEntry.class.getName(), ImmortalCacheEntryExternalizer.class.getName());
+ EXTERNALIZERS.put(MortalCacheEntry.class.getName(), MortalCacheEntryExternalizer.class.getName());
+ EXTERNALIZERS.put(TransientCacheEntry.class.getName(), TransientCacheEntryExternalizer.class.getName());
+ EXTERNALIZERS.put(TransientMortalCacheEntry.class.getName(), TransientMortalCacheEntryExternalizer.class.getName());
+ EXTERNALIZERS.put(ImmortalCacheValue.class.getName(), ImmortalCacheValueExternalizer.class.getName());
+ EXTERNALIZERS.put(MortalCacheValue.class.getName(), MortalCacheValueExternalizer.class.getName());
+ EXTERNALIZERS.put(TransientCacheValue.class.getName(), TransientCacheValueExternalizer.class.getName());
+ EXTERNALIZERS.put(TransientMortalCacheValue.class.getName(), TransientMortalCacheValueExternalizer.class.getName());
+
+ EXTERNALIZERS.put(Bucket.class.getName(), BucketExternalizer.class.getName());
+ }
+
+ /** Contains list of singleton objects written such as constant objects,
+ * singleton ReadWriter implementations...etc. When writing, index of each
+ * object is written, and when reading, index is used to find the instance
+ * in this list.*/
+ private final List<Object> objects = new ArrayList<Object>();
+ /** Contains mapping of constant instances to their writers */
+ private final Map<Object, Writer> writers = new IdentityHashMap<Object, Writer>();
+ /** Contains mapping of custom object externalizer classes to their
+ * Externalizer instances. Do not use this map for storing Externalizer
+ * implementations for user classes. For these, please use weak key based
+ * maps, i.e WeakHashMap */
+ private final Map<Class<?>, Externalizer> externalizers = new IdentityHashMap<Class<?>, Externalizer>();
+ private byte index;
+ private final Transport transport;
+ private final NumberClassExternalizer classTable = new NumberClassExternalizer();
+
+ public ConstantObjectTable(Transport transport) {
+ this.transport = transport;
+ }
+
+ public void init() {
+ // Init singletons
+ objects.add(RequestIgnoredResponse.INSTANCE);
+ writers.put(RequestIgnoredResponse.INSTANCE, new InstanceWriter(index++));
+ objects.add(UnsuccessfulResponse.INSTANCE);
+ writers.put(UnsuccessfulResponse.INSTANCE, new InstanceWriter(index++));
+
+ try {
+ for (Map.Entry<String, String> entry : EXTERNALIZERS.entrySet()) {
+ Class typeClazz = Util.loadClass(entry.getKey());
+ Externalizer delegate = (Externalizer) Util.getInstance(entry.getValue());
+ if (delegate instanceof StateTransferControlCommandExternalizer) {
+ ((StateTransferControlCommandExternalizer) delegate).init(transport);
+ }
+ if (delegate instanceof ClassExternalizer.ClassWritable) {
+ ((ClassExternalizer.ClassWritable) delegate).setClassExternalizer(classTable);
+ }
+ Externalizer rwrt = new DelegatingReadWriter(index++, delegate);
+ objects.add(rwrt);
+ externalizers.put(typeClazz, rwrt);
+ }
+
+ } catch (IOException e) {
+ throw new CacheException("Unable to open load magicnumbers.properties", e);
+ } catch (ClassNotFoundException e) {
+ throw new CacheException("Unable to load one of the classes defined in the magicnumbers.properties", e);
+ } catch (Exception e) {
+ throw new CacheException("Unable to instantiate Externalizer class", e);
+ }
+ }
+
+ public void stop() {
+ classTable.stop();
+ writers.clear();
+ objects.clear();
+ externalizers.clear();
+ }
+
+ public Writer getObjectWriter(Object o) throws IOException {
+ Object singleton = writers.get(o);
+ if (singleton == null) {
+ return externalizers.get(o.getClass());
+ }
+ return writers.get(o);
+ }
+
+ public Object readObject(Unmarshaller unmarshaller) throws IOException, ClassNotFoundException {
+ Object o = objects.get(unmarshaller.readUnsignedByte());
+ if (o instanceof Externalizer) {
+ return ((Externalizer) o).readObject(unmarshaller);
+ }
+ return o;
+ }
+
+ @Immutable
+ static class InstanceWriter implements Writer {
+ private final byte id;
+
+ InstanceWriter(byte objectId) {
+ this.id = objectId;
+ }
+
+ public void writeObject(Marshaller marshaller, Object object) throws IOException {
+ marshaller.write(id);
+ }
+ }
+
+ @Immutable
+ static class DelegatingReadWriter implements Externalizer {
+ private final byte id;
+ private final Externalizer delegate;
+
+ DelegatingReadWriter(byte objectId, Externalizer delegate) {
+ this.id = objectId;
+ this.delegate = delegate;
+ }
+
+ public void writeObject(Marshaller marshaller, Object object) throws IOException {
+ marshaller.write(id);
+ delegate.writeObject(marshaller, object);
+ }
+
+ public Object readObject(Unmarshaller unmarshaller) throws IOException, ClassNotFoundException {
+ return delegate.readObject(unmarshaller);
+ }
+ }
+}
Deleted: trunk/core/src/main/java/org/infinispan/marshall/jboss/CustomObjectTable.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/CustomObjectTable.java 2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/CustomObjectTable.java 2009-05-21 22:21:55 UTC (rev 335)
@@ -1,268 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.infinispan.marshall.jboss;
-
-import net.jcip.annotations.Immutable;
-
-import org.infinispan.CacheException;
-import org.infinispan.atomic.AtomicHashMap;
-import org.infinispan.commands.LockControlCommand;
-import org.infinispan.commands.control.StateTransferControlCommand;
-import org.infinispan.commands.read.GetKeyValueCommand;
-import org.infinispan.commands.remote.ClusteredGetCommand;
-import org.infinispan.commands.remote.MultipleRpcCommand;
-import org.infinispan.commands.remote.SingleRpcCommand;
-import org.infinispan.commands.tx.CommitCommand;
-import org.infinispan.commands.tx.PrepareCommand;
-import org.infinispan.commands.tx.RollbackCommand;
-import org.infinispan.commands.write.ClearCommand;
-import org.infinispan.commands.write.InvalidateCommand;
-import org.infinispan.commands.write.InvalidateL1Command;
-import org.infinispan.commands.write.PutKeyValueCommand;
-import org.infinispan.commands.write.PutMapCommand;
-import org.infinispan.commands.write.RemoveCommand;
-import org.infinispan.commands.write.ReplaceCommand;
-import org.infinispan.container.entries.ImmortalCacheEntry;
-import org.infinispan.container.entries.ImmortalCacheValue;
-import org.infinispan.container.entries.MortalCacheEntry;
-import org.infinispan.container.entries.MortalCacheValue;
-import org.infinispan.container.entries.TransientCacheEntry;
-import org.infinispan.container.entries.TransientCacheValue;
-import org.infinispan.container.entries.TransientMortalCacheEntry;
-import org.infinispan.container.entries.TransientMortalCacheValue;
-import org.infinispan.loaders.bucket.Bucket;
-import org.infinispan.marshall.MarshalledValue;
-import org.infinispan.marshall.jboss.externalizers.ArrayListExternalizer;
-import org.infinispan.marshall.jboss.externalizers.BucketExternalizer;
-import org.infinispan.marshall.jboss.externalizers.DeltaAwareExternalizer;
-import org.infinispan.marshall.jboss.externalizers.ExceptionResponseExternalizer;
-import org.infinispan.marshall.jboss.externalizers.ExtendedResponseExternalizer;
-import org.infinispan.marshall.jboss.externalizers.GlobalTransactionExternalizer;
-import org.infinispan.marshall.jboss.externalizers.ImmortalCacheEntryExternalizer;
-import org.infinispan.marshall.jboss.externalizers.ImmortalCacheValueExternalizer;
-import org.infinispan.marshall.jboss.externalizers.ImmutableMapExternalizer;
-import org.infinispan.marshall.jboss.externalizers.JGroupsAddressExternalizer;
-import org.infinispan.marshall.jboss.externalizers.LinkedListExternalizer;
-import org.infinispan.marshall.jboss.externalizers.MapExternalizer;
-import org.infinispan.marshall.jboss.externalizers.MarshalledValueExternalizer;
-import org.infinispan.marshall.jboss.externalizers.MortalCacheEntryExternalizer;
-import org.infinispan.marshall.jboss.externalizers.MortalCacheValueExternalizer;
-import org.infinispan.marshall.jboss.externalizers.ReplicableCommandExternalizer;
-import org.infinispan.marshall.jboss.externalizers.SetExternalizer;
-import org.infinispan.marshall.jboss.externalizers.SingletonListExternalizer;
-import org.infinispan.marshall.jboss.externalizers.StateTransferControlCommandExternalizer;
-import org.infinispan.marshall.jboss.externalizers.SuccessfulResponseExternalizer;
-import org.infinispan.marshall.jboss.externalizers.TransactionLogExternalizer;
-import org.infinispan.marshall.jboss.externalizers.TransientCacheEntryExternalizer;
-import org.infinispan.marshall.jboss.externalizers.TransientCacheValueExternalizer;
-import org.infinispan.marshall.jboss.externalizers.TransientMortalCacheEntryExternalizer;
-import org.infinispan.marshall.jboss.externalizers.TransientMortalCacheValueExternalizer;
-import org.infinispan.remoting.responses.ExceptionResponse;
-import org.infinispan.remoting.responses.ExtendedResponse;
-import org.infinispan.remoting.responses.RequestIgnoredResponse;
-import org.infinispan.remoting.responses.SuccessfulResponse;
-import org.infinispan.remoting.responses.UnsuccessfulResponse;
-import org.infinispan.remoting.transport.Transport;
-import org.infinispan.remoting.transport.jgroups.JGroupsAddress;
-import org.infinispan.transaction.xa.GlobalTransaction;
-import org.infinispan.util.FastCopyHashMap;
-import org.infinispan.util.Util;
-import org.jboss.marshalling.Marshaller;
-import org.jboss.marshalling.ObjectTable;
-import org.jboss.marshalling.Unmarshaller;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-/**
- * Custom ObjectTable that deals with both constant instances and
- * externalizer-like ReadWriter implementations.
- *
- * @author Galder Zamarreño
- * @since 4.0
- */
-public class CustomObjectTable implements ObjectTable {
- private static final Map<String, String> WRITERS = new HashMap<String, String>();
-
- static {
- WRITERS.put(GlobalTransaction.class.getName(), GlobalTransactionExternalizer.class.getName());
- WRITERS.put(JGroupsAddress.class.getName(), JGroupsAddressExternalizer.class.getName());
- WRITERS.put(ArrayList.class.getName(), ArrayListExternalizer.class.getName());
- WRITERS.put(LinkedList.class.getName(), LinkedListExternalizer.class.getName());
- WRITERS.put(HashMap.class.getName(), MapExternalizer.class.getName());
- WRITERS.put(TreeMap.class.getName(), MapExternalizer.class.getName());
- WRITERS.put(HashSet.class.getName(), SetExternalizer.class.getName());
- WRITERS.put(TreeSet.class.getName(), SetExternalizer.class.getName());
- WRITERS.put("org.infinispan.util.Immutables$ImmutableMapWrapper", ImmutableMapExternalizer.class.getName());
- WRITERS.put(MarshalledValue.class.getName(), MarshalledValueExternalizer.class.getName());
- WRITERS.put(FastCopyHashMap.class.getName(), MapExternalizer.class.getName());
- WRITERS.put("java.util.Collections$SingletonList", SingletonListExternalizer.class.getName());
- WRITERS.put("org.infinispan.transaction.TransactionLog$LogEntry", TransactionLogExternalizer.class.getName());
- WRITERS.put(ExtendedResponse.class.getName(), ExtendedResponseExternalizer.class.getName());
- WRITERS.put(SuccessfulResponse.class.getName(), SuccessfulResponseExternalizer.class.getName());
- WRITERS.put(ExceptionResponse.class.getName(), ExceptionResponseExternalizer.class.getName());
- WRITERS.put(AtomicHashMap.class.getName(), DeltaAwareExternalizer.class.getName());
-
- WRITERS.put(StateTransferControlCommand.class.getName(), StateTransferControlCommandExternalizer.class.getName());
- WRITERS.put(ClusteredGetCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(MultipleRpcCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(SingleRpcCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(GetKeyValueCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(PutKeyValueCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(RemoveCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(InvalidateCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(ReplaceCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(ClearCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(PutMapCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(PrepareCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(CommitCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(RollbackCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(InvalidateL1Command.class.getName(), ReplicableCommandExternalizer.class.getName());
- WRITERS.put(LockControlCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-
- WRITERS.put(ImmortalCacheEntry.class.getName(), ImmortalCacheEntryExternalizer.class.getName());
- WRITERS.put(MortalCacheEntry.class.getName(), MortalCacheEntryExternalizer.class.getName());
- WRITERS.put(TransientCacheEntry.class.getName(), TransientCacheEntryExternalizer.class.getName());
- WRITERS.put(TransientMortalCacheEntry.class.getName(), TransientMortalCacheEntryExternalizer.class.getName());
- WRITERS.put(ImmortalCacheValue.class.getName(), ImmortalCacheValueExternalizer.class.getName());
- WRITERS.put(MortalCacheValue.class.getName(), MortalCacheValueExternalizer.class.getName());
- WRITERS.put(TransientCacheValue.class.getName(), TransientCacheValueExternalizer.class.getName());
- WRITERS.put(TransientMortalCacheValue.class.getName(), TransientMortalCacheValueExternalizer.class.getName());
-
- WRITERS.put(Bucket.class.getName(), BucketExternalizer.class.getName());
- }
-
- /** Contains list of singleton objects written such as constant objects,
- * singleton ReadWriter implementations...etc. When writing, index of each
- * object is written, and when reading, index is used to find the instance
- * in this list.*/
- private final List<Object> objects = new ArrayList<Object>();
- /** Contains mapping of constant instances to their writers */
- private final Map<Object, Writer> writers = new IdentityHashMap<Object, Writer>();
- /** Contains mapping of custom object externalizer classes to their
- * ReadWriter instances. Do not use this map for storing ReadWriter
- * implementations for user classes. For these, please use weak key based
- * maps, i.e WeakHashMap */
- private final Map<Class<?>, Externalizer> readwriters = new IdentityHashMap<Class<?>, Externalizer>();
- private byte index;
- private final Transport transport;
- private final MagicNumberClassTable classTable = new MagicNumberClassTable();
-
- public CustomObjectTable(Transport transport) {
- this.transport = transport;
- }
-
- public void init() {
- // Init singletons
- objects.add(RequestIgnoredResponse.INSTANCE);
- writers.put(RequestIgnoredResponse.INSTANCE, new InstanceWriter(index++));
- objects.add(UnsuccessfulResponse.INSTANCE);
- writers.put(UnsuccessfulResponse.INSTANCE, new InstanceWriter(index++));
-
- try {
- for (Map.Entry<String, String> entry : WRITERS.entrySet()) {
- Class typeClazz = Util.loadClass(entry.getKey());
- Externalizer delegate = (Externalizer) Util.getInstance(entry.getValue());
- if (delegate instanceof StateTransferControlCommandExternalizer) {
- ((StateTransferControlCommandExternalizer) delegate).init(transport);
- }
- if (delegate instanceof ClassExternalizer.ClassWritable) {
- ((ClassExternalizer.ClassWritable) delegate).setClassExternalizer(classTable);
- }
- Externalizer rwrt = new DelegatingReadWriter(index++, delegate);
- objects.add(rwrt);
- readwriters.put(typeClazz, rwrt);
- }
-
- } catch (IOException e) {
- throw new CacheException("Unable to open load magicnumbers.properties", e);
- } catch (ClassNotFoundException e) {
- throw new CacheException("Unable to load one of the classes defined in the magicnumbers.properties", e);
- } catch (Exception e) {
- throw new CacheException("Unable to instantiate Externalizer class", e);
- }
- }
-
- public void stop() {
- classTable.stop();
- writers.clear();
- objects.clear();
- readwriters.clear();
- }
-
- public Writer getObjectWriter(Object o) throws IOException {
- Object singleton = writers.get(o);
- if (singleton == null) {
- return readwriters.get(o.getClass());
- }
- return writers.get(o);
- }
-
- public Object readObject(Unmarshaller unmarshaller) throws IOException, ClassNotFoundException {
- Object o = objects.get(unmarshaller.readUnsignedByte());
- if (o instanceof Externalizer) {
- return ((Externalizer) o).readObject(unmarshaller);
- }
- return o;
- }
-
- @Immutable
- static class InstanceWriter implements Writer {
- private final byte id;
-
- InstanceWriter(byte objectId) {
- this.id = objectId;
- }
-
- public void writeObject(Marshaller marshaller, Object object) throws IOException {
- marshaller.write(id);
- }
- }
-
- @Immutable
- static class DelegatingReadWriter implements Externalizer {
- private final byte id;
- private final Externalizer delegate;
-
- DelegatingReadWriter(byte objectId, Externalizer delegate) {
- this.id = objectId;
- this.delegate = delegate;
- }
-
- public void writeObject(Marshaller marshaller, Object object) throws IOException {
- marshaller.write(id);
- delegate.writeObject(marshaller, object);
- }
-
- public Object readObject(Unmarshaller unmarshaller) throws IOException, ClassNotFoundException {
- return delegate.readObject(unmarshaller);
- }
- }
-}
Deleted: trunk/core/src/main/java/org/infinispan/marshall/jboss/ExternalizerClassFactory.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/ExternalizerClassFactory.java 2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/ExternalizerClassFactory.java 2009-05-21 22:21:55 UTC (rev 335)
@@ -1,172 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.infinispan.marshall.jboss;
-
-import net.jcip.annotations.Immutable;
-import org.infinispan.CacheException;
-import org.infinispan.atomic.AtomicHashMap;
-import org.infinispan.commands.LockControlCommand;
-import org.infinispan.commands.control.StateTransferControlCommand;
-import org.infinispan.commands.read.GetKeyValueCommand;
-import org.infinispan.commands.remote.ClusteredGetCommand;
-import org.infinispan.commands.remote.MultipleRpcCommand;
-import org.infinispan.commands.remote.SingleRpcCommand;
-import org.infinispan.commands.tx.CommitCommand;
-import org.infinispan.commands.tx.PrepareCommand;
-import org.infinispan.commands.tx.RollbackCommand;
-import org.infinispan.commands.write.ClearCommand;
-import org.infinispan.commands.write.InvalidateCommand;
-import org.infinispan.commands.write.InvalidateL1Command;
-import org.infinispan.commands.write.PutKeyValueCommand;
-import org.infinispan.commands.write.PutMapCommand;
-import org.infinispan.commands.write.RemoveCommand;
-import org.infinispan.commands.write.ReplaceCommand;
-import org.infinispan.container.entries.ImmortalCacheEntry;
-import org.infinispan.container.entries.ImmortalCacheValue;
-import org.infinispan.container.entries.MortalCacheEntry;
-import org.infinispan.container.entries.MortalCacheValue;
-import org.infinispan.container.entries.TransientCacheEntry;
-import org.infinispan.container.entries.TransientCacheValue;
-import org.infinispan.container.entries.TransientMortalCacheEntry;
-import org.infinispan.container.entries.TransientMortalCacheValue;
-import org.infinispan.loaders.bucket.Bucket;
-import org.infinispan.marshall.MarshalledValue;
-import org.infinispan.marshall.jboss.externalizers.*;
-import org.infinispan.remoting.responses.ExceptionResponse;
-import org.infinispan.remoting.responses.ExtendedResponse;
-import org.infinispan.remoting.responses.SuccessfulResponse;
-import org.infinispan.remoting.transport.Transport;
-import org.infinispan.remoting.transport.jgroups.JGroupsAddress;
-import org.infinispan.transaction.xa.GlobalTransaction;
-import org.infinispan.util.FastCopyHashMap;
-import org.infinispan.util.Util;
-import org.jboss.marshalling.ClassExternalizerFactory;
-import org.jboss.marshalling.Externalizer;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.WeakHashMap;
-
-/**
- * CustomExternalizerFactory.
- *
- * @author Galder Zamarreño
- * @since 4.0
- * @deprecated No longer in use. A purely ObjectTable based solution is now in use.
- */
- at Immutable
- at Deprecated
-public class ExternalizerClassFactory implements ClassExternalizerFactory {
- private static final Map<String, String> EXTERNALIZERS = new HashMap<String, String>();
-
-// static {
-// EXTERNALIZERS.put(GlobalTransaction.class.getName(), GlobalTransactionExternalizer.class.getName());
-// EXTERNALIZERS.put(JGroupsAddress.class.getName(), JGroupsAddressExternalizer.class.getName());
-// EXTERNALIZERS.put(ArrayList.class.getName(), ArrayListExternalizer.class.getName());
-// EXTERNALIZERS.put(LinkedList.class.getName(), LinkedListExternalizer.class.getName());
-// EXTERNALIZERS.put(HashMap.class.getName(), MapExternalizer.class.getName());
-// EXTERNALIZERS.put(TreeMap.class.getName(), MapExternalizer.class.getName());
-// EXTERNALIZERS.put(HashSet.class.getName(), SetExternalizer.class.getName());
-// EXTERNALIZERS.put(TreeSet.class.getName(), SetExternalizer.class.getName());
-// EXTERNALIZERS.put("org.infinispan.util.Immutables$ImmutableMapWrapper", ImmutableMapExternalizer.class.getName());
-// EXTERNALIZERS.put(MarshalledValue.class.getName(), MarshalledValueExternalizer.class.getName());
-// EXTERNALIZERS.put(FastCopyHashMap.class.getName(), MapExternalizer.class.getName());
-// EXTERNALIZERS.put("java.util.Collections$SingletonList", SingletonListExternalizer.class.getName());
-// EXTERNALIZERS.put("org.infinispan.transaction.TransactionLog$LogEntry", TransactionLogExternalizer.class.getName());
-// EXTERNALIZERS.put(ExtendedResponse.class.getName(), ExtendedResponseExternalizer.class.getName());
-// EXTERNALIZERS.put(SuccessfulResponse.class.getName(), SuccessfulResponseExternalizer.class.getName());
-// EXTERNALIZERS.put(ExceptionResponse.class.getName(), ExceptionResponseExternalizer.class.getName());
-// EXTERNALIZERS.put(AtomicHashMap.class.getName(), DeltaAwareExternalizer.class.getName());
-//
-// EXTERNALIZERS.put(StateTransferControlCommand.class.getName(), StateTransferControlCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(ClusteredGetCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(MultipleRpcCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(SingleRpcCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(GetKeyValueCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(PutKeyValueCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(RemoveCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(InvalidateCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(ReplaceCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(ClearCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(PutMapCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(PrepareCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(CommitCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(RollbackCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(InvalidateL1Command.class.getName(), ReplicableCommandExternalizer.class.getName());
-// EXTERNALIZERS.put(LockControlCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//
-// EXTERNALIZERS.put(ImmortalCacheEntry.class.getName(), ImmortalCacheEntryExternalizer.class.getName());
-// EXTERNALIZERS.put(MortalCacheEntry.class.getName(), MortalCacheEntryExternalizer.class.getName());
-// EXTERNALIZERS.put(TransientCacheEntry.class.getName(), TransientCacheEntryExternalizer.class.getName());
-// EXTERNALIZERS.put(TransientMortalCacheEntry.class.getName(), TransientMortalCacheEntryExternalizer.class.getName());
-// EXTERNALIZERS.put(ImmortalCacheValue.class.getName(), ImmortalCacheValueExternalizer.class.getName());
-// EXTERNALIZERS.put(MortalCacheValue.class.getName(), MortalCacheValueExternalizer.class.getName());
-// EXTERNALIZERS.put(TransientCacheValue.class.getName(), TransientCacheValueExternalizer.class.getName());
-// EXTERNALIZERS.put(TransientMortalCacheValue.class.getName(), TransientMortalCacheValueExternalizer.class.getName());
-//
-// EXTERNALIZERS.put(Bucket.class.getName(), BucketExternalizer.class.getName());
-// }
-//
-// private final Map<Class<?>, Externalizer> externalizers = new WeakHashMap<Class<?>, Externalizer>();
-// private final Transport transport;
-// private final CustomObjectTable objectTable;
-//
-// public ExternalizerClassFactory(Transport transport, CustomObjectTable objectTable) {
-// this.transport = transport;
-// this.objectTable = objectTable;
-// }
-//
-// public void init() {
-// try {
-// for (Map.Entry<String, String> entry : EXTERNALIZERS.entrySet()) {
-// Class typeClazz = Util.loadClass(entry.getKey());
-// Externalizer ext = (Externalizer) Util.getInstance(entry.getValue());
-// if (ext instanceof StateTransferControlCommandExternalizer) {
-// ((StateTransferControlCommandExternalizer) ext).init(transport);
-// }
-// externalizers.put(typeClazz, ext);
-// objectTable.add(ext);
-// }
-// } catch (IOException e) {
-// throw new CacheException("Unable to open load magicnumbers.properties", e);
-// } catch (ClassNotFoundException e) {
-// throw new CacheException("Unable to load one of the classes defined in the magicnumbers.properties", e);
-// } catch (Exception e) {
-// throw new CacheException("Unable to instantiate Externalizer class", e);
-// }
-// }
-
-// public void stop() {
-// externalizers.clear();
-// }
-
- public Externalizer getExternalizer(Class<?> clazz) {
-// return externalizers.get(clazz);
- return null;
- }
-}
Modified: trunk/core/src/main/java/org/infinispan/marshall/jboss/JBossMarshaller.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/JBossMarshaller.java 2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/JBossMarshaller.java 2009-05-21 22:21:55 UTC (rev 335)
@@ -60,7 +60,7 @@
private ClassLoader defaultClassLoader;
private MarshallingConfiguration configuration;
private MarshallerFactory factory;
- private CustomObjectTable objectTable;
+ private ConstantObjectTable objectTable;
@Inject
public void init(ClassLoader defaultCl, Transport transport) {
@@ -177,8 +177,8 @@
return in.readObject();
}
- private CustomObjectTable createCustomObjectTable(Transport transport) {
- CustomObjectTable objectTable = new CustomObjectTable(transport);
+ private ConstantObjectTable createCustomObjectTable(Transport transport) {
+ ConstantObjectTable objectTable = new ConstantObjectTable(transport);
objectTable.init();
return objectTable;
}
Deleted: trunk/core/src/main/java/org/infinispan/marshall/jboss/MagicNumberClassTable.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/MagicNumberClassTable.java 2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/MagicNumberClassTable.java 2009-05-21 22:21:55 UTC (rev 335)
@@ -1,129 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.infinispan.marshall.jboss;
-
-import net.jcip.annotations.Immutable;
-import org.infinispan.CacheException;
-import org.infinispan.commands.LockControlCommand;
-import org.infinispan.commands.read.GetKeyValueCommand;
-import org.infinispan.commands.remote.ClusteredGetCommand;
-import org.infinispan.commands.remote.MultipleRpcCommand;
-import org.infinispan.commands.remote.SingleRpcCommand;
-import org.infinispan.commands.tx.CommitCommand;
-import org.infinispan.commands.tx.PrepareCommand;
-import org.infinispan.commands.tx.RollbackCommand;
-import org.infinispan.commands.write.ClearCommand;
-import org.infinispan.commands.write.InvalidateCommand;
-import org.infinispan.commands.write.InvalidateL1Command;
-import org.infinispan.commands.write.PutKeyValueCommand;
-import org.infinispan.commands.write.PutMapCommand;
-import org.infinispan.commands.write.RemoveCommand;
-import org.infinispan.commands.write.ReplaceCommand;
-import org.infinispan.util.FastCopyHashMap;
-import org.infinispan.util.Util;
-import org.jboss.marshalling.Marshaller;
-import org.jboss.marshalling.Unmarshaller;
-import org.jboss.marshalling.util.IdentityIntMap;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-/**
- * MagicNumberClassTable.
- *
- * @author Galder Zamarreño
- * @since 4.0
- */
- at Immutable
-public class MagicNumberClassTable implements ClassExternalizer {
- private static final List<String> MAGIC_NUMBERS = new ArrayList<String>();
-
- static {
- MAGIC_NUMBERS.add(HashMap.class.getName());
- MAGIC_NUMBERS.add(TreeMap.class.getName());
- MAGIC_NUMBERS.add(FastCopyHashMap.class.getName());
-
- MAGIC_NUMBERS.add(HashSet.class.getName());
- MAGIC_NUMBERS.add(TreeSet.class.getName());
-
- MAGIC_NUMBERS.add(ClusteredGetCommand.class.getName());
- MAGIC_NUMBERS.add(MultipleRpcCommand.class.getName());
- MAGIC_NUMBERS.add(SingleRpcCommand.class.getName());
- MAGIC_NUMBERS.add(GetKeyValueCommand.class.getName());
- MAGIC_NUMBERS.add(PutKeyValueCommand.class.getName());
- MAGIC_NUMBERS.add(RemoveCommand.class.getName());
- MAGIC_NUMBERS.add(InvalidateCommand.class.getName());
- MAGIC_NUMBERS.add(ReplaceCommand.class.getName());
- MAGIC_NUMBERS.add(ClearCommand.class.getName());
- MAGIC_NUMBERS.add(PutMapCommand.class.getName());
- MAGIC_NUMBERS.add(PrepareCommand.class.getName());
- MAGIC_NUMBERS.add(CommitCommand.class.getName());
- MAGIC_NUMBERS.add(RollbackCommand.class.getName());
- MAGIC_NUMBERS.add(InvalidateL1Command.class.getName());
- MAGIC_NUMBERS.add(LockControlCommand.class.getName());
- }
-
- /** Class to int mapping providing magic number to be written. Do not use
- * this map for storing user classes. For these, please use weak key based
- * maps, i.e WeakHashMap */
- private final IdentityIntMap<Class<?>> numbers = new IdentityIntMap<Class<?>>();
- /** Contains list of class objects written. When writing, index of each
- * class object object, or magic number, is written, and when reading, index
- * is used to find the instance in this list.*/
- private final List<Class<?>> classes = new ArrayList<Class<?>>();
- private byte index;
-
- public MagicNumberClassTable() {
- try {
- for (String entry : MAGIC_NUMBERS) {
- Class clazz = Util.loadClass(entry);
- numbers.put(clazz, index++);
- classes.add(clazz);
- }
- } catch (ClassNotFoundException e) {
- throw new CacheException("Unable to load one of the classes defined in the magicnumbers.properties", e);
- } catch (Exception e) {
- throw new CacheException("Unable to instantiate Externalizer class", e);
- }
- }
-
- public void stop() {
- classes.clear();
- numbers.clear();
- }
-
- public void writeClass(Marshaller marshaller, Class<?> clazz) throws IOException {
- int number = numbers.get(clazz, -1);
- marshaller.writeByte(number);
- }
-
- public Class<?> readClass(Unmarshaller unmarshaller) throws IOException {
- int magicNumber = unmarshaller.readUnsignedByte();
- return classes.get(magicNumber);
- }
-
-}
Copied: trunk/core/src/main/java/org/infinispan/marshall/jboss/NumberClassExternalizer.java (from rev 334, trunk/core/src/main/java/org/infinispan/marshall/jboss/MagicNumberClassTable.java)
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/NumberClassExternalizer.java (rev 0)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/NumberClassExternalizer.java 2009-05-21 22:21:55 UTC (rev 335)
@@ -0,0 +1,129 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.infinispan.marshall.jboss;
+
+import net.jcip.annotations.Immutable;
+import org.infinispan.CacheException;
+import org.infinispan.commands.LockControlCommand;
+import org.infinispan.commands.read.GetKeyValueCommand;
+import org.infinispan.commands.remote.ClusteredGetCommand;
+import org.infinispan.commands.remote.MultipleRpcCommand;
+import org.infinispan.commands.remote.SingleRpcCommand;
+import org.infinispan.commands.tx.CommitCommand;
+import org.infinispan.commands.tx.PrepareCommand;
+import org.infinispan.commands.tx.RollbackCommand;
+import org.infinispan.commands.write.ClearCommand;
+import org.infinispan.commands.write.InvalidateCommand;
+import org.infinispan.commands.write.InvalidateL1Command;
+import org.infinispan.commands.write.PutKeyValueCommand;
+import org.infinispan.commands.write.PutMapCommand;
+import org.infinispan.commands.write.RemoveCommand;
+import org.infinispan.commands.write.ReplaceCommand;
+import org.infinispan.util.FastCopyHashMap;
+import org.infinispan.util.Util;
+import org.jboss.marshalling.Marshaller;
+import org.jboss.marshalling.Unmarshaller;
+import org.jboss.marshalling.util.IdentityIntMap;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+/**
+ * MagicNumberClassTable.
+ *
+ * @author Galder Zamarreño
+ * @since 4.0
+ */
+ at Immutable
+public class NumberClassExternalizer implements ClassExternalizer {
+ private static final List<String> MAGIC_NUMBERS = new ArrayList<String>();
+
+ static {
+ MAGIC_NUMBERS.add(HashMap.class.getName());
+ MAGIC_NUMBERS.add(TreeMap.class.getName());
+ MAGIC_NUMBERS.add(FastCopyHashMap.class.getName());
+
+ MAGIC_NUMBERS.add(HashSet.class.getName());
+ MAGIC_NUMBERS.add(TreeSet.class.getName());
+
+ MAGIC_NUMBERS.add(ClusteredGetCommand.class.getName());
+ MAGIC_NUMBERS.add(MultipleRpcCommand.class.getName());
+ MAGIC_NUMBERS.add(SingleRpcCommand.class.getName());
+ MAGIC_NUMBERS.add(GetKeyValueCommand.class.getName());
+ MAGIC_NUMBERS.add(PutKeyValueCommand.class.getName());
+ MAGIC_NUMBERS.add(RemoveCommand.class.getName());
+ MAGIC_NUMBERS.add(InvalidateCommand.class.getName());
+ MAGIC_NUMBERS.add(ReplaceCommand.class.getName());
+ MAGIC_NUMBERS.add(ClearCommand.class.getName());
+ MAGIC_NUMBERS.add(PutMapCommand.class.getName());
+ MAGIC_NUMBERS.add(PrepareCommand.class.getName());
+ MAGIC_NUMBERS.add(CommitCommand.class.getName());
+ MAGIC_NUMBERS.add(RollbackCommand.class.getName());
+ MAGIC_NUMBERS.add(InvalidateL1Command.class.getName());
+ MAGIC_NUMBERS.add(LockControlCommand.class.getName());
+ }
+
+ /** Class to int mapping providing magic number to be written. Do not use
+ * this map for storing user classes. For these, please use weak key based
+ * maps, i.e WeakHashMap */
+ private final IdentityIntMap<Class<?>> numbers = new IdentityIntMap<Class<?>>();
+ /** Contains list of class objects written. When writing, index of each
+ * class object object, or magic number, is written, and when reading, index
+ * is used to find the instance in this list.*/
+ private final List<Class<?>> classes = new ArrayList<Class<?>>();
+ private byte index;
+
+ public NumberClassExternalizer() {
+ try {
+ for (String entry : MAGIC_NUMBERS) {
+ Class clazz = Util.loadClass(entry);
+ numbers.put(clazz, index++);
+ classes.add(clazz);
+ }
+ } catch (ClassNotFoundException e) {
+ throw new CacheException("Unable to load one of the classes defined in the magicnumbers.properties", e);
+ } catch (Exception e) {
+ throw new CacheException("Unable to instantiate Externalizer class", e);
+ }
+ }
+
+ public void stop() {
+ classes.clear();
+ numbers.clear();
+ }
+
+ public void writeClass(Marshaller marshaller, Class<?> clazz) throws IOException {
+ int number = numbers.get(clazz, -1);
+ marshaller.writeByte(number);
+ }
+
+ public Class<?> readClass(Unmarshaller unmarshaller) throws IOException {
+ int magicNumber = unmarshaller.readUnsignedByte();
+ return classes.get(magicNumber);
+ }
+
+}
Deleted: trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/InternalCachedEntryExternalizer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/InternalCachedEntryExternalizer.java 2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/InternalCachedEntryExternalizer.java 2009-05-21 22:21:55 UTC (rev 335)
@@ -1,88 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.infinispan.marshall.jboss.externalizers;
-
-import net.jcip.annotations.Immutable;
-import org.infinispan.container.entries.InternalCacheEntry;
-import org.infinispan.container.entries.InternalEntryFactory;
-import org.infinispan.marshall.jboss.MarshallUtil;
-import org.jboss.marshalling.Creator;
-import org.jboss.marshalling.Externalizer;
-import org.jboss.marshalling.Marshaller;
-import org.jboss.marshalling.Unmarshaller;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/**
- * InternalCachedEntryExternalizer.
- *
- * @author Galder Zamarreño
- * @since 4.0
- * @deprecated Use individual cached entry externalizers instead
- */
- at Immutable
- at Deprecated
-public class InternalCachedEntryExternalizer implements Externalizer {
-
- /**
- * The serialVersionUID
- */
- private static final long serialVersionUID = -3475239737916428837L;
-
- public void writeExternal(Object subject, ObjectOutput output) throws IOException {
- InternalCacheEntry ice = (InternalCacheEntry) subject;
- output.writeObject(ice.getKey());
- output.writeObject(ice.getValue());
- if (ice.canExpire()) {
- output.writeBoolean(true);
- MarshallUtil.writeUnsignedLong(output, ice.getCreated());
- output.writeLong(ice.getLifespan()); // could be negative so should not use unsigned longs
- MarshallUtil.writeUnsignedLong(output, ice.getLastUsed());
- output.writeLong(ice.getMaxIdle()); // could be negative so should not use unsigned longs
- } else {
- output.writeBoolean(false);
- }
- }
-
- public Object createExternal(Class<?> subjectType, ObjectInput input, Creator defaultCreator)
- throws IOException, ClassNotFoundException {
- Object k = input.readObject();
- Object v = input.readObject();
- boolean canExpire = input.readBoolean();
- if (canExpire) {
- long created = MarshallUtil.readUnsignedLong(input);
- long lifespan = input.readLong(); // could be negative so should not use unsigned longs
- long lastUsed = MarshallUtil.readUnsignedLong(input);
- long maxIdle = input.readLong(); // could be negative so should not use unsigned longs
- return InternalEntryFactory.create(k, v, created, lifespan, lastUsed, maxIdle);
- } else {
- return InternalEntryFactory.create(k, v);
- }
- }
-
- public void readExternal(Object subject, ObjectInput input) throws IOException,
- ClassNotFoundException {
- // No-op
- }
-}
Deleted: trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/RequestIgnoredResponseExternalizer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/RequestIgnoredResponseExternalizer.java 2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/RequestIgnoredResponseExternalizer.java 2009-05-21 22:21:55 UTC (rev 335)
@@ -1,31 +0,0 @@
-package org.infinispan.marshall.jboss.externalizers;
-
-import org.infinispan.remoting.responses.RequestIgnoredResponse;
-import org.jboss.marshalling.Creator;
-import org.jboss.marshalling.Externalizer;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/**
- * Externalizes RequestIgnoredResponses
- *
- * @author Manik Surtani
- * @since 4.0
- * @deprecated Not needed RequestIgnoredResponseExternalizer, it's more
- * performant adding singleton instance to ObjectTable, see
- * RequestIgnoredResponse example in CustomObjectTable
- */
- at Deprecated
-public class RequestIgnoredResponseExternalizer implements Externalizer {
- public void writeExternal(Object o, ObjectOutput objectOutput) throws IOException {
- }
-
- public Object createExternal(Class<?> aClass, ObjectInput objectInput, Creator creator) throws IOException, ClassNotFoundException {
- return RequestIgnoredResponse.INSTANCE;
- }
-
- public void readExternal(Object o, ObjectInput objectInput) throws IOException, ClassNotFoundException {
- }
-}
Deleted: trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/UnsuccessfulResponseExternalizer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/UnsuccessfulResponseExternalizer.java 2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/UnsuccessfulResponseExternalizer.java 2009-05-21 22:21:55 UTC (rev 335)
@@ -1,33 +0,0 @@
-package org.infinispan.marshall.jboss.externalizers;
-
-import org.infinispan.remoting.responses.UnsuccessfulResponse;
-import org.jboss.marshalling.Creator;
-import org.jboss.marshalling.Externalizer;
-import org.jboss.marshalling.Marshaller;
-import org.jboss.marshalling.Unmarshaller;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/**
- * Externalizes an UnsuccessfulResponse
- *
- * @author Manik Surtani
- * @since 4.0
- * @deprecated Not needed UnsuccessfulResponseExternalizer, it's more
- * performant adding singleton instance to ObjectTable, see
- * RequestIgnoredResponse example in CustomObjectTable
- */
- at Deprecated
-public class UnsuccessfulResponseExternalizer implements Externalizer {
- public void writeExternal(Object o, ObjectOutput objectOutput) throws IOException {
- }
-
- public Object createExternal(Class<?> aClass, ObjectInput objectInput, Creator creator) throws IOException, ClassNotFoundException {
- return UnsuccessfulResponse.INSTANCE;
- }
-
- public void readExternal(Object o, ObjectInput objectInput) throws IOException, ClassNotFoundException {
- }
-}
More information about the infinispan-commits
mailing list