cyckjp 发表于 2013-2-7 15:03:48

Getting started with Tuscany

一:创建project
http://tuscany.apache.org/getting-started-with-tuscany.data/new_java_project_dlg.png
二:创建Catalog service interface
http://tuscany.apache.org/getting-started-with-tuscany.data/new_java_pkg_folder.png
package services;import org.osoa.sca.annotations.Remotable;@Remotablepublic interface Catalog {    String[] get();} 三:实现Catalog
package services;import java.util.ArrayList;import java.util.List;import org.osoa.sca.annotations.Init;import org.osoa.sca.annotations.Property;import org.osoa.sca.annotations.Reference;public class CatalogImpl implements Catalog {@Propertypublic String currencyCode = "USD";@Referencepublic CurrencyConverter currencyConverter;private List<String> catalog = new ArrayList<String>();@Initpublic void init() {String currencySymbol = currencyConverter.getCurrencySymbol(currencyCode);catalog.add("Apple - " + currencySymbol +currencyConverter.getConversion("USD", currencyCode, 2.99f));catalog.add("Orange - " + currencySymbol +currencyConverter.getConversion("USD", currencyCode, 3.55f));catalog.add("Pear - " + currencySymbol +currencyConverter.getConversion("USD", currencyCode, 1.55f));}public String[] get() {String[] catalogArray = new String;catalog.toArray(catalogArray);return catalogArray;}}http://tuscany.apache.org/getting-started-with-tuscany.data/store_project.png 
四:创建CurrencyConverter service interface
package services;import org.osoa.sca.annotations.Remotable;@Remotablepublic interface CurrencyConverter {public float getConversion(String fromCurrenycCode,String toCurrencyCode, float amount);public String getCurrencySymbol(String currencyCode);}五:实现CurrencyConverter
package services;public class CurrencyConverterImpl implements CurrencyConverter {public float getConversion(String fromCurrencyCode,String toCurrencyCode, float amount) {if (toCurrencyCode.equals("USD"))return amount;else if (toCurrencyCode.equals("EUR"))return amount*0.7256f;return 0;}public String getCurrencySymbol(String currencyCode) {if (currencyCode.equals("USD"))return "$";elseif (currencyCode.equals("EUR"))return "€";return "?";}} 
 
http://tuscany.apache.org/getting-started-with-tuscany.data/store_project_1.png
六:创建ShoppingCart
package services;import java.util.Date;import java.util.HashMap;import java.util.Map;import java.util.UUID;import org.apache.tuscany.sca.binding.feed.collection.Collection;import org.apache.tuscany.sca.binding.feed.collection.NotFoundException;import com.sun.syndication.feed.atom.Content;import com.sun.syndication.feed.atom.Entry;import com.sun.syndication.feed.atom.Feed;import com.sun.syndication.feed.atom.Link;public class ShoppingCartImpl implements Collection {// needs to change to instance var once conversation scope worksprivate static Map<String, Entry> cart = new HashMap<String, Entry>();public Feed getFeed() {Feed feed = new Feed();feed.setTitle("shopping cart");Content subtitle = new Content();subtitle.setValue("Total : " + getTotal());feed.setSubtitle(subtitle);feed.getEntries().addAll(cart.values());return feed;}public Entry get(String id) throws NotFoundException {return cart.get(id);}public Entry post(Entry entry) {String id = "cart-" + UUID.randomUUID().toString();entry.setId(id);Link link = new Link();link.setRel("edit");link.setHref("" + id);entry.getOtherLinks().add(link);link = new Link();link.setRel("alternate");link.setHref("" + id);entry.getAlternateLinks().add(link);entry.setCreated(new Date());cart.put(id, entry);return entry;}public void put(String id, Entry entry) throws NotFoundException {entry.setUpdated(new Date());cart.put(id, entry);}public void delete(String id) throws NotFoundException {if (id.equals(""))cart.clear();elsecart.remove(id);} private String getTotal() {float total = 0;String symbol = "";if (!cart.isEmpty()) {Entry entry = cart.values().iterator().next();String item = ((Content)entry.getContents().get(0)).getValue();symbol = item.substring(item.indexOf("-")+2, item.indexOf("-")+3);}for (Entry entry : cart.values()) {String item = ((Content)entry.getContents().get(0)).getValue();total += Float.valueOf(item.substring(item.indexOf("-")+3));}return symbol + String.valueOf(total);}}http://tuscany.apache.org/getting-started-with-tuscany.data/store_project_2.png
七:Store 页面
<html><head><title>Store</TITLE><script type="text/javascript" src="store.js"></script><script language="JavaScript">//@Referencevar catalog = new Reference("catalog");//@Referencevar shoppingCart = new Reference("shoppingCart");function catalog_getResponse(items) {var catalog = "";for (var i=0; i<items.length; i++)catalog += '<input name="items" type="checkbox" value="' + items + '">' + items+ ' <br>';document.getElementById('catalog').innerHTML=catalog;}function shoppingCart_getResponse(feed) {if (feed != null) {var entries = feed.getElementsByTagName("entry");            var list = "";for (var i=0; i<entries.length; i++) {var item = entries.getElementsByTagName("content").firstChild.nodeValue;list += item + ' <br>';}document.getElementById("shoppingCart").innerHTML = list;document.getElementById('total').innerHTML = feed.getElementsByTagName("subtitle").firstChild.nodeValue;}}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.checked) {var entry = '<entry xmlns="http://www.w3.org/2005/Atom"><title>cart-item</title><content type="text">'+items.value+'</content></entry>'shoppingCart.post(entry, shoppingCart_postResponse);items.checked = false;}}function checkoutCart() {document.getElementById('store').innerHTML='<h2>' +'Thanks for Shopping With Us!</h2>'+'<h2>Your Order</h2>'+'<form name="orderForm" action="store.html">'+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 = "";}catalog.get(catalog_getResponse);shoppingCart.get("", shoppingCart_getResponse);</script></head><body><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/">(feed)</a></form>      </div></body></html>http://tuscany.apache.org/getting-started-with-tuscany.data/store_project_3.jpg
八:编写构件Compose Services
<?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"name="store"><component name="store"><t:implementation.widget location="ufservices/store.html"/><service name="Widget"><t:binding.http/></service>                <reference name="catalog" target="Catalog"> <t:binding.jsonrpc/> </reference> <reference name="shoppingCart" target="ShoppingCart"> <t:binding.atom/> </reference></component><component name="Catalog"><implementation.java class="services.CatalogImpl"/><property name="currencyCode">USD</property><service name="Catalog"><t:binding.jsonrpc/></service><reference name="currencyConverter" target="CurrencyConverter"/></component><component name="ShoppingCart"><implementation.java class="services.ShoppingCartImpl"/><service name="Collection"><t:binding.atom/></service></component><component name="CurrencyConverter"><implementation.java class="services.CurrencyConverterImpl"/></component></composite>http://tuscany.apache.org/getting-started-with-tuscany.data/store_project_4.jpg 
九:运行测试Launch Services
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.out.println();System.in.read();scaDomain.close();}}http://tuscany.apache.org/getting-started-with-tuscany.data/store_project_5.jpg 
十:Use Services
运行为java application
打开路径
http://localhost:8080/store/store.html
页: [1]
查看完整版本: Getting started with Tuscany