一、分布式开发:
在现实的开发环境中,可能一个项目会被部署到不同的区域上,例如银行系统。省,城市都有各自的服务器。
所有的服务器都有可能调用一个业务中心,这样如果单独将业务中心抽取出来,做业务的处理过程,只要中心的业务修改了,
那么其他服务器也会产生变化。
现在的分布式开发,更多情况是将业务中心的操作分步处理,给所有的客户端提供支持。
技术的过渡:
-》 -》
EJB技术:
现在不使用这些技术了。
WebService处理技术(WEB服务):现在的WEB服务不再局限于EJB容器,可以直接在服务器进行搭建。
CXF开发框架:简化WebService开发难度。
SOA(面向服务架构):不同的用户都可以通过这个服务器进行远程的操作调用。
不管是EJB、RMI、WebService、SOA这些技术都存在本质的问题:慢。而为了提供性能使用了JSON作为数据的交互方式。
所以JSONP(跨域请求)的应用就越来越多了。后面的发展更多的是对WebService进行封装处理。
二、开发WebService程序
本次操作将基于CXF工具进行WebService程序编写。
如果现在只是进行最为基础的CXF的WebService开发,不需要全部的开发包都拷贝进项目中,只需要拷贝一个核心的包就够了。
范例:定义一个支持Web服务的接口。
WebService的调用一定要以接口为主。
package jcn;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface IEchoService {
public String echo(@WebParam String info);
}
此时接口就变为了WebService服务接口,服务器地接口主要是给客户端看的。
范例:定义实现类
package jcn;
import javax.jws.WebService;
@WebService(endpointInterface="jcn.IEchoService",serviceName="echo")
public class EchoServiceImpl implements IEchoService{
@Override
public String echo(String info) {
return "ECHO:" + info;
}
}
现在的webService是基于CXF的,这个组件最方便的地方在于它可以直接用Application的方式进行,里面自带小的WEB容器。
范例:发布服务
import javax.xml.ws.Endpoint;
public class TestCode {
public static void main(String[] args) {
IEchoService echoService = new EchoServiceImpl();
Endpoint.publish("http://localhost:8888/echourl", echoService);
}
}
如果要想去查看服务信息,则可以通过浏览器打开输入路径。
http://localhost:8888/echourl?wsdl
现在的接口描述语言都是通过XML文件的形式给出来的。
整个webService留给用户开发最麻烦的部分不在于服务器端,而在于客户端,这个时候的开发工具就可以帮助用户很多的忙;
开发工具会自动的生成一系列的辅助调用代码。
三、利用工具创建webservice项目
项目创建完成需要建立具体客户端代码;
现在只是一个标准的webservice操作,不需要IBM的webSphere支持。
之前给出了webservice的描述地址信息。下面需要将信息拷贝过来。
接口路径地址:http://localhost:8888/echourl?wsdl
随后会在com.client中生成许多代码,实际上就是描述客户端的假实现。
编写调用测试:
package com.test;
import com.client.Echo_Service;
import com.client.IEchoService;
public class TestEcho {
public static void main(String[] args) {
Echo_Service service = new Echo_Service();
IEchoService portType = service.getEchoServiceImplPort();
System.out.println(portType.echo("www.baidu.com"));
}
}
现在明明是一个远程的服务器调用操作,但是由于一些代理代码的生成,所以现在客户端的调用就好像是在本地调用的感觉一样。
四、将CXF与spring整合
spring支持CXF的开发整合,如果要将CXF交由spring管理,需要将CXF所有开发拷贝到项目中。
随后添加spring添加支持配置。
编写web.xml文件添加CXF的Servlet配置。
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
编写applicationContext.xml文件:
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<jaxws:endpoint id="echoServiceImpl"/>
现在的项目CXF将交由Spring进行管理,随后将项目发布到Tomcat之中。
分布式开发现在的开发环境之中依然会大量使用,但是不是所有操作都会使用分布式开发,对于高并发量的数据建议使用JSON的形式进行传递,或者利用JSONP进行跨域的访问。
webservice是一种设计的思想,核心就在于业务层的突出。