ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SOA开发

SOA开发

原创 Linux操作系统 作者:zengcr 时间:2010-12-21 17:29:28 0 删除 编辑
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4

SOA服务又一个服务域名和一个服务名全局唯一标识,在调用SOA服务时,系统根据服务域名和服务名找到相应的SOA服务,进行调用,再将调用结果返回

1.新建一个服务类(如ServiceDemo),同时让该服务类实现ServiceListener接口,实现其包含的四个方法:

public boolean doProcess(Object EventInfo, Object signature,Object who,int certificate){}

public int getCertificateID(String MsgSignature) {}

public int getQos(String MsgSignature) {}

public int init(String ServiceChannel, String[] ServiceLists) {}

ServiceListener接口是SOA服务的统一接口,制定了服务的规范

 

2.创建一个服务名称的字符串数组,数组中的各个元素即为服务的名称,一个服务类可以包含多个具体的服务,形如:

String [] services ={

"serviceExample1",

" serviceExample2"

};

3.创建一个无参数的构造方法,内容为调用ServiceChannel的静态registerListener方法,完成的功能即为对服务进行ESB的注册,形如:

public ServiceDemo() {

ServiceChannel.registerListener("DEMO", this, services);

}  

该方法第一个参数为服务的目录名(一个服务类对应一个服务目录),第二个参数为当前对象,第三个为服务名称数组,即为将之前创建的服务名称放置到DEMO服务目录名下,同时将他们注册到ESB中。




4.在实现的四个方法中,doProcess()方法是核心的服务处理方法,是服务调用的入口方法,在这里填写服务的业务逻辑,使用的具体形式如:

public boolean doProcess(Object EventInfo, Object signature,Object who,int certificate){

if(((String)MsgSignature).equals("serviceExample1")){

//当调用serviceExample1 服务时,则以此为入口,执行以下程序

DataWindow params = (DataWindow) EventInfo;

// EventInfo为参数容器,强制转换为DataWindow,获取调用的相关参数

 

//如果是后台调用服务,则可以在params中直接通过参数名称取得参数值

String  userName  =  (String) params.getAttribute("userName ");

/*如果是前台调用服务,则前台所传参数会被统一放入到params中名称为PostData的参数中,所以要取得参数,需要先解析出PostData参数,具体方法如下*/

DataWindow PostData = (DataWindow)params.getAttribute("PostData");

String  userName  =  (String) PostData.getAttribute("userName ");

 

// userName为调用时的传入参数,平台会自动将其转入DataWindow容器中

…………….

//在此完成业务逻辑程序

params.putAttribute("Result", "this just a simple example!");

//将服务的执行结果放置到DataWindow的“Result”中进行返回

}

}

其余的三个方法负责进行身份认证、服务质量等,可暂不使用,至此一个完整的服务定义已经完成,完整的服务类程序可参照如下:

package com.demo;

 

import com.dc.soa.MService.ServiceChannel;

import com.dc.soa.MService.ServiceListener;

import com.dc.soa.util.DataWindow;

/**

 * 示例服务类

 * @author dream

 * @version 1.0

 */

public class ServiceDemo implements ServiceListener{

         String[] services = [

         “服务名称1”,

         “服务名称2”

];

        

         public ServiceDemo() {

                   ServiceChannel.registerListener("DEMO", this, services);

         }

 

         public boolean doProcess(Object EventInfo, Object signature, Object who, int certificate) {

                   //serviceExample1对应的服务实现

                   if (((String) signature).equals("serviceExample1")) {

                            DataWindow params = (DataWindow) EventInfo;

                            String userName = (String) params.getAttribute("userName");

                            //......

                            params.putAttribute("Result","this just a simple example!");

                   }

                   //serviceExample2对应的服务实现

                   if (((String) signature).equals("serviceExample2")) {

                            //......

                   }

                   return false;

         }

         public int getCertificateID(String MsgSignature) {

                   return 0;

         }

         public int getQos(String MsgSignature) {

                   return 0;

         }

         public int init(String ServiceChannel, String[] ServiceLists) {

                   return 0;

         }

}

5.服务配置

         在完成了服务的定义之后,需要对服务进行相应的配置:

在源文件src根目录下创建plugin_services.properties属性文件,将所有的服务类以插件的形式注入,服务器启动时会自动加载这些服务类所包含的服务,形如:

Block1= com.demo. ServiceDemo

Block2=……(对应的其他服务类)

注:属性名称不可重复,属性值对应的是服务类的路径

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24944228/viewspace-682287/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-12-21

  • 博文量
    2
  • 访问量
    1398