CXF的大体原理

CXF是Apache的顶级项目,也是目前Java社区中用来实现WebService流行的一个开源框架(尤其是收编了xfire后)。基于CXF可以非常简单地以WebService的方式来实现Java甚至是跨语言的远程调用,CXF的工作原理如图1.4所示:

(点击查看大图)图1.4  CXF工作原理

CXF对于WebService的服务器端并没做多少封装,它仍然采用目前Java SE本身的WebService方式,只是提供了一个JaxWsServerFactoryBean类,从而可以在WebService被调用时增加一些拦截器的处理。客户端方面CXF则增加了封装,以便能够直接以接口的方式来调用远程的WebService,简化了调用WebService的复杂性,CXF提供的类为JaxWsProxyFactoryBean,通过此类将WebService的接口类以及WebService的地址放入,即可获取对应接口的代理类了,基于CXF实现示例中的服务器端代码如下:

接口类:

 
 
  1. @WebService
  2. public interface Business {
  3. public String echo(String message);
  4. }

业务实现类:

 
 
  1. @WebService(serviceName="BusinessService", endpointInterface="book.chapter1.cxf.Business")
  2. public class BusinessImpl implements Business {
  3. public String echo(String message) {
  4. if("quit".equalsIgnoreCase(message.toString())){
  5. System.out.println("Server will be shutdown!");
  6. System.exit(0);
  7. }
  8. System.out.println("Message from client: "+message);
  9. return "Server response: "+message;
  10. }
  11. }

调用CXF类完成WebService的发布:

 
 
  1. public static void main(String[] args) throws Exception{
  2. Business service=new BusinessImpl();
  3. JaxWsServerFactoryBean svrFactory=new JaxWsServerFactoryBean();
  4. svrFactory.setServiceClass(Business.class);
  5. svrFactory.setAddress("http://localhost:9527/business");
  6. svrFactory.setServiceBean(service);
  7. svrFactory.create();
  8. }

客户端由于CXF提供了良好的封装,调用WebService就比直接用Java的方式简单多了,关键代码如下:

 
 
  1. JaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean();
  2. factory.setServiceClass(Business.class);
  3. factory.setAddress("http://localhost:9527/business");
  4. Business business=(Business)factory.create();

类似CXF这样的WebService框架在开源界中还有不少,例如Axis。这些开源WebService框架除了对Java WebService的使用方式进行封装,提升了易用性外,还增加了多种协议来调用WebService,例如TCP/IP和JMS等。

以上的章节讲解了Java中实现系统间通信的相关技术、基本原理及使用方法。由此也可看出,构建分布式的Java应用比构建集中式的复杂不少,要掌握的知识点多了很多。本章并未面面俱到地介绍Java中可用来实现系统间通信的技术。例如JMS、EJB等,这些技术通常是基于以上所描述的原理进一步扩展,以提升对于不同场景的需求满足度及易用性。在实际使用中不用拘泥于这些现有技术,可以选择已有原理来自行构建更为适合需求的框架,例如可以基于RMI原理来构建更为轻量级的远程调用框架。

在大型的应用中,分布式的概念不仅仅是上面的跨JVM或跨机器的系统间通信,还会涵盖如集群、负载均衡、分布式缓存、分布式文件系统等多方面的内容。这些将在后续的章节中进一步讲解,接下来先看看一个大型的分布式Java应用会是多大的规模,将面对哪些方面的挑战。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值