提交 64958a25 编写于 作者: C chao.liuc

DUBBO-78 JVM之间共享长连接 HedlerExchangeHandler改回实现ChannelHandlerDelegate接口,并返回传入的Handler,解决问题:

1.ExchangeHandler提供了getExchangeHandler方法,该方法强制对handler进行转型。如果不返回传入的Handler,会导致强制转型失败

2.AbstractPeer中增加getDelegateChannelHandler方法,返回最终的handler,以便上层调用getHandler时,并通过handler直接处理消息时可以不丢失HeaderExchangeHandler的行为。

此处需要在后续考虑架构的调整,当前实现不优雅,


git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@461 1a56cb94-b969-4eaa-88fa-be21384802f2
上级 fcfb71b8
......@@ -28,6 +28,7 @@ import com.alibaba.dubbo.remoting.exchange.ExchangeHandler;
import com.alibaba.dubbo.remoting.exchange.Request;
import com.alibaba.dubbo.remoting.exchange.Response;
import com.alibaba.dubbo.remoting.exchange.support.DefaultFuture;
import com.alibaba.dubbo.remoting.transport.ChannelHandlerDelegate;
/**
* ExchangeReceiver
......@@ -35,8 +36,7 @@ import com.alibaba.dubbo.remoting.exchange.support.DefaultFuture;
* @author william.liangf
* @author chao.liuc
*/
//如果实现implementChannelHandlerDelegate,方法getHandler需要返回this.否则getHandler返回的是ExchangeHandler,将丢失本handler附加的功能.
public class HeaderExchangeHandler implements ChannelHandler {
public class HeaderExchangeHandler implements ChannelHandlerDelegate {
protected static final Logger logger = LoggerFactory.getLogger(HeaderExchangeHandler.class);
......@@ -205,4 +205,12 @@ public class HeaderExchangeHandler implements ChannelHandler {
HeaderExchangeChannel.removeChannelIfDisconnected(channel);
}
}
public ChannelHandler getHandler() {
if (handler instanceof ChannelHandlerDelegate) {
return ((ChannelHandlerDelegate) handler).getHandler();
} else {
return handler;
}
}
}
\ No newline at end of file
......@@ -83,7 +83,23 @@ public abstract class AbstractPeer implements Endpoint, ChannelHandler {
return handler;
}
}
/**
* @return
*/
@Deprecated
public ChannelHandler getHandler() {
return getDelegateHandler();
}
/**
* 返回最终的handler,可能已被wrap,需要区别于getChannelHandler
* @return
*/
public ChannelHandler getDelegateHandler() {
return handler;
}
public boolean isClosed() {
return closed;
}
......@@ -121,9 +137,4 @@ public abstract class AbstractPeer implements Endpoint, ChannelHandler {
}
handler.caught(ch, ex);
}
@Deprecated
public ChannelHandler getHandler() {
return getChannelHandler();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册