`

eclipse stp开发sca

    博客分类:
  • SOA
 
阅读更多

环境

eclipseHelios(3.6)for java ee develope

sca框架 tuscany1.6.2

下载eclipse及tuscany

eclipse地址:http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr2

tuscany1.6.2地址:http://labs.renren.com/apache-mirror//tuscany/java/sca/1.6.2/apache-tuscany-sca-1.6.2.tar.gz

打开eclipse Help---->install new software打开install窗口

点击右侧的Add...按钮弹出Add repository窗口name随意,locationhttp://download.eclipse.org/stp/updates/helios/

完成更新地址添加在下拉列表中查找你增加的更新项选中,稍等就会在列表中出现更新项的所有插件信息,全选,next完成进行安装

安装完成后重启eclipse

进入eclipse在new----->other的wizard中会多出一项SCA包括六项菜单。

开发sca

解压tuscany到系统目录下

 

  1. 在eclipse菜单选择Window > Preference.
  2. 进入首选项Java > Build Path > User Libraries.
  3. 选择new创建新的用户库
  4. 名称为tuscany(可以随意)

单击add jar选择tuscany目录下的lib与module下的所有jar包

 

module下包括不同的目录拷起很麻烦可以用如下命令解决

find ./ -name *.jar -exec cp {} /home/du/book/sca/ \;


应用实例

下图为我们将要创建的sca装配图


RestaurantServiceComponent

接受点菜并且结算订单

MenuServiceComponent

提供不同菜单的详细信息

BillServiceComponent

计算菜单价格

VATServiceComponent

计算增值税

TipServiceComponent

计算小费

创建新的java project名称Restaurant

创建SCA diagram

  1. 右键工程选择New > Other....
  2. 在向导中选择SCA Composite Diagram单击完成


 

现在你的工程目录应该如下

创建Restaurant组件

在该编辑器的右侧为图形面板

首先创建RestaurantServiceComponent,MenuServiceComponent,BillServiceComponent,VatServiceComponent,TipServiceComponent

在组件内创建相关service

  • 服务名 RestaurantService 在RestaurantServiceComponent,
  • 服务名 MenuService MenuServiceComponent,
  • 服务名 BillService 在 BillServiceComponent,
  • 服务名 VatService在VatServiceComponent,
  • 服务名 TipService在TipServiceComponent.
创建引用
  • 引用名menuService 在 RestaurantServiceComponent,
  • 引用名billService 在 RestaurantServiceComponent,
  • 引用名 vatService 在 BillServiceComponent,
  • 引用名tipService 在 BillServiceComponent.
利用wires来连接引用项与被引用项
提升restaurant service
创建一个service名称RestaurantService利用promote将该服务与RestaurantServiceComponent中的RestaurantService连接
完成后应该如下图所示


查看Restaurant.composite文件如下这是根据图形化编辑内容生成的

 


定义接口与实现

创建两包如下图所示


定义服务的接口在restaurant.api包中

Restaurant Service
package restaurant.api;

public interface RestaurantService {
Menu[] getMenus();
double getBill(Menu menu);
}
Menu Service
package restaurant.api;

public interface MenuService {
Menu[] getMenu();
double getPrice(Menu menu);
}
Bill Service
package restaurant.api;

public interface BillService {
double getBill(double menuPrice);
}
Vat Service
package restaurant.api;

public interface VatService {
double getPriceWithVat(double price);
}
Tip Service
package restaurant.api;

public interface TipService {
double getPriceWithTip(double price);
}
Define also the interface of the Menu (Data Transfert Object):


package restaurant.api;

import java.io.Serializable;

public interface Menu extends Serializable {
String printMenu();
}

定义实现在lib包中

Restaurant Service
package restaurant.lib;

import org.osoa.sca.annotations.Reference;
import org.osoa.sca.annotations.Service;

import restaurant.api.BillService;
import restaurant.api.Menu;
import restaurant.api.MenuService;
import restaurant.api.RestaurantService;

@Service(RestaurantService.class)
public class RestaurantServiceImpl implements RestaurantService {

private MenuService menuService;
private BillService billService;

@Reference
public void setMenuService(MenuService menuService) {
this.menuService = menuService;
}

@Reference
public void setBillService(BillService billService) {
this.billService = billService;
}

public double getBill(Menu menu) {
double menuPrice = this.menuService.getPrice(menu);
return this.billService.getBill(menuPrice);
}

public Menu[] getMenus() {
return this.menuService.getMenu();
}
}
Menu Service
package restaurant.lib;

import org.osoa.sca.annotations.Init;
import org.osoa.sca.annotations.Service;

import restaurant.api.Menu;
import restaurant.api.MenuService;

@Service(MenuService.class)
public class MenuServiceImpl implements MenuService {

private Menu[] menus;
private double[] prices;

@Init
public void init() {
this.menus = new Menu[] {
new MenuImpl(0, "Grilled hamburger with French fries" ),
new MenuImpl(1, "Roasted chicken with vegetables"),
new MenuImpl(2, "Duck breast in an orange sauce"),
new MenuImpl(3, "Duck foie gras & mango chutney") };
this.prices = new double[] { 10, 15, 35, 50 };
}

public Menu[] getMenu() {
return this.menus;
}

public double getPrice(Menu menu) {
return this.prices[((MenuImpl) menu).getId()];
}
}
Bill service
package restaurant.lib;

import org.osoa.sca.annotations.Reference;
import org.osoa.sca.annotations.Service;

import restaurant.api.BillService;
import restaurant.api.TipService;
import restaurant.api.VatService;

@Service(BillService.class)
public class BillServiceImpl implements BillService {

private VatService vatService;
private TipService tipService;

@Reference
public void setVatService(VatService vatService) {
this.vatService = vatService;
}

@Reference
public void setTipService(TipService tipService) {
this.tipService = tipService;
}

public double getBill(double menuPrice) {
double pricewithTaxRate =
this.vatService.getPriceWithVat(menuPrice);
double priceWithTipRate =
this.tipService.getPriceWithTip(pricewithTaxRate);
return priceWithTipRate;
}
}
Vat Service
package restaurant.lib;

import org.osoa.sca.annotations.Service;

import restaurant.api.VatService;

@Service(VatService.class)
public class VatServiceImpl implements VatService {

public double vatRate;

public VatServiceImpl(){
this.vatRate=19.6;
}

public double getPriceWithVat(double price) {
return price * this.vatRate/100 + price;
}
}
Tip service
package restaurant.lib;

import org.osoa.sca.annotations.Property;
import org.osoa.sca.annotations.Service;

import restaurant.api.TipService;

@Service(TipService.class)
public class TipServiceImpl implements TipService {

@Property
public double tipRate;

public TipServiceImpl(){
this.tipRate=10;
}

public double getPriceWithTip(double price) {
return price * this.tipRate/100 + price;
}
}
Menu
package restaurant.lib;

import restaurant.api.Menu;

public class MenuImpl implements Menu {

private int id;
private String details;

MenuImpl(int idC, String detailsC) {
this.id = idC;
this.details = detailsC;
}

public String printMenu() {
return this.details;
}

public int getId() {
return this.id;
}
}

将接口与实现与sca的组装图结合

将实现类拖入图形化相对应的组件的service接口


组装完成后如下图所示


测试

package test;

import org.apache.tuscany.sca.host.embedded.SCADomain;

import restaurant.api.Menu;
import restaurant.api.RestaurantService;

public class Client {

public static void main(String[] args) throws Exception {
SCADomain scaDomain = SCADomain.newInstance("Restaurant.composite");
RestaurantService restaurantService = scaDomain.getService(
RestaurantService.class, "RestaurantServiceComponent");
Menu[] menus = restaurantService.getMenus();
System.out.println("--- Menu ---");
for (Menu m : menus) {
System.out.println("- " + m.printMenu());
}
System.out.println();
Menu menu = menus[3];
System.out.println("My choice: " + menu.printMenu());
System.out.println();
double price = restaurantService.getBill(menu);
System.out.println("Price (" + menu.printMenu() + "): " + price);
scaDomain.close();
}
}

运行Client

 


在TipServiceImpl中我们定义了一个tipRate的属性表示小费,可能有些国家没有小费我们可以这样

在TipServiceComponent上加一个property名称为tipRate

右键点击tipRate选择show property view显示属性视图,在value中设置为0


运行如下


js实现服务


删除vatservice上的java实现,增加js实现



js内容

var vatRate=10
function getPriceWithVat(price) {
  return price * vatRate/100 + price;
}

运行如下

 



分享到:
评论

相关推荐

    Eclipse STP开发环境配置及实例

    在“Eclipse STP开发环境配置及实例”中,你将学习如何设置和利用Eclipse STP来开发基于SCA的SOA应用程序,并结合Apache Tuscany进行实际操作。以下是一些关键知识点: 1. **Eclipse STP安装**:首先,你需要下载并...

    eclipse stp实际项目开发

    包含基本环境配置,以及实际项目开发不是 hello word噢,呵, 大家好好学,有问题联系我QQ410990678 13003972419

    SCA Eclipse 插件

    SCA Eclipse插件是专门为开发者提供的一种工具,用于在Eclipse集成开发环境中支持SCA应用的创建、调试和管理。通过这款插件,开发者可以更高效地构建基于服务的系统,利用SCA的优势来实现模块化、松耦合的软件设计。...

    Eclipse 3.4.1 (Ganymede SR1) STP发布包修正

    Eclipse 3.4.1 (Ganymede SR1) 版本后,其SOA/SCA开发工具包STP的发布变为只提供站点更新方式,而不在提供原来的stp-all-in-one打包,但经过实际测试,截至链接: http://download.eclipse.org/stp/downloads/ 到...

    利用STP构建 Web Service(SOA)

    Eclipse STP 插件是 Eclipse 平台上的一款插件,专门用于支持 SOA 开发。通过使用 Eclipse STP,开发人员可以方便地构建、测试和部署基于 SOA 的应用。该插件支持 JAX-WS、JAX-RS、SOAP、RESTful 等多种 Web Service...

    SCA环境配置,安装

    接下来,我们需要安装STP(Software Transactional Processing),这是Eclipse的一个扩展,提供了对SOA开发的支持。在Eclipse中,通过Help菜单选择Install New Software,然后在Work with文本框中输入STP的在线更新...

    SCA/SDO学习资料

    3. **Eclipse开发SCA实例**:提供使用Eclipse IDE进行SCA开发的步骤,包括创建SCA项目、编写组件、配置服务和绑定,以及运行和调试SCA应用程序。 4. **案例研究**:可能包含一些实际的SCA/SDO应用示例,例如如何...

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

    SCA(Sequential Convex Approximation)算法是一种在优化领域中广泛应用的方法,特别是在处理凸优化问题时。凸优化是数学优化的一个分支,它专注于找到在凸函数上的全局最小值,因为这些函数具有良好的性质,比如...

    SCA与SDO的开源与商业产品浅析.doc

    Apache Tuscany和Eclipse STP分别提供了基础的SCA运行时环境和全面的SOA工具平台,而商业产品则在特定领域提供了更完善的解决方案。随着SCA和SDO规范的不断更新,这些产品也在逐步发展和完善,以满足日益复杂的SOA...

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

    * 支持多种开发环境,包括 Eclipse、Visual Studio 等 * 提供了详细的扫描报告,帮助用户快速定位和修复安全漏洞 * 提供了插件机制,允许用户扩展其功能 安装说明 安装 Fortify SCA 需要以下文件: * Fortify SCA...

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

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

    SCA开发:开发示例SCA应用程序

    本文将说明开发和部署SCA应用程序的主要概念。我们将说明如何创建组件实现来提供远程服务、本地服务、配置属性和服务引用以及如何创建组件、入口点、外边服务和模块。示例应用程序:InnovaSolutions开发我们将详细...

    Fortify SCA用户手册

    3. **集成开发环境(IDE)支持**:与多种IDE无缝集成,如Eclipse、Visual Studio,便于开发者在编写代码的同时进行安全检查。 4. **自动化报告与跟踪**:生成详尽的分析报告,包括问题详情、修复建议,并可跟踪问题...

    SOA之SCA导航-Apache Tuscany篇

    集成开发环境(IDE)如Eclipse提供了更直观的开发体验,通过安装Tuscany插件,可以在Eclipse中直接创建和管理SCA应用。 2.2. 创建你的服务业务逻辑 在Eclipse中创建一个新的Java Project,编写服务的业务逻辑代码。...

    软件通信体系结构规范 SCA 4.1.rar_SCA 4_SCA 4.1_dance5xi_软件开发规范

    软件无线电体系结构规范。软件无线电开发设计者必备的资料!

    IBM SCA设计工具

    **IBM SCA设计工具**是面向服务架构(Service-Oriented Architecture, SOA)系统开发的重要组成部分,尤其在实现复杂企业级应用集成时扮演着关键角色。SOA是一种设计原则,它强调将业务功能作为独立的服务,这些服务...

Global site tag (gtag.js) - Google Analytics