[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