![JAR search and dependency download from the Maven repository](/logo.png)
com.github.ltsopensource.remoting.serialize.AdaptiveSerializable Maven / Gradle / Ivy
package com.github.ltsopensource.remoting.serialize;
import com.github.ltsopensource.core.constant.Constants;
import com.github.ltsopensource.core.logger.Logger;
import com.github.ltsopensource.core.logger.LoggerFactory;
import com.github.ltsopensource.core.spi.ServiceLoader;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @author Robert HG ([email protected]) on 11/6/15.
*/
public class AdaptiveSerializable implements RemotingSerializable {
private final static Logger LOGGER = LoggerFactory.getLogger(RemotingSerializable.class);
private static volatile String defaultSerializable;
private static final Map
ID_SERIALIZABLE_MAP = new HashMap();
static {
Set names = ServiceLoader.getServiceProviders(RemotingSerializable.class);
for (String name : names) {
if (!Constants.ADAPTIVE.equalsIgnoreCase(name)) {
RemotingSerializable serializable = ServiceLoader.load(RemotingSerializable.class, name);
ID_SERIALIZABLE_MAP.put(serializable.getId(), serializable);
}
}
}
public static RemotingSerializable getSerializableById(int id) {
return ID_SERIALIZABLE_MAP.get(id);
}
public static void setDefaultSerializable(String defaultSerializable) {
AdaptiveSerializable.defaultSerializable = defaultSerializable;
LOGGER.info("Using defaultSerializable [{}]", defaultSerializable);
}
private RemotingSerializable getRemotingSerializable() {
RemotingSerializable remotingSerializable;
String serializable = defaultSerializable; // copy reference
if (serializable != null) {
remotingSerializable = ServiceLoader.load(RemotingSerializable.class, serializable);
} else {
remotingSerializable = ServiceLoader.loadDefault(RemotingSerializable.class);
}
return remotingSerializable;
}
@Override
public int getId() {
return getRemotingSerializable().getId();
}
@Override
public byte[] serialize(Object obj) throws Exception {
return getRemotingSerializable().serialize(obj);
}
@Override
public T deserialize(byte[] data, Class clazz) throws Exception {
return getRemotingSerializable().deserialize(data, clazz);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy