使用Eclipse构建Tuscany实例(2)

前言:

本文接上一篇:使用Eclipse构建Tuscany实例(1),请阅读之前参考。

 

 

商铺服务

在这一步中,你将创建面向用户服务,他可以通过Web浏览器访问,并提供与你创建的其他服务相交互的接口。 

选中"ufservices" 包文件夹,右键点击,在右键菜单中选择New -> File 。在新建文件对话框中输入"store.html"作为文件名,然后点Finish按钮关闭对话框。

文本编辑器将打开一个新的文件编辑窗口,使用下面Html代码覆盖原有代码。 

<head>
<title>Store</title>

<script type="text/javascript" src="store.js"></script>

<script language="JavaScript">

	//@Reference
	var catalog = new tuscany.sca.Reference("catalog");
	
	//@Reference
	var shoppingCart = new tuscany.sca.Reference("shoppingCart");

	//@Reference
	var shoppingTotal = new tuscany.sca.Reference("shoppingTotal");
	
	var catalogItems;

	function catalog_getResponse(items) {
		var catalog = "";
		for (var i=0; i<items.length; i++) {
			var item = items[i].name + ' - ' + items[i].price;
			catalog += '<input name="items" type="checkbox" value="' + 
						item + '">' + item + ' <br>';
		}
		document.getElementById('catalog').innerHTML=catalog;
		catalogItems = items;
	}
	
	function shoppingCart_getResponse(feed) {
		if (feed != null) {
			var entries = feed.getElementsByTagName("entry");              
			var list = "";
			for (var i=0; i<entries.length; i++) {
				var content = entries[i].getElementsByTagName("content")[0];
				var name = content.getElementsByTagName("name")[0].firstChild.nodeValue;
				var price = content.getElementsByTagName("price")[0].firstChild.nodeValue;
				list += name + ' - ' + price + ' <br>';
			}
			document.getElementById("shoppingCart").innerHTML = list;

			if (entries.length != 0) {			
				shoppingTotal.getTotal(shoppingTotal_getTotalResponse);
			}
		}
	}
	
	function shoppingTotal_getTotalResponse(total) {
		document.getElementById('total').innerHTML = total;
	}
	
	function shoppingCart_postResponse(entry) {
		shoppingCart.get("", shoppingCart_getResponse);
	}				

	function addToCart() {
		var items  = document.catalogForm.items;
		var j = 0;
		for (var i=0; i<items.length; i++)
			if (items[i].checked) {
				var entry = '<entry xmlns="http://www.w3.org/2005/Atom"><title>item</title><content type="text/xml">' +
                	'<Item xmlns="http://services/">' +
                	'<name xmlns="">' + catalogItems[i].name + '</name>' + '<price xmlns="">' + catalogItems[i].price + '</price>' +
                 	'</Item>' + '</content></entry>';
				shoppingCart.post(entry, shoppingCart_postResponse);
				items[i].checked = false;
			}
	}
	function checkoutCart() {
		document.getElementById('store').innerHTML='<h2>' +
				'Thanks for Shopping With Us!</h2>'+
				'<h2>Your Order</h2>'+
				'<form name="orderForm">'+
					document.getElementById('shoppingCart').innerHTML+
					'<br>'+
					document.getElementById('total').innerHTML+
					'<br>'+

					'<br>'+
					'<input type="submit" value="Continue Shopping">'+ 
				'</form>';
		shoppingCart.del("", null);
	}
	function deleteCart() {
		shoppingCart.del("", null);
		document.getElementById('shoppingCart').innerHTML = "";
		document.getElementById('total').innerHTML = "";	
	}	

	function init() {
		catalog.get(catalog_getResponse);
		shoppingCart.get("", shoppingCart_getResponse);
	}
	
</script>

</head>

<body οnlοad="init()">
<h1>Store</h1>
  <div id="store">
   	<h2>Catalog</h2>
   	<form name="catalogForm">
		<div id="catalog" ></div>
		<br>
		<input type="button" onClick="addToCart()"  value="Add to Cart">
   	</form>
 
 	<br>
  
   	<h2>Your Shopping Cart</h2>
   	<form name="shoppingCartForm">
		<div id="shoppingCart"></div>
		<br>
		<div id="total"></div>
		<br>		
		<input type="button" onClick="checkoutCart()" value="Checkout"> 
		<input type="button" onClick="deleteCart()" value="Empty">     
	   	<a href="../ShoppingCart/Cart/">(feed)</a>
	</form>    
  </div>
