科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道谈SOA在实际项目中的运用

谈SOA在实际项目中的运用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

提到SOA(Service-Oriented Architecture) 面向服务架构,大家恐怕都不陌生, 它是一种架构模型,可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。

作者:bluesky35(蓝天) 来源:论坛整理 2007年12月15日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共4页)

 五. 大家都知道,访问服务一般都使用代理模式,即在本地建立代理,然后通过代理访问服务,接收结果.接下来我们建立一个实现以上RMIImpl接口的名为RMIImplProxy的代理,代码如下:

import java.rmi.Naming;
 
publicclass RMIImplProxy implements RMIImpl{
      
       public RmiServiceDTO execute() throws java.rmi.RemoteException{
             
              RmiServiceDTO message = null;
             
           try{
               RMIImpl obj = (RMIImpl)Naming.lookup("/HelloServer");
               message = obj.execute();
 
             }catch(Exception e){
               System.out.println(e.toString());
             }
            
             // 戻る
             return message;
       }
} 

  

  在这个代理中,我们通过Naming寻找网络上的名为HelloServer的服务,找到后我们调用该服务的execute方法取得发返回结果.

  六. 代理的使用方法有很多种,其中最简单的方式是将它直接实例化使用,为了能在多个代理之间进行统一管理,我们选择工厂方式,接下来我们建立一个工厂,通过调用这个工厂,我们可以获得任何一个代理,代码如下:

publicclass ServiceFactory {
 
       privatestaticfinal ServiceFactory instance = new ServiceFactory();
      
       private ServiceFactory() {
              super();
       }
      
       /**
        *このクラスのインスタンスを取得します.
        *@returnこのクラスのインスタンス
        */
       publicstatic ServiceFactory getInstance() {
              returninstance;
       }
      
       publicRMIImpl getGUSO() {
              returnnew RMIImplProxy();
       }
} 

  

  七. 接下来我们调用工厂取得代理对象,通过代理对象可以访问远程服务,本地客户端执行代码如下所示:

import java.rmi.RemoteException;
 
publicclass Client {
 
       publicstaticvoid main(String[] args) {
             
        // Serviceを作成
        ServiceFactory factory = ServiceFactory.getInstance();
       
              try {
                     // Greenサービス実行
                     RmiServiceDTO rmiServiceDTO = factory.getGUSO().execute();
                    
                     System.out.println(rmiServiceDTO.getName());
              } catch (RemoteException e) {
                     e.printStackTrace();
              }
       }
} 

  

  八. 至今为止,客户端的所有代码都已编写完成,接下来我们模拟一个服务器端服务供客户端调用,代码如下:

import java.rmi.*;
import java.rmi.server.*;
 
publicclass HelloServer extends UnicastRemoteObject implements RMIImpl{
 /**
        *
        */
       privatestaticfinallongserialVersionUID = 1L;
 
public HelloServer() throws RemoteException{
    super();
 }
 
 public RmiServiceDTO execute() throws java.rmi.RemoteException{
     
      RmiServiceDTO rmiServiceDTO = new RmiServiceDTO();
     
      rmiServiceDTO.setName("zhaolin");
     
      return rmiServiceDTO;
 }
} 

  

  客户端调用服务,返回一个持有内容为zhaolin的DTO.

  九. 由于服务需要启动才能被调用,所以我们再写一个注册程序注册这个服务以便客户端调用,注册程序代码如下:

import java.rmi.Naming;
 
publicclass RegistIt {
 
       publicstaticvoid main(String[] args) {
           try{
               HelloServer obj = new HelloServer();
               System.out.println("Object is" + obj);
               Naming.rebind("/HelloServer",obj);
               System.out.println("Already Start");
             }catch(Exception e){
               System.out.print(e);
             }
       } 

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章