原生的bubbo在发布hessian和webservice时使用了嵌入jetty的方式开启了两个端口。 而考虑到我们实际的情况,需要使用weblogic发布,并且是使用同一个端口对外提供服务。 所以我们要扩展dubbo使其支持在同一端口同时支持两种协议。
为了实现这个目标,作出了如下修改:
1, 增加新的ServletHttpBinder 。
WebServiceDispatcherServlet WebServiceServletHttpBinder WebServiceServletHttpServer
2, 修改文件
/dubbo-remoting-http/src/main/resources/META-INF/dubbo/internal/com.alibaba.dubbo.remoting.http.HttpBinder,增加如下内容:
webserviceservlet=com.alibaba.dubbo.remoting.http.servlet.WebServiceServletHttpBinder
3, com.alibaba.dubbo.rpc.protocol.webservice.WebServiceProtocol.WebServiceHandler.handle方法修改的内如如下:
if (servletController == null) {
HttpServlet httpServlet = DispatcherServlet.getInstance()==null?WebServiceDispatcherServlet.getInstance():DispatcherServlet.getInstance();
4,spring中的配置类似如下:
<dubbo:protocol name="webservice" port="8080" server="webserviceservlet" contextpath="ServletBrige/service" />
5,web.xml增加如下内容:
<servlet>
<servlet-name>dubbowebservice</servlet-name> <servlet-class>com.alibaba.dubbo.remoting.http.servlet.WebServiceDispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dubbowebservice</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
源码已提交到: https://github.com/codingboyli/dubbo