package com.hazelcast.examples.jcache.client;
import com.hazelcast.examples.AbstractApp;
import com.hazelcast.nio.serialization.Portable;
import com.hazelcast.nio.serialization.PortableFactory;
import com.hazelcast.nio.serialization.PortableReader;
import com.hazelcast.nio.serialization.PortableWriter;
import javax.cache.Cache;
import javax.cache.CacheManager;
import javax.cache.configuration.MutableConfiguration;
import java.io.IOException;
public class PortableDomainObjectExample extends AbstractApp {
private static final String KEY = "foo";
private void runApp() {
ClusterGroup server = startServer();
clientSetup();
CacheManager cacheManager = initCacheManager(uri1);
Cache<String, DomainObject> cache = getCache(cacheManager);
DomainObject originalObject = new DomainObject("foo", 0);
cache.put(KEY, originalObject);
DomainObject objectFromCache = cache.get(KEY);
System.out.println(originalObject.equals(objectFromCache));
cleanUp(server, cacheManager);
}
private void cleanUp(ClusterGroup server, CacheManager cacheManager1) {
cacheManager1.close();
server.shutdown();
}
private Cache<String, DomainObject> getCache(CacheManager cacheManager1) {
MutableConfiguration<String, DomainObject> config = new MutableConfiguration<String, DomainObject>();
config.setStoreByValue(true)
.setTypes(String.class, DomainObject.class)
.setStatisticsEnabled(false);
return cacheManager1.createCache("cache", config);
}
private ClusterGroup startServer() {
ClusterGroup server = new ClusterGroup();
server.init();
return server;
}
public static void main(String[] args) {
new PortableDomainObjectExample().runApp();
}
private static final class DomainObject implements Portable {
private String name;
private long id;
DomainObject(String name, long id) {
this.name = name;
this.id = id;
}
private DomainObject() {
// used by DomainObjectPortableFactory only
}
@Override
public int getFactoryId() {
return DomainObjectPortableFactory.FACTORY_ID;
}
@Override
public int getClassId() {
return DomainObjectPortableFactory.DOMAIN_CLASS_ID;
}
@Override
public void writePortable(PortableWriter portableWriter) throws IOException {
System.out.println("Writing portable");
portableWriter.writeUTF("name", name);
portableWriter.writeLong("id", id);
}
@Override
public void readPortable(PortableReader portableReader) throws IOException {
System.out.println("Reading portable");
name = portableReader.readUTF("name");
id = portableReader.readLong("id");
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
DomainObject that = (DomainObject) o;
if (id != that.id) {
return false;
}
return name != null ? name.equals(that.name) : that.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (int) (id ^ (id >>> 32));
return result;
}
}
public static class DomainObjectPortableFactory implements PortableFactory {
static final int DOMAIN_CLASS_ID = 1;
static final int FACTORY_ID = 1;
@Override
public Portable create(int i) {
switch (i) {
case DOMAIN_CLASS_ID:
return new DomainObject();
default:
throw new IllegalArgumentException("Factory " + getClass().getName() + " doesn't know objectId " + i);
}
}
}
}