bluesky35(蓝天)的专栏

我喜欢蓝天,因为它能带给我无边无际的憧憬和幻想.

用户操作
[即时聊天] [发私信] [加为好友]
赵麟ID:bluesky35
20817次访问,排名5722好友1人,关注者7
bluesky35的文章
原创 19 篇
翻译 0 篇
转载 0 篇
评论 29 篇
bluesky35的公告
个人简介
网名:bluesky35(蓝天)
真实姓名:赵麟
性别:男
Q Q:81806701
MSN:bluesky35@hotmail.com
Email:
bluesky35@263.net
最近评论
ibsrvk:wow power leveling
ibsrvk:wow power leveling
netpirate:<![CDATA[ + ? + ]]>
SSS:对我这个门外汉来说是天书~
楼主:用你的例子了,不知道是原创不,挺好。

但是有一个很重要的细节要强调一下:
jbuilder project->project properties->build->Resource
中一定要把 xml 改为copy。
这样才会在编译的时候自动将src文件夹中的xml文件拷贝到classes文件夹里相应的目录下
文章分类
收藏
    相册
    SOA
    钢琴曲
    picture
    桃桃的博客
    萍萍的博客
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 [原创]谈SOA在实际项目中的运用收藏

     | 旧一篇: [原创]Spring--让我们为POJO摇旗呐喊

      大家好,我是bluesky35,在在IBM ISSC工作,最近做的目是SOA,号称是上海前几家,呵呵,有了一些心得,想和大家一起交流分享一下.
    提到SOA(Service-Oriented Architecture) 面向服架构,大家恐怕都不陌生它是一架构模型,可以根据需求通络对松散耦合的粗粒度行分布式部署、合和使用。SOA中最重要的莫于服务层,它可以直接被用,从而有效控制系中与件代理交互的人性。
    好了,SOA的概念网络上有许多,我就不再老生常,接下来大家演示一个SOA的典型用例,我将目中的一些件代抽出,聚合成可使用的sample,简单大家一下.我们要做的是建立一个简单的SOA服务构架,然后从本地访问服务并且从服务中获得基础信息.
    基于其中一些朋友可能是初学,所以给大家演示时我尽量做到傻瓜式,使一点也不懂的朋友也可以跟着例子一步一步走下去,相信这篇文章能给大家带来意外的收获.
    首先,我们用java来做这个例子,请大家先在本地安装以下软件:
    1.     JDK 1.5.0
    2.      Eclipse 3.2.0
     
    让我们开始吧!
    一.   打开eclipse,新建Java Project工程,起名为SOASample,JRE选择1.5,如下图所示:
     
     
     
    二.   既然SOA涉及到本地和服务层之间的交互,那一定需要交互的中间介质,毫无疑问是一个保存数据的对象,做欧美项目的朋友叫做BEAN,做对日项目的朋友叫做DTO,我们创建的DTO包含一个属性name_,让我们按下图建立一个DTO.
     
     
     
    三.   完善DTO的代码(注意:由于需要在网络中进行传输,所以应该进行序列化,即实现Serializable)
     
    import java.io.Serializable;
     
    publicclass RmiServiceDTO implements Serializable{
     
           /**
            *serialVersionUID
            */
           privatestaticfinallongserialVersionUID = 1L;
     
    /**
            *serialVersionUID
            */
           private String _name = null;
          
           /**
            *@return_nameを戻します。
            */
           public String getName() {
                  return_name;
           }
           /**
            *@param_name_nameを設定。
            */
           publicvoid setName(String _name) {
                  this._name = _name;
           }
    }
     
    现在大家的环境应该都与下图一致.
     
     
    四.   由于SOA需要与服务进行交互,所以我们得建立一个基于RMI的远程接口,与前面建立DTO一样,我们建立名为RMIImpl的接口,代码如下:
    publicinterface RMIImpl extends java.rmi.Remote{
           public RmiServiceDTO execute() throws java.rmi.RemoteException;
    }
     
     
    五.   大家都知道,访问服务一般都使用代理模式,即在本地建立代理,然后通过代理访问服务,接收结果.接下来我们建立一个实现以上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;
     }
    }
     
    客户端调用服务,返回一个持有内容为zhaolinDTO.
     
    九.   由于服务需要启动才能被调用,所以我们再写一个注册程序注册这个服务以便客户端调用,注册程序代码如下:
    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);
                 }
           }
     
     
     
    十.   好了,最后要做的就是测试我们之前所写的所有代码,测试这个程序一共有三个步骤.
    1.      启动JAVA的服务注册许可
    2.      注册并启动服务
    3.      调用客户端访问服务取得信息
     
    首先,启动java的服务注册许可,使用命令rmiregistry -J-Djava.security.policy=java.policy启动注册表,如下图所示:
     
     
    一定要注意:请在所有class的根目录下注册,比如我是将所有代码和class放在E:\SOASample目录下,所以我便在E:\SOASample目录下执行以上注册语句.
     
    然后我们注册并启动服务,在eclipse中执行RegistIt.java,结果如下:
     
    最后我们执行Client.java,通过工厂方式实力化代理对象,通过代理对象访问服务并取得数据,最后的执行结果如下: 
     
      整个例子完成了, 有一点需要提一下,在这个例子中,我们是通过模拟的服务返回结果,而在实际应用中,这个服务被单独建立在服务器端,并且服务之间也有通讯,这些服务不一定就是java所写,也可能是使用cobol等语言写的程序,当服务变更,我们只需要调用不同的Proxy即可,而在实际应用中,一个服务就对应一个Proxy,而一个Factory中可以装载所有可供选用的Proxy.

    发表于 @ 2007年12月03日 15:09:00|评论(loading...)|编辑

     | 旧一篇: [原创]Spring--让我们为POJO摇旗呐喊

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © bluesky35