<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    gembin

    OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

    HBase, Hadoop, ZooKeeper, Cassandra

    Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

    There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

    About Me

     

    學(xué)習(xí)Tuscany

    安裝Tuscany的Eclipse插件

    1. 首先,啟動Eclipse,并依次點擊菜單:Help -> Software Updates -> Find and Install,選擇“Search for new features to install”,點擊下一步:
    2. 在接下來的對話框中,點擊“New Remote Site…”創(chuàng)建一個新的站點,命名為“Tuscany”,其地址為:http://people.apache.org/~jsdelfino/tuscany/tools/updatesite/
    3. 確認(rèn)選擇了我們剛剛新增的一個遠(yuǎn)程站點,并點擊“Finish”按鈕
    4. 選擇“Apache Tuscany SCA Tools”,并在接下來的窗口一路點擊Next,直到點擊Finish為止,接受該插件的使用協(xié)議(Plugin License)
     
    創(chuàng)建你的第一個集成服務(wù)應(yīng)用程序
    下面的圖就是我們將要創(chuàng)建的應(yīng)用的組件圖

    該應(yīng)用是由四個服務(wù)組成的,這個應(yīng)用是一個在線商店,這里有一個目錄服務(wù),你可以通過它取得項目名單,依靠currencyCode屬性來判斷是以美元還是歐元提供項目價格,目錄服務(wù)本身不去做貨幣換算的工作,相反它引用了一個CurrencyConverter服務(wù)去完成這個工作。接下來,這里還有一個ShoppingCart服務(wù),從目錄選擇了的項目可以被加進(jìn)去(購物車),它是使用REST實現(xiàn)的;Catalog使用的是一個JSONRPC綁定,ShoppingCart呢則是通過ATOM進(jìn)行綁定,最后,就是提供給用戶的、基于瀏覽器的界面服務(wù)的Store組件了,Store服務(wù)組件分別通過JSONRPCATOM綁定使用CatalogShoppingCart服務(wù)。

     

    創(chuàng)建一個Java工程

    這一步你要在Eclipse中建立一個Java工程,點擊工具欄上的New Java Project按鈕 來打開新建工程的對話框,接下來輸入store作為工程名稱,并選擇Create separate

    folders for sources and class files

    點擊下一步按鈕,在接下來的窗口打開Libraries選項卡,點擊Add Library...按鈕以添加Tuscany Libraray到工程中:

    最后,點擊Finish按鈕結(jié)束工程創(chuàng)建。

     

    構(gòu)建服務(wù)

    首先,創(chuàng)建兩個包目錄,以便在接下來的步驟中存放服務(wù)的實現(xiàn)。選擇“store”工程,點擊工具欄上的新建Java包按鈕 啟動創(chuàng)建包對話框。接下來,輸入services作為包名,點擊Finish按鈕關(guān)閉對話框。

     

    重復(fù)剛才的步驟,創(chuàng)建另外一個名為ufservices的包,工程現(xiàn)在看起來應(yīng)該類似這跟樣子:

    記下來,會在services包內(nèi)放入普通的服務(wù),ufservices內(nèi)是界面相關(guān)服務(wù)。

     

    Catalog

    現(xiàn)在,準(zhǔn)備創(chuàng)建Catalog服務(wù)的接口和實現(xiàn)。

    選擇“services”包,接下來在工具欄的下拉菜單中點擊“New Java Class” 按鈕 和“New Java Interface”按鈕 ,在彈出的對話框中以“Catalog”作為接口名,并點擊Finish關(guān)閉對話框,這時在Java編輯器中就會打開新增的Java接口,將下面這段Java接口代碼Copy-Paste到編輯器內(nèi):

     

    package services;
    import org.osoa.sca.annotations.Remotable;
    @Remotable
    public interface Catalog {
        String[] get();
    }

    再次選中“services”包,點擊“New Java Class”按鈕 ,在彈出的對話框中以“CatalogImpl”作為類的名字,將“Catalog”作為該類的實現(xiàn)接口,點擊Finish完成。

    Java編輯器中會打開我們新增的類,將下面的代碼復(fù)制過去:

     

    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 {
        @Property
        
    public String currencyCode = "USD";
        @Reference
        
    public CurrencyConverter currencyConverter;
        
    private List<String> catalog = new ArrayList<String>();
        @Init
        
    public 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.size()];
            catalog.toArray(catalogArray);
            
    return catalogArray;
        }
    }

     

    當(dāng)完成這些步驟以后,store項目看起來會類似這樣:

     

    注意,CatalogImpl上面有一個紅叉,因為它引用了我們還沒由實現(xiàn)的CurrencyConverter接口。
     
    CurrencyConverter

    在這一步,我們將創(chuàng)建CurrencyConverter的接口和實現(xiàn),首先,按照之前的方式建立接口和類文件,并將下面的代碼復(fù)制過去:

     

    package services;
    import org.osoa.sca.annotations.Remotable;
    @Remotable
    public interface CurrencyConverter {
        
    public float getConversion(String fromCurrenycCode,
        String toCurrencyCode, 
    float amount);
        
    public String getCurrencySymbol(String currencyCode);
    }
     
    下面,我們來創(chuàng)建上面這跟接口的實現(xiàn)類CurrencyConverterImpl:
    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 "$";
            
    else
                
    if (currencyCode.equals("EUR"))
                    
    return "?";
            
    return "?";
        }
    }
     
    現(xiàn)在,項目看起來是這樣:
     
    ShoppingCart
    在這里我們要創(chuàng)建ShoppingCart的實現(xiàn)類。
    仍然在services包內(nèi)創(chuàng)建我們的實現(xiàn)類,代碼如下:
    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 works
        private 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();
            
    else
                cart.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);
        }
    }
     
    注意:由于Tuscany的會話支持目前還實現(xiàn),購物籃在這里通過一個hack來實現(xiàn),cart被定義成一個靜態(tài)域。
    目前,項目看起來如下:
     
    Store
    這里將創(chuàng)建一個用戶界面服務(wù),通過瀏覽器為我們創(chuàng)建的其他服務(wù)提供交互的接口和界面。在ufservices內(nèi)新建一個文件store.html,代碼如下:
    <html>
    <head>
    <title>Store</TITLE>

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

    <script language="JavaScript">

        
    //Reference
        catalog = (new JSONRpcClient("../Catalog")).Catalog;
        
    //Reference
        shoppingCart = new AtomClient("../ShoppingCart");


        
    function catalog_getResponse(items) {
            
    var catalog = "";
            
    for (var i=0; i<items.length; i++)
                catalog 
    += '<input name="items" type="checkbox" value="' +
                            items[i] 
    + '">' + items[i]+ ' <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[i].getElementsByTagName("content")[0].firstChild.nodeValue;
                    list 
    += item + ' <br>';
                }
                document.getElementById(
    "shoppingCart").innerHTML = list;
                document.getElementById(
    'total').innerHTML = feed.getElementsByTagName("subtitle")[0].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[i].checked) {
                    
    var entry = '<entry xmlns="http://www.w3.org/2005/Atom"><title>cart-item</title><content type="text">'+items[i].value+'</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" 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(
    '

    posted on 2008-05-07 10:46 gembin 閱讀(1321) 評論(0)  編輯  收藏 所屬分類: SCASOA

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(6)

    隨筆分類(440)

    隨筆檔案(378)

    文章檔案(6)

    新聞檔案(1)

    相冊

    收藏夾(9)

    Adobe

    Android

    AS3

    Blog-Links

    Build

    Design Pattern

    Eclipse

    Favorite Links

    Flickr

    Game Dev

    HBase

    Identity Management

    IT resources

    JEE

    Language

    OpenID

    OSGi

    SOA

    Version Control

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    free counters
    主站蜘蛛池模板: 精品亚洲福利一区二区| 亚洲国产成人AV在线播放 | 日韩中文字幕免费| 国产一区二区三区免费看| 亚洲?v无码国产在丝袜线观看 | 成年性午夜免费视频网站不卡| 毛片a级毛片免费播放100| 国产免费人人看大香伊| 亚洲中文字幕无码中文字在线| 亚洲第一区香蕉_国产a| 亚洲精品国产国语| 免费人成视频在线观看免费| a视频在线观看免费| 五月婷婷综合免费| 国产又大又黑又粗免费视频| 亚洲日韩欧洲无码av夜夜摸| 亚洲日本在线播放| 青青视频免费在线| 久久久精品免费视频| 最新仑乱免费视频| 成人午夜亚洲精品无码网站| 亚洲日产2021三区在线| 欧洲亚洲综合一区二区三区| 免费国产叼嘿视频大全网站| 成人毛片免费视频| 亚洲国产美女精品久久久久∴| 亚洲国产精品人久久电影| 鲁啊鲁在线视频免费播放| 亚欧免费无码aⅴ在线观看| 好男人视频在线观看免费看片| 美腿丝袜亚洲综合| 亚洲人成综合网站7777香蕉| 久久久久久av无码免费看大片 | 蜜臀AV免费一区二区三区| 免费人成激情视频| 亚洲白色白色永久观看| 日韩大片在线永久免费观看网站| 6080午夜一级毛片免费看6080夜福利| 国产免费av片在线播放| 久久久久久久亚洲Av无码 | 在线观看亚洲免费|