우리의 application에서 clustering을 소개할 때, key와 value에 대한 serializable에 대한 필요성에 초점을 맞췄다. 그러나 Infinispan에서는 표준 Java Serialization을 사용하지 않는다. 훨씬 더 높은 performance library인 Jboss Marshalling을 사용한다. 일반적으로 여러분의 entity에 java.io.Serializable을 구현하기 위해서 아무것도 할 필요가 없다. Jboss Marshalling은 여러분을 위해서 모든 것이 고려되어 있다. 그러나 프로젝트의 lifetime 동안 변경되는 entry에 대해서 backward / forward 호환성을 지원하기 위한 예제를 위해 경우에 따라 serialization format에 대해서 모든 제어를 수행하기를 원하는 경우가 있을 수 있다.
이런 경우에는 custom Externalizer를 제공해야 한다. Externalizer는 stream을 통해 여러분의 entity를 어떻게 읽고 쓰는지를 아는 단순한 class이다. 우리의 LocationWeather class를 위해서 간단한 externalizer를 만들어 보자.
public static class LWExternalizer implements Externalizer<LocationWeather> {
@Override
public void writeObject(ObjectOutput output, LocationWeather object) throws IOException {
output.writeFloat(object.temperature);
output.writeUTF(object.conditions);
output.writeUTF(object.country);
}
@Override
public LocationWeather readObject(ObjectInput input) throws IOException, ClassNotFoundException {
float temperature = input.readFloat();
String conditions = input.readUTF();
String country = input.readUTF();
return new LocationWeather(temperature, conditions, country);
}
}
또한 externalizer가 그것을 사용하도록 선언하기 위해서 우리 entity에 특별한 annotation을 추가해야 한다.
@SerializeWith(LocationWeather.LWExternalizer.class)
public class LocationWeather implements Serializable {
우리가 특별히 어떤 것을 한 것은 아니기 때문에 application을 실행해보면 다른 차이점을 볼 수 없다. 그러나, 이제 여러분은 엔진룸 (under the hood)에서 발생한 것에 대한 더 좋은 아이디어를 가지게 되었다.
git checkout -f step-9
mvn clean package exec:exec # from terminal 1
mvn exec:exec # from terminal 2
이제 우리는 좀 더 흥미로운 어떤 것과 씨름할 준비가 되었다. 우리는 단지 데이터를 저장하고 조회하는 것 대신에 data를 가지고 어떤 것을 수행하는데 infinispan을 사용해볼 것이다.
댓글을 달아 주세요
댓글 RSS 주소 : http://www.yongbi.net/rss/comment/676