mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
@@ -0,0 +1,87 @@
|
||||
package com.alibaba.otter.canal.client.adapter;
|
||||
|
||||
import com.alibaba.otter.canal.client.adapter.support.Dml;
|
||||
import com.alibaba.otter.canal.client.adapter.support.EtlResult;
|
||||
import com.alibaba.otter.canal.client.adapter.support.OuterAdapterConfig;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
public class ProxyOuterAdapter implements OuterAdapter {
|
||||
|
||||
private OuterAdapter outerAdapter;
|
||||
|
||||
public ProxyOuterAdapter(OuterAdapter outerAdapter) {
|
||||
this.outerAdapter = outerAdapter;
|
||||
}
|
||||
|
||||
private ClassLoader changeCL() {
|
||||
ClassLoader cl = Thread.currentThread().getContextClassLoader();
|
||||
Thread.currentThread().setContextClassLoader(outerAdapter.getClass().getClassLoader());
|
||||
return cl;
|
||||
}
|
||||
|
||||
private void revertCL(ClassLoader cl) {
|
||||
Thread.currentThread().setContextClassLoader(cl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(OuterAdapterConfig configuration, Properties envProperties) {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
outerAdapter.init(configuration, envProperties);
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sync(List<Dml> dmls) {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
outerAdapter.sync(dmls);
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
outerAdapter.destroy();
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public EtlResult etl(String task, List<String> params) {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
return OuterAdapter.super.etl(task, params);
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> count(String task) {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
return OuterAdapter.super.count(task);
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDestination(String task) {
|
||||
ClassLoader cl = changeCL();
|
||||
try {
|
||||
return OuterAdapter.super.getDestination(task);
|
||||
} finally {
|
||||
revertCL(cl);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user