Search in sources :

Example 1 with SerializationOptimizer

use of org.apache.dubbo.common.serialize.support.SerializationOptimizer in project dubbo by alibaba.

the class DubboProtocol method optimizeSerialization.

private void optimizeSerialization(URL url) throws RpcException {
    String className = url.getParameter(OPTIMIZER_KEY, "");
    if (StringUtils.isEmpty(className) || optimizers.contains(className)) {
        return;
    }
    logger.info("Optimizing the serialization process for Kryo, FST, etc...");
    try {
        Class clazz = Thread.currentThread().getContextClassLoader().loadClass(className);
        if (!SerializationOptimizer.class.isAssignableFrom(clazz)) {
            throw new RpcException("The serialization optimizer " + className + " isn't an instance of " + SerializationOptimizer.class.getName());
        }
        SerializationOptimizer optimizer = (SerializationOptimizer) clazz.newInstance();
        if (optimizer.getSerializableClasses() == null) {
            return;
        }
        for (Class c : optimizer.getSerializableClasses()) {
            SerializableClassRegistry.registerClass(c);
        }
        optimizers.add(className);
    } catch (ClassNotFoundException e) {
        throw new RpcException("Cannot find the serialization optimizer class: " + className, e);
    } catch (InstantiationException | IllegalAccessException e) {
        throw new RpcException("Cannot instantiate the serialization optimizer class: " + className, e);
    }
}
Also used : RpcException(org.apache.dubbo.rpc.RpcException) SerializationOptimizer(org.apache.dubbo.common.serialize.support.SerializationOptimizer)

Aggregations

SerializationOptimizer (org.apache.dubbo.common.serialize.support.SerializationOptimizer)1 RpcException (org.apache.dubbo.rpc.RpcException)1