[infinispan-commits] Infinispan SVN: r336 - 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:34:05 EDT 2009


Author: galder.zamarreno at jboss.com
Date: 2009-05-21 18:34:05 -0400 (Thu, 21 May 2009)
New Revision: 336

Modified:
   trunk/core/src/main/java/org/infinispan/marshall/jboss/Externalizer.java
   trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/MapExternalizer.java
   trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/ReplicableCommandExternalizer.java
   trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/SetExternalizer.java
Log:
[ISPN-59] (Add unit test that verifies number of written bytes) Added instructions on how to add new Externalizers and did minor internal name refactoring.

Modified: trunk/core/src/main/java/org/infinispan/marshall/jboss/Externalizer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/Externalizer.java	2009-05-21 22:21:55 UTC (rev 335)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/Externalizer.java	2009-05-21 22:34:05 UTC (rev 336)
@@ -36,6 +36,22 @@
  * marshalled payload. This is useful in cases where ReadWriter implementations
  * will create, upon read, new instances using reflection.
  * 
+ * To add a new non-user Externalizer, follow these steps:
+ * 
+ * 1. Create an implementation of Externalizer.
+ * 
+ * 2. Add Class to Externalizer mapping to ConstantObjectTable.EXTERNALIZERS
+ * 
+ * 3. (Optional) If Externalizer implementation instantiates instances using reflection, 
+ * like ReplicableCommandExternalizer, you need to do these further steps on top:
+ * 
+ * 3.1. You need to write class information to the stream and read it when unmarshalling
+ * so that this information can be using during reflection. So, Externalizer implementations 
+ * need to implement ClassExternalizer.ClassWritable so that the corresponding ClassExternalizer 
+ * is injected.
+ * 
+ * 3.2 Add Externalizer implementation to the NumberClassExternalizer.MAGIC_NUMBERS list.
+ * 
  * @author Galder Zamarreño
  * @since 4.0
  */

Modified: trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/MapExternalizer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/MapExternalizer.java	2009-05-21 22:21:55 UTC (rev 335)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/MapExternalizer.java	2009-05-21 22:34:05 UTC (rev 336)
@@ -42,15 +42,15 @@
 public class MapExternalizer implements Externalizer, ClassExternalizer.ClassWritable {
    /** The serialVersionUID */
    private static final long serialVersionUID = -532896252671303391L;
-   private ClassExternalizer classRw;
+   private ClassExternalizer classExt;
 
    public void writeObject(Marshaller output, Object subject) throws IOException {
-      classRw.writeClass(output, subject.getClass());
+      classExt.writeClass(output, subject.getClass());
       MarshallUtil.marshallMap((Map) subject, output);
    }
 
    public Object readObject(Unmarshaller input) throws IOException, ClassNotFoundException {
-      Class<?> subjectType = classRw.readClass(input);
+      Class<?> subjectType = classExt.readClass(input);
       Map subject = null;
       try {
          subject = (Map) Util.getInstance(subjectType);
@@ -61,7 +61,7 @@
       return subject;
    }
 
-   public void setClassExternalizer(ClassExternalizer classRw) {
-      this.classRw = classRw;
+   public void setClassExternalizer(ClassExternalizer classExt) {
+      this.classExt = classExt;
    }
 }

Modified: trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/ReplicableCommandExternalizer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/ReplicableCommandExternalizer.java	2009-05-21 22:21:55 UTC (rev 335)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/ReplicableCommandExternalizer.java	2009-05-21 22:34:05 UTC (rev 336)
@@ -40,7 +40,7 @@
 public class ReplicableCommandExternalizer implements Externalizer, ClassExternalizer.ClassWritable {
    /** The serialVersionUID */
    private static final long serialVersionUID = 6915200269446867084L;
-   private ClassExternalizer classRw;
+   private ClassExternalizer classExt;
 
    public void writeObject(Marshaller output, Object subject) throws IOException {
       writeClass(output, subject.getClass());
@@ -68,12 +68,12 @@
    }
    
    protected void writeClass(Marshaller output, Class<?> subjectType) throws IOException {
-      classRw.writeClass(output, subjectType);
+      classExt.writeClass(output, subjectType);
    }
    
    protected Object createExternal(Unmarshaller input) throws IOException, ClassNotFoundException {
       try {
-         Class<?> subjectType = classRw.readClass(input);
+         Class<?> subjectType = classExt.readClass(input);
          ReplicableCommand command = (ReplicableCommand) Util.getInstance(subjectType);
          return command;
       } catch (Exception e) {
@@ -81,7 +81,7 @@
       }
    }
    
-   public void setClassExternalizer(ClassExternalizer classRw) {
-      this.classRw = classRw;
+   public void setClassExternalizer(ClassExternalizer classExt) {
+      this.classExt = classExt;
    }
 }
\ No newline at end of file

Modified: trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/SetExternalizer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/SetExternalizer.java	2009-05-21 22:21:55 UTC (rev 335)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/SetExternalizer.java	2009-05-21 22:34:05 UTC (rev 336)
@@ -44,15 +44,15 @@
 public class SetExternalizer implements Externalizer, ClassExternalizer.ClassWritable {
    /** The serialVersionUID */
    private static final long serialVersionUID = -3147427397000304867L;
-   private ClassExternalizer classRw;
+   private ClassExternalizer classExt;
 
    public void writeObject(Marshaller output, Object subject) throws IOException {
-      classRw.writeClass(output, subject.getClass());
+      classExt.writeClass(output, subject.getClass());
       MarshallUtil.marshallCollection((Collection) subject, output);
    }
 
    public Object readObject(Unmarshaller input) throws IOException, ClassNotFoundException {
-      Class<?> subjectType = classRw.readClass(input);
+      Class<?> subjectType = classExt.readClass(input);
       Set subject = null;
       try {
          subject = (Set) Util.getInstance(subjectType);
@@ -64,8 +64,8 @@
       return subject;
    }
 
-   public void setClassExternalizer(ClassExternalizer classRw) {
-      this.classRw = classRw;
+   public void setClassExternalizer(ClassExternalizer classExt) {
+      this.classExt = classExt;
    }
 
 }
\ No newline at end of file




More information about the infinispan-commits mailing list