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实践者说:分布式环境下的系统集成 》 邓子云

时间: 2024-08-26 01:42:48

SOA(在Tuscany 中开发web service)的相关文章

JAVA开发Web Service几种框架介绍

在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,这是Java6发布所提供的对Web Service服务的一种实现.)前面几项都为开源项目,而其中又以axis2与cxf所最为常用,Axis与XFire已随着技术不断的更替慢慢落幕,而目前也只有axis2和cxf官方有更新,Axis与XFire都已不再更新. 下面就分别介绍下这几个框架之间的区别,以便大家进行更好的选择:

[Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端(续)

前言 本篇是承接上一篇: [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端 在上一篇粗略地介绍了如何使用Top-Down的方式创建一个web service .  但是对于如何部署及调用,以及一些细节的部分基本上没有介绍. 应某些博友的要求, 也适逢自己有空, 接下来就详细介绍一下整个部分如何进行. 环境准备 JDK 肯定要安装了, 这个就不多讲了. 1. eclipse  3.5.2 对eclipse 版本的要求其实不是很严

Web Service学习-CXF开发Web Service实例demo(一)

Web Service是什么? Web Service不是框架.更甚至不是一种技术. 而是一种跨平台,跨语言的规范 Web Service解决什么问题: 为了解决不同平台,不同语言所编写的应用之间怎样调用问题.比如.有一个C语言写的程序.它想去调用java语言写的某个方法. 集中解决:1,远程调用 2.跨平台调用 3,跨语言调用 实际应用: 1.同一个公司的新,旧系统的整合.Linux上的java应用,去调用windows平台的C应用 2,不同公司的业务整合.业务整合就带来不同公司的系统整合.不

使用CXF开发Web Service服务

1.使用CXF开发Web Service服务端 1.1 开发一个Web Service业务接口,该接口要用@WebService修饰 (1)创建一个Java项目MyServer (2)在MyServer项目中创建一个接口HelloWorld package com.xju.ws; import javax.jws.WebService; @WebService public interface HelloWorld { String sayHello(String name); } 1.2 开发

开发Web Service的几种方式

本文作者在学习使用Java开发Web Service(不包括Restful)时,由于不知道Java有这么多框架支持开发Web Service一度陷入迷惘,不知道这些框架各有 什么不同,各有什么优缺点.经过几天的查资料.实验.失败.再查资料.再实验的过程,终于有了一个大概的了解,也把自己的学习成果跟大家分享一下: 用Java开发Web Service一般有三种方式,本文在Idea下分别使用三种方式并结合Spring容器实现了三个Demo,下面为大家一一介绍. 1.Axis.XFire和CXF方式

你会在C#的类库中添加web service引用吗?

本文并不是什么高深的文章,只是VS2008应用中的一小部分,但小部分你不一定会,要不你试试: 本人对于分布式开发应用的并不多,这次正好有一个项目要应用web service,我的开发环境是vs2008,之所以没有选择现在热门的WCF,本人有如下原因: 1:负责开发Web Service的小组对于vs2008应用不多,更不能奢望令人垂涎的WCF.     2:项目开发时间有限,根本不许你去拿项目做实验.     3:项目改动不大,web service足够对付需求.       由于我们的项目是从

Spring学习(七)——开发Web Service的几种方式

本文作者在学习使用Java开发Web Service(不包括Restful)时,由于不知道Java有这么多框架支持开发Web Service一度陷入迷惘,不知道这些框架各有 什么不同,各有什么优缺点.经过几天的查资料.实验.失败.再查资料.再实验的过程,终于有了一个大概的了解,也把自己的学习成果跟大家分享一下: 用Java开发Web Service一般有三种方式,本文在Idea下分别使用三种方式并结合Spring容器实现了三个Demo,下面为大家一一介绍. 1.Axis.XFire和CXF方式

[Axis2与Eclipse整合开发Web Service系列之三] 服务端返回值

前言 在前面的三篇中 [Axis2与Eclipse整合开发Web Service系列之一] 生成Web Service Client(将WSDl 转化成 Java代码) [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端 [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端(续) 介绍了如何使用 axis2 与 eclipse 的开发web Service .在第

使用MyEclipse9.0开发Web Service

早期使用MyEclipse6.0做WEB服务,里面使用的是XFIRE框架搭建服务平台,后来因为XFIRE更名之后不再更新,导致在最新MyEclipse9.0中使用的是JAX搭建服务. 此文档就是教如何快速的使用9.0开发WEB服务. 步骤一:创建Web Service Project 这里我们使用的框架是JAX-WS.他是目前比较流行和成熟的服务框架. 注意,这里虽然我们选择了JAX-WS框架,但是最让人气愤的是MyEclipse9.0跟本不会导入这个JAR包--汗,JDK里又不自带,只有自己导