</body>
</html>

完成这些步骤后,"store"工程将看起来如下图所示。

structure

组织服务

 

既然你已经实现了所有必须的服务,那么你可以把他们组织在一起,提供商铺综合服务。结构配置存储在一个后缀为.composite的文件中。

选中"store"工程的"src"文件夹,右键点击,在右键菜单中选择New-> File,在新建文件对话框中输入”store.composite”作为文件名,然后点击Finish 按钮关闭对话框。

文本编辑器将打开一个新的文件编辑窗口来创建结构配置文件,使用下面内容覆盖原有代码。

<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
	xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
	xmlns:s="http://store" 
	targetNamespace="http://store" 
	name="store">
	
	<component name="store">
		<t:implementation.widget location="ufservices/store.html" />
		<service name="Widget">
			<t:binding.http uri="http://localhost:8080/store" />
		</service>
		<reference name="catalog" target="Catalog">
			<t:binding.jsonrpc />
		</reference>
		<reference name="shoppingCart" target="ShoppingCart/Cart">
			<t:binding.atom />
		</reference>
		<reference name="shoppingTotal" target="ShoppingCart/Total">
			<t:binding.jsonrpc />
		</reference>
	</component>

	<component name="Catalog">
		<implementation.java class="services.CatalogImpl" />
		<property name="currencyCode">USD</property>
		<service name="Catalog">
			<t:binding.jsonrpc uri="http://localhost:8080/Catalog"/>
		</service>
		<reference name="currencyConverter" target="CurrencyConverter" />
	</component>

	<component name="ShoppingCart">
		<implementation.java class="services.ShoppingCartImpl" />
		<service name="Cart">
			<t:binding.atom uri="http://localhost:8080/ShoppingCart/Cart" />
		</service>
		<service name="Total">
			<t:binding.jsonrpc uri="http://localhost:8080/Total"/>
		</service>
	</component>

	<component name="CurrencyConverter">
		<implementation.java class="services.CurrencyConverterImpl" />
	</component>
</composite>

 

完成上述步骤后,工程”store”应该看起来如下图所示。

 

structure

 

 

启动服务

在这一步中,你将创建Tuscany运行你建立的综合商铺服务的启动代码。

选中"store"工程,点击工具条上的新建Java源码包按钮new package,启动新建包文件对话框。使用此对话框创建一个新的名为"launch"的包文件夹。

选中”launch”包,点击新建Java类按钮new class。在对话框中输入”Launch”作为类名,在复选框中选择创建main方法,然后点击Finish 按钮,结束对话框。

 

Java编辑器将打开一个新的Java类编辑窗口,使用下面代码覆盖原有代码。

 

package launch;

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

public class Launch {
    public static void main(String[] args) throws Exception {
        System.out.println("Starting ...");
        SCADomain scaDomain = SCADomain.newInstance("store.composite");
        System.out.println("store.composite ready for big business !!!");
        System.in.read();
        System.out.println("Stopping ...");
        scaDomain.close();
        System.out.println();
    }
}

恭喜你完成了你的第一个综合服务程序,现在,是时候让它运行了。

使用服务

 

在这一步,你将运行并使用你创建的商铺综合服务程序。 

首先选中"store"工程的"launch"包中的"Launch"类,右键点击,在右键菜单中选中Run As-> Java application ,Tuscany运行环境将启动并加载商铺综合服务程序到它的运行域中。 

Eclipse控制台将输出如下信息:

 

console information 

 

然后登陆你的浏览器,输入如下网址:

http://localhost:8080/store/store.html

打开综合服务程序的用户交互服务界面。

back

 

brow

既然购物车服务是结合ATOM协议实现,你也可以通过点击样式切换图标atom feed来使用ATOM形式查看销售内容,你得到的ATOM样式:

feed style

 

使用浏览器回退按钮,重新回到商铺页面。

brower interface 

然后,你可以检查并完成你的订单。

 

check order 

恭喜你,你已经使用Tuscany SCA技术实现了一个简单的,灵活的,可重复使用的商铺程序。

 

 

 

 

 

 

 

 

 

 

 

你可以从目录中选中数个商品,并将它们加入购物车。

提示: 当你第一次添加商品的时候,系统会要求你输入用户名和密码。用户名和密码都是"admin"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值