`
huangyungang
  • 浏览: 8217 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

SCA(Tascany)环境搭建和使用范例

阅读更多
1. 概述
本文档描述了基于Eclipse3.5和Apache Tascany基础之上的开发环境搭建以及快速入门的使用范例。
文中的内容基本上来源于对网络信息的搜集,大多数内容源自于http://tuscany.apache.org。在编写过程中希望通过更加快捷、更加简便的方式,并部分结合我们的开发现状,使读者能够快速上手。如有问题请联系MSN:huangyungang@hotmail.com,并注明意图。
2. 开发环境
2.1. 环境准备
为了在实践中完成下面文中描述的内容,您需要以下工具:


2.2. 环境搭建
2.2.1. 使用Tuscany Eclipse Plugin
从表1所示的环境中,获取tuscany1.6 Eclipse Plugin,将其放置到Eclipse3.5目录下,如下图所示:


图1-Tuscany Eclipse插件放置到Eclipse3.5目录中
接下来我们通过建立一个Link文件,找Eclipse3.5找到,并加载这个Tuscany插件。
首先,如果您的Eclipse3.5中没有Link这个文件夹,您需要手动建一个。然后在这个文件夹下建立一个名为“com.ruijie.tuscany.eclipse.link”文件(文件名可任意)。如下图所示



图2-使用link文件加载Tuscany Eclipse插件
文件中的内容如下:

path=d:\\eclipse3.5\\tuscany1.6 Eclipse Plugin\\

下面我们来打开Eclipse3.5看看会有什么变化。打开Eclipse3.5的工作区后,在“New Wiazrd”对话框中可以看到如下图所示的Tuscany的插件加载情况。


图3-Tuscany Plugin加载

2.2.2. 使用OSOA工具包
下载如表1中的apache-tuscany-sca-1.6.zip文件,并对其解压。解压后的效果如下图所示:




图-4 解压后的apache-tuscany-sca-1.6.zip
在实际开发过程中我们需要使用lib目录下的jar包,因此在工程中,需要引用lib下的包。(初始环境中加载所有的jar包)。
2.3. 示例程序一
接下来我们开发一个基于Apache Tuscany并成功发布WebService的示例。
2.3.1. 创建工程
首先我们在d:\TuscanyWorkspace\工作区下,创建一个名为Web的工程。并按照如下图的方式加载TuscanyLibrary。


图5 加载Tuscany Library

第2步:我们需要加载OSOA的工具包。找到前面的下载apache-tuscany-sca-1.6.zip的解压文件,并加载所有的.jar文件。


图5-加载OSOA工具包
以上是一个Java Application中对OSOA包的使用。当然对于Java Web Application需要将这些包加到Web Application的lib目录下。
2.3.2. 代码
下面的我们要实现的是基于Apache Tomcat来发布一个tuscany的SCA组件。
程序代码的包结构如下图所示:


图6-示例程序的包结构
定义Service接口
package user.service;

import java.util.List;

import org.osoa.sca.annotations.Remotable;
@Remotable
public interface IUserService {
//if service is distribute,it need to decalre "@Remotable"
List <User>getAll();
}

定义接口实现
package user.service;

import java.util.ArrayList;
import java.util.List;

public class UserServiceImpl implements IUserService{

private static List<User> users = null;
    static {
        users = new ArrayList<User>();
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setId("id" + i);
            user.setName("name" + i);
            user.setPassword("password" + i);
            Address address = new Address();
            address.setStreet("street" + i);
            user.setAddress(address);
            users.add(user);
        }
    }

    public List<User> getAll() {
        return users;
    }
}

User Pojo类代码
package user.service;

public class User {
private String id;
private String name;
private String password;
private Address address;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}


Address POJO类代码
package user.service;

public class Address {
private String street;

public String getStreet() {
return street;
}

public void setStreet(String street) {
this.street = street;
}
}

META-INF/sca-deployables下的default.compostie
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
    xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0" name="test"
    targetNamespace="http://serivce.web.com">
    <component name="UserServiceImpl">
        <implementation.java class="user.service.UserServiceImpl"></implementation.java>
    </component>
    <service name="UserService" promote="UserServiceImpl">
        <interface.java interface="user.service.IUserService" />
        <binding.ws></binding.ws>
    </service>
</composite>



WebContent/META-INF/sca-contribution.xml
<?xml version="1.0" encoding="UTF-8"?>
<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
             
              xmlns:Web="http://serivce.web.com">
<deployable composite="Web:test"/> 
</contribution>

Web.xml中的tuscany过滤器设置
<filter>
<filter-name>tuscany</filter-name>
<filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>tuscany</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

2.3.3. 运行效果
查看http://localhost:8080/Web/UserService?wsdl得到如下画面



图7-发布后的SCA组件
2.4. 示例程序二
下面我们根据tuscany的calculator Sample,来实现从页面前端对SCA组件的引用。本示例基于示例程序一的工程之上建立。新建一个classpath,并建立如同下图的包结构的类代码。



2.4.1. 代码
关键类的代码,如CalculatorService代码如下:
package calculator;
/**
* The Calculator service interface.
*/
public interface CalculatorService {

    double add(double n1, double n2);

    double subtract(double n1, double n2);

    double multiply(double n1, double n2);

    double divide(double n1, double n2);

}

CalculatorServiceImpl.java
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.   
*/
package calculator;

import org.osoa.sca.annotations.Reference;


/**
* An implementation of the Calculator service.
*/
public class CalculatorServiceImpl implements CalculatorService {

    private AddService addService;
    private SubtractService subtractService;
    private MultiplyService multiplyService;
    private DivideService divideService;

    @Reference
    public void setAddService(AddService addService) {
        this.addService = addService;
    }

    @Reference
    public void setSubtractService(SubtractService subtractService) {
        this.subtractService = subtractService;
    }

    @Reference
    public void setDivideService(DivideService divideService) {
        this.divideService = divideService;
    }

    @Reference
    public void setMultiplyService(MultiplyService multiplyService) {
        this.multiplyService = multiplyService;
    }

    public double add(double n1, double n2) {
        return addService.add(n1, n2);
    }

    public double subtract(double n1, double n2) {
        return subtractService.subtract(n1, n2);
    }

    public double multiply(double n1, double n2) {
        return multiplyService.multiply(n1, n2);
    }

    public double divide(double n1, double n2) {
        return divideService.divide(n1, n2);
    }
}

Calculator.composite文件
<?xml version="1.0" encoding="UTF-8"?>

<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
           targetNamespace="http://Web"
           xmlns:sample="http://Web"
           name="Calculator">

    <component name="CalculatorServiceComponent">
<implementation.java class="calculator.CalculatorServiceImpl"/>
        <reference name="addService" target="AddServiceComponent"></reference>
        <reference name="subtractService" target="SubtractServiceComponent"></reference>
        <reference name="multiplyService" target="MultiplyServiceComponent"></reference>
        <reference name="divideService" target="DivideServiceComponent"></reference>
    </component>

    <component name="AddServiceComponent">
        <implementation.java class="calculator.AddServiceImpl"/>
    </component>

    <component name="SubtractServiceComponent">
        <implementation.java class="calculator.SubtractServiceImpl"/>
    </component>

    <component name="MultiplyServiceComponent">
        <implementation.java class="calculator.MultiplyServiceImpl"/>
    </component>

    <component name="DivideServiceComponent">
        <implementation.java class="calculator.DivideServiceImpl"/>
    </component>

</composite>


sca-contribution.xml内容
<?xml version="1.0" encoding="UTF-8"?>
<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
             
              xmlns:Web="http://serivce.web.com">
<deployable composite="Web:test"/> 
<deployable composite="Web:Calculator"/>
</contribution>


Calc.jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://www.osoa.org/sca/sca_jsp.tld" prefix="sca" %>
<sca:reference name="CalculatorServiceComponent" type="calculator.CalculatorService" />
<html>
<head><title>Calculator sample</title></head>
<body>
<table>
    <tr>
        <th>Expression</th><th>Result</th>
    </tr>
    <tr>
        <td>2 + 3</td><td><%= CalculatorServiceComponent.add(2, 3) %></td>
    </tr>
    <tr>
        <td>3 - 2</td><td><%= CalculatorServiceComponent.subtract(3, 2) %></td>
    </tr>
    <tr>
        <td>3 * 2</td><td><%= CalculatorServiceComponent.multiply(3, 2) %></td>
    </tr>
    <tr>
        <td>3 / 2</td><td><%= CalculatorServiceComponent.divide(3, 2) %></td>
    </tr>   
</table>
</body>
</html>

2.4.2. 运行效果


  • 大小: 13.6 KB
  • 大小: 42.8 KB
  • 大小: 32 KB
  • 大小: 20 KB
  • 大小: 32.5 KB
  • 大小: 52 KB
  • 大小: 34.5 KB
  • 大小: 13.1 KB
  • 大小: 67.4 KB
  • 大小: 22.3 KB
  • 大小: 35.4 KB
分享到:
评论
2 楼 zdh 2015-05-26  
楼主,你所说的tuscany1.6 Eclipse Plugin,能否具体说明是哪个插件或者给出下载链接也行呀
1 楼 hamlzf 2011-10-19  
入门文章,可以试试!

相关推荐

    Fortify SCA(SourceCodeAnalysis)安装及使用手册.docx

    本文档提供了 Fortify SCA 的安装和使用指南,旨在帮助用户快速上手使用该工具。 产品特性 Fortify SCA 具有以下特性: * 支持多种编程语言,包括 Java、C/C++、C#、Python 等 * 支持多种操作系统平台,包括 ...

    SCA环境配置,安装

    在本文档中,我们将深入探讨如何配置和安装SCA开发环境,以便进行相关开发工作。 首先,我们需要准备基础环境,即安装Eclipse IDE。Eclipse是广泛使用的开源集成开发环境,对于Java EE开发者来说尤其适用。你可以从...

    sca_SCA凸优化_凸优化SCA_SCA_凸优化_

    SCA(Sequential Convex ...通过深入理解和应用这些知识点,我们可以有效地使用SCA算法解决实际中的凸优化问题,并且根据`xiao_power_beizeng100.m`和`sca.m`的源代码,可以进一步了解和定制算法以适应特定场景的需求。

    SCA_sca算法_SCA_sca程序代码_sca算法代码_

    这里的"SCA_sca算法_SCA_sca程序代码_sca算法代码"标题和描述提示我们,这个压缩包包含的是关于SCA算法的源程序代码,供学习和研究使用。 SCA算法主要分为几个关键步骤: 1. 数据收集:这是侧信道分析的第一步,...

    Fortify SCA 安装使用手册

    以下是对Fortify SCA安装和使用的一些关键点的详细解释。 1. **产品说明** - **特性说明**:Fortify SCA 提供了多种特性,如深度源代码分析、自动漏洞分类、自定义规则、实时扫描、以及与各种开发工具和持续集成/...

    SCA3300.rar

    最后,`SCA3300-D01 3-axis Industrial Accelerometer and Inclinometer.pdf`可能是SCA3300的完整用户手册,包含传感器的所有功能、操作模式、接口协议和故障排除等内容,是用户全面理解和使用SCA3300的重要参考资料...

    SCA介绍及实例

    **SCA(Software Composition Analysis,软件成分分析)**是一种用于识别、管理和缓解开源软件安全风险的技术。...通过深入理解SCA原理和工具的使用,开发者可以更有效地管理开源组件,降低潜在的风险。

    IBM SCA设计工具

    **t4sca_demo.zip**可能包含了一些示例项目和教程,这些可以帮助初学者快速理解SCA组件的工作原理和T4SCA的使用。通过运行和分析这些示例,开发者可以学习如何实际操作工具,实现SCA组件间的通信和协作。 **t4sca_...

    SCA and DEM.zip_DEM模型_sca_dem_各向异性_各向异性SCA_岩石物理

    在地质学和地球物理学领域,SCA(Statistical Continuum Approximation,统计连续体近似)和DEM(Discrete Element Method,离散元方法)是两种广泛使用的数值模拟技术,它们在岩石物理研究中占据着重要的地位。...

    SCA简单本地调用案例

    在本地环境中运行SCA应用,观察服务调用的流程和结果。 通过这个简单的SCA本地调用案例,我们可以深入理解SCA的基本原理和实践方法,这对于构建更复杂的分布式系统有着重要的指导意义。同时,这也是提升软件设计和...

    Fortify_SCA使用手冊

    10. **培训和社区支持**:Fortify SCA拥有丰富的在线资源和用户社区,用户可以通过论坛、文档和培训课程获取更多关于使用和优化该工具的信息。 以上内容是基于"Fortify SCA使用手册"的常见知识点,实际手册中可能会...

    Tuscany SCA in Action

    Apache Tuscany是SCA规范的一个开源实现,提供了强大的工具链和运行时环境,使得开发者能够轻松构建、测试和部署基于SCA的服务组件。 ### 服务组件架构(SCA)简介 SCA定义了一种标准化的方式,用于描述和组合服务...

    SCA/SDO学习资料

    通过这些学习资料,你可以系统地掌握SCA和SDO,从而在SOA环境中更高效地开发和集成服务。记得实践是检验理论的最好方式,尝试自己动手创建一些简单的SCA项目,并运用SDO处理数据,将有助于深化理解并提升技能。

    SOA-SCA-Assemblymodel

    SCA则是在SOA的基础上,进一步细化了服务的组装和部署过程,提供了标准化的组件模型,支持多种编程语言和运行环境的服务组合。 ### SCA Assembly Model SCA Assembly Model是SCA规范的一部分,主要关注服务组件的...

    SCA_matlab_稀疏分量分析_SCA_源码

    在MATLAB环境中,SCA的实现通常涉及到矩阵运算、优化算法和迭代过程。`SCA.m`文件很可能是该SCA算法的核心代码实现。MATLAB作为一款强大的数值计算软件,提供了丰富的数学函数库和便捷的数据操作接口,适合进行这类...

Global site tag (gtag.js) - Google Analytics