zoukankan      html  css  js  c++  java
  • SOA(在Tuscany 中开发web service)

    一、相关概念

    1、SOA(service oriented architecture)面向服务的架构。

    2、SCA(service component architecture,服务构建架构)提供了一种编程模型,可以支持基于SOA的应用程序实现。

    3、Tuscany是一个基于SCA的开源框架。

    4、Axis2 是Apache退出的支持web service模型的工具软件,Tuscany Java SCA实际也是使用Axis2来将构件对外发布为web service的。

    二、开发过程

    1、设计思想

    2、实现服务端的具体服务

    MyServiceInterface.java

    public interface MyServiceInterface{
                public String function();
    }

    MyServiceImp.java

    3、编写服务端配置文件

    myService.composite
    <?xml version="1.0" encoding="UTF-8"?>
    <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
        targetNamespace="http://myService"
        name="myService">  
    <!--service标签用于配置SCA服务--> <service name="Hello" promote="myServiceComponent"> <!--name属性指出服务的名称,promote指出服务要提升哪个构件--> <binding.ws uri="http://127.0.0.1:8084/myService"/> <!-- <bindling.ws>标签用于将服务绑定为web service。uri给出绑定后的web service访问URI --> </service>

    <!--配置构件--> <component name="myServiceComponent"> <implementation.java class="com.MyServiceImp"/> </component> </composite>

    4、启动服务端程序

    StartWebService.java

    import java.io.IOException;
    
    import org.apache.tuscany.sca.host.embedded.SCADomain;
    
    public class StartWebService 
    {
        public static void main(String[] args) 
        {
            SCADomain scaDomain = SCADomain.newInstance("com/myService.composite");//加载组合构件文件
            try
            {
                System.out.println("SOA服务启动完毕...");
                System.in.read();
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
            scaDomain.close();
        }
    }

    5、编写客户端程序

    //必需的包
    import javax.xml.namespace.QName;
    import org.apache.axis2.AxisFault;
    import org.apache.axis2.addressing.EndpointReference;
    import org.apache.axis2.client.Options;
    import org.apache.axis2.rpc.client.RPCServiceClient;
    
    public class MyRPCClient{
          public static void  main(String[] args) throws AxisFault{
                 RPCServiceClient serviceClient =new RPCServiceClient() ;
                 Options options = serviceClient.getOptions();

                   String uri = WebServiceInfoUtil.geturl("http://127.0.0.1:8084/myService");//uri及targetNamespace和服务端的配置一致,地址的最后不能加“/”

                   String targetNamespace = WebServiceInfoUtil.getNamespace("http://myService");

                //设定服务 提供者的地址
                EndpointReference targetEPR = new EndpointReference(uri);
                options.setTo(targetEPR);
                //设定所要调用的服务的操作
                QName opGetSearchKeyword = new QName(targetNamespace,"function");
                //返回类型
                Class[] returnTypes = new Class[] { String[].class};
                //设定调用的方法的参数值(服务端程序所需要的参数值)
                Object[] opGetSearchInfoServiceArgs = new Object[]{args1};
                //得到调用的结果,假设所调用的方法返回是string[]类型
                            //两种方法
                            //方法1、
                String[] response = (String[])serviceClient.invokeBlocking(opGetSearchKeyword,
                        opGetSearchInfoServiceArgs, returnTypes)[0];
                            //方法2、
                            Object[] response = (String[])serviceClient.invokeBlocking(opGetSearchKeyword,
                        opGetSearchInfoServiceArgs, returnTypes);
                            String[] result=(String[]) response[0];
                ......//对得到的结果进行操作
          }
    
    }

     参考资料:《SOA实践者说:分布式环境下的系统集成 》 邓子云

  • 相关阅读:
    数据库无限分级(分类表)
    从SQLserver中导出表数据到Access
    C# 对JS解析AJX请求JSON并绑定到html页面的一些心得
    高效的SQLSERVER分页查询(转载)
    Entity Framework自用的DataBase基类
    简单SVN使用方法
    CMD终端关于pip报错,scrapy报错的一种处理方法
    [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作
    Primer C++第五版 读书笔记(一)
    分享一个编程学习网站:https://github.com/justjavac/free-programming-books-zh_CN
  • 原文地址:https://www.cnblogs.com/vitosun/p/3757765.html
Copyright © 2011-2022 走看看