6.3.2. The Externalizable API Configuration Example

To configure JBoss Data Grid's Externalizable API:
  • Provide an externalizer implementation for the type of object to be marshalled/unmarshalled.
  • Annotate the marshalled type class using {@link SerializeWith} to indicate the externalizer class.
For example:
import org.infinispan.marshall.Externalizer;
import org.infinispan.marshall.SerializeWith;
 
@SerializeWith(Person.PersonExternalizer.class)
public class Person {
 
   final String name;
   final int age;
 
   public Person(String name, int age) {
      this.name = name;
      this.age = age;
   }
 
   public static class PersonExternalizer implements Externalizer<Person> {
      @Override
      public void writeObject(ObjectOutput output, Person person)
            throws IOException {
         output.writeObject(person.name);
         output.writeInt(person.age);
      }
 
      @Override
      public Person readObject(ObjectInput input)
            throws IOException, ClassNotFoundException {
         return new Person((String) input.readObject(), input.readInt());
      }
   }
}



There are several disadvantages to configuring Externalizers in this manner:
  • The payload size generated using this method can be inefficient due to constraints within the model.
  • An Externalizer can be required for a class for which the source code is not available, or the source code cannot be modified.
  • The use of annotations can limit framework developers or service providers attempting to abstract lower level details, such as marshalling layer.