- 浏览: 8217 次
- 性别:
- 来自: 上海
最新评论
-
zdh:
楼主,你所说的tuscany1.6 Eclipse Plugi ...
SCA(Tascany)环境搭建和使用范例 -
zyp731:
全是代码,没啥内涵~
SCA(Tascany)+Spring+Hibernate开发与使用范例 -
hamlzf:
寻找很久了
SCA(Tascany)+Spring+Hibernate开发与使用范例 -
hamlzf:
入门文章,可以试试!
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. 运行效果
本文档描述了基于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. 运行效果
评论
2 楼
zdh
2015-05-26
楼主,你所说的tuscany1.6 Eclipse Plugin,能否具体说明是哪个插件或者给出下载链接也行呀
1 楼
hamlzf
2011-10-19
入门文章,可以试试!
相关推荐
本文档提供了 Fortify SCA 的安装和使用指南,旨在帮助用户快速上手使用该工具。 产品特性 Fortify SCA 具有以下特性: * 支持多种编程语言,包括 Java、C/C++、C#、Python 等 * 支持多种操作系统平台,包括 ...
在本文档中,我们将深入探讨如何配置和安装SCA开发环境,以便进行相关开发工作。 首先,我们需要准备基础环境,即安装Eclipse IDE。Eclipse是广泛使用的开源集成开发环境,对于Java EE开发者来说尤其适用。你可以从...
SCA(Sequential Convex ...通过深入理解和应用这些知识点,我们可以有效地使用SCA算法解决实际中的凸优化问题,并且根据`xiao_power_beizeng100.m`和`sca.m`的源代码,可以进一步了解和定制算法以适应特定场景的需求。
这里的"SCA_sca算法_SCA_sca程序代码_sca算法代码"标题和描述提示我们,这个压缩包包含的是关于SCA算法的源程序代码,供学习和研究使用。 SCA算法主要分为几个关键步骤: 1. 数据收集:这是侧信道分析的第一步,...
以下是对Fortify SCA安装和使用的一些关键点的详细解释。 1. **产品说明** - **特性说明**:Fortify SCA 提供了多种特性,如深度源代码分析、自动漏洞分类、自定义规则、实时扫描、以及与各种开发工具和持续集成/...
最后,`SCA3300-D01 3-axis Industrial Accelerometer and Inclinometer.pdf`可能是SCA3300的完整用户手册,包含传感器的所有功能、操作模式、接口协议和故障排除等内容,是用户全面理解和使用SCA3300的重要参考资料...
**SCA(Software Composition Analysis,软件成分分析)**是一种用于识别、管理和缓解开源软件安全风险的技术。...通过深入理解SCA原理和工具的使用,开发者可以更有效地管理开源组件,降低潜在的风险。
**t4sca_demo.zip**可能包含了一些示例项目和教程,这些可以帮助初学者快速理解SCA组件的工作原理和T4SCA的使用。通过运行和分析这些示例,开发者可以学习如何实际操作工具,实现SCA组件间的通信和协作。 **t4sca_...
在地质学和地球物理学领域,SCA(Statistical Continuum Approximation,统计连续体近似)和DEM(Discrete Element Method,离散元方法)是两种广泛使用的数值模拟技术,它们在岩石物理研究中占据着重要的地位。...
在本地环境中运行SCA应用,观察服务调用的流程和结果。 通过这个简单的SCA本地调用案例,我们可以深入理解SCA的基本原理和实践方法,这对于构建更复杂的分布式系统有着重要的指导意义。同时,这也是提升软件设计和...
10. **培训和社区支持**:Fortify SCA拥有丰富的在线资源和用户社区,用户可以通过论坛、文档和培训课程获取更多关于使用和优化该工具的信息。 以上内容是基于"Fortify SCA使用手册"的常见知识点,实际手册中可能会...
Apache Tuscany是SCA规范的一个开源实现,提供了强大的工具链和运行时环境,使得开发者能够轻松构建、测试和部署基于SCA的服务组件。 ### 服务组件架构(SCA)简介 SCA定义了一种标准化的方式,用于描述和组合服务...
通过这些学习资料,你可以系统地掌握SCA和SDO,从而在SOA环境中更高效地开发和集成服务。记得实践是检验理论的最好方式,尝试自己动手创建一些简单的SCA项目,并运用SDO处理数据,将有助于深化理解并提升技能。
SCA则是在SOA的基础上,进一步细化了服务的组装和部署过程,提供了标准化的组件模型,支持多种编程语言和运行环境的服务组合。 ### SCA Assembly Model SCA Assembly Model是SCA规范的一部分,主要关注服务组件的...
在MATLAB环境中,SCA的实现通常涉及到矩阵运算、优化算法和迭代过程。`SCA.m`文件很可能是该SCA算法的核心代码实现。MATLAB作为一款强大的数值计算软件,提供了丰富的数学函数库和便捷的数据操作接口,适合进行这类...