3 Kasım 2022 Perşembe

HazelcastAPI StreamSerializer Arayüzü - Custom Serialization

Giriş
Şu satırı dahil ederiz
import com.hazelcast.nio.serialization.StreamSerializer;
Kalıtım şöyle
Serializer
  StreamSerializer
    CompactStreamSerializer
    PortableSerializer

Bazı sınıflar için hazır StreamSerializer'lar var. Bunlar şöyle
StreamSerializer
  AbstractCollectionStreamSerializer
    ArrayBlockingQueueStreamSerializer
    ArrayDequeStreamSerializer
    ArrayListStreamSerializer
    ConcurrentSkipListSetStreamSerializer
    CopyOnWriteArrayListStreamSerializer
    CopyOnWriteArraySetStreamSerializer
    DelayQueueStreamSerializer
    HashSetStreamSerializer
    LinkedBlockingQueueStreamSerializer
    LinkedHashSetStreamSerializer
    LinkedListStreamSerializer
    LinkedTransferQueueStreamSerializer
    PriorityBlockingQueueStreamSerializer
    PriorityQueueStreamSerializer
    SynchronousQueueStreamSerializer
    TreeSetStreamSerializer

ObjectDataOutput arayüzünü gerçekleştiren sınıflardan birisi ObjectDataOutputStream

ObjectDataOutputStream sınıfı kendi içinde java.io.DataOutputStream sınıfını kullanıyor. Dolayısıyla StreamSerializer kullanmak ne avantaj getiriyor anlamadım.

Örnek
Şöyle yaparız
import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import com.hazelcast.nio.serialization.StreamSerializer;

class CarStreamSerializer implements StreamSerializer<Car> {

  @Override
  public void write(ObjectDataOutput out, Car car) throws IOException {
    out.writeUTF(car.getName());
    out.writeUTF(car.getNumber());
  }

  @Override
  public Car read(ObjectDataInput in) throws IOException {
    return Car.builder()
        .name(in.readUTF())
        .number(in.readUTF())
        .build();
  }

  @Override
  public int getTypeId() {
    return 1;
  }
}
Bu serializer'ı Hazelcast'e göstermek için şöyle yaparızsetImplementation() ve setTypeClass() çağrıları yapılmalıdır
public Config createConfig() {
  Config config = new Config();
  ...
  config.getSerializationConfig()
    .addSerializerConfig(serializerConfig());
  return config;
}

SerializerConfig serializerConfig() {
   return new SerializerConfig()
     .setImplementation(new CarSerializer())
     .setTypeClass(Car.class);
}
Örnek
Elimizde şöyle bir kod olsun
import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import com.hazelcast.nio.serialization.StreamSerializer;

public class StudentSerializer implements StreamSerializer<Student> {

  @Override
  public void write(ObjectDataOutput out, Student object) 
  throws IOException {
    out.writeString(object.getName());
    out.writeLong(object.getPhoneNumber());
    out.writeString(object.getAddress());
    out.writeString(object.getSubject());
 }

 @Override
 public Student read(ObjectDataInput in) 
 throws IOException {
   return Student.builder()
    .name(in.readString())
    .phoneNumber(in.readLong())
    .address(in.readString())
    .subject(in.readString())
    .build();
 }

  @Override
  public int getTypeId() {
    return 1;
  }
}
Örnek
Şöyle yaparız. Burada hem member hem de client başlatılırken  StudentSerializer nesnesinin nasıl konfigürasyona dahil edileceği gösteriliyor. 
public Config createConfig() {
  Config config = new Config();
  config.addMapConfig(mapConfig());
  config.getSerializationConfig()
    .addSerializerConfig(serializerConfig());
  return config;
 }

 private ClientConfig creatClientConfig() {
  ClientConfig clientConfig = new ClientConfig();
  clientConfig.getSerializationConfig()
    .addSerializerConfig(serializerConfig());
  return clientConfig;
 }

private SerializerConfig serializerConfig() {
  return new SerializerConfig()
    .setImplementation(new StudentSerializer())
    .setTypeClass(Student.class);
}



Hiç yorum yok:

Yorum Gönder

THIRD-PARTY.txt Dosyası

Kullanılan harici kütüphanelerin sürümleri bu dosyada Dosyanın yolu şöyle hazelcast/licenses/THIRD-PARTY.txt