add proxy for SPI (#4520)

* 测试类报错

* add proxy for SPI
This commit is contained in:
rewerma
2022-12-06 17:35:30 +08:00
committed by GitHub
parent b937ee613d
commit cd798b71e9
6 changed files with 271 additions and 37 deletions

View File

@@ -0,0 +1,66 @@
package com.alibaba.otter.canal.connector.core.spi;
import com.alibaba.otter.canal.connector.core.config.MQProperties;
import com.alibaba.otter.canal.connector.core.producer.MQDestination;
import com.alibaba.otter.canal.connector.core.util.Callback;
import com.alibaba.otter.canal.protocol.Message;
import java.util.Properties;
public class ProxyCanalMQProducer implements CanalMQProducer {
private CanalMQProducer canalMQProducer;
public ProxyCanalMQProducer(CanalMQProducer canalMQProducer) {
this.canalMQProducer = canalMQProducer;
}
private ClassLoader changeCL() {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(canalMQProducer.getClass().getClassLoader());
return cl;
}
private void revertCL(ClassLoader cl) {
Thread.currentThread().setContextClassLoader(cl);
}
@Override
public void init(Properties properties) {
ClassLoader cl = changeCL();
try {
canalMQProducer.init(properties);
} finally {
revertCL(cl);
}
}
@Override
public MQProperties getMqProperties() {
ClassLoader cl = changeCL();
try {
return canalMQProducer.getMqProperties();
} finally {
revertCL(cl);
}
}
@Override
public void send(MQDestination canalDestination, Message message, Callback callback) {
ClassLoader cl = changeCL();
try {
canalMQProducer.send(canalDestination, message, callback);
} finally {
revertCL(cl);
}
}
@Override
public void stop() {
ClassLoader cl = changeCL();
try {
canalMQProducer.stop();
} finally {
revertCL(cl);
}
}
}

View File

@@ -0,0 +1,86 @@
package com.alibaba.otter.canal.connector.core.spi;
import com.alibaba.otter.canal.connector.core.consumer.CommonMessage;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
public class ProxyCanalMsgConsumer implements CanalMsgConsumer {
private CanalMsgConsumer canalMsgConsumer;
public ProxyCanalMsgConsumer(CanalMsgConsumer canalMsgConsumer) {
this.canalMsgConsumer = canalMsgConsumer;
}
private ClassLoader changeCL() {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(canalMsgConsumer.getClass().getClassLoader());
return cl;
}
private void revertCL(ClassLoader cl) {
Thread.currentThread().setContextClassLoader(cl);
}
@Override
public void init(Properties properties, String topic, String groupId) {
ClassLoader cl = changeCL();
try {
canalMsgConsumer.init(properties, topic, groupId);
} finally {
revertCL(cl);
}
}
@Override
public void connect() {
ClassLoader cl = changeCL();
try {
canalMsgConsumer.connect();
} finally {
revertCL(cl);
}
}
@Override
public List<CommonMessage> getMessage(Long timeout, TimeUnit unit) {
ClassLoader cl = changeCL();
try {
return canalMsgConsumer.getMessage(timeout, unit);
} finally {
revertCL(cl);
}
}
@Override
public void ack() {
ClassLoader cl = changeCL();
try {
canalMsgConsumer.ack();
} finally {
revertCL(cl);
}
}
@Override
public void rollback() {
ClassLoader cl = changeCL();
try {
canalMsgConsumer.rollback();
} finally {
revertCL(cl);
}
}
@Override
public void disconnect() {
ClassLoader cl = changeCL();
try {
canalMsgConsumer.disconnect();
} finally {
revertCL(cl);
}
}
}