隨筆 - 3  文章 - 0  trackbacks - 0
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          搜索

          •  

          積分與排名

          • 積分 - 1580
          • 排名 - 4237

          最新評論

          閱讀排行榜

          評論排行榜

          Globus開源網(wǎng)格基礎平臺簡介
          http://www.media.edu.cn 2007-10-22 作者:
          網(wǎng)格技術出現(xiàn)于20世紀90年代,其核心思想是:“整個因特網(wǎng)就是一臺計算機!”Globus Tookit工具包來源于Globus項目,Globus項目是國際上最有影響力的與網(wǎng)格計算相關的項目之一,是由來自世界各地關注網(wǎng)格技術的研究人員和開發(fā)人員共同努力的成果。

          網(wǎng)格技術出現(xiàn)于20世紀90年代,它的目的是想利用高速互聯(lián)網(wǎng)把分布于不同地理位置的計算機、數(shù)據(jù)庫、存儲器和軟件等資源連成整體,就像一臺超級計算機一樣,為用戶提供一體化信息服務,其核心思想是:“整個因特網(wǎng)就是一臺計算機!”

          由全球網(wǎng)格論壇(GGF)下屬Globus項目組成員聯(lián)合開發(fā)的Globus Toolkit標準工具包,已被公認為當前建立網(wǎng)格系統(tǒng)和開發(fā)網(wǎng)格軟件事實的參考標準。

          最近一兩年,“網(wǎng)格”這個詞持續(xù)升溫。你如果用Google搜索“網(wǎng)格”,可以看到8萬個結果;你會發(fā)現(xiàn)除了美國、歐洲對網(wǎng)格的研究投入了巨資,我們國家也通過“863”、自然科學基金等設立了網(wǎng)格專項,對網(wǎng)格有數(shù)億元的投資;你還可以看到,有關網(wǎng)格的活動高潮迭起。

          所有這些都說明了網(wǎng)格已經(jīng)悄然的走進了千家萬戶,它正被越來越多的人認識和熟悉。在因特網(wǎng)的刺激下,計算機行業(yè)正迎接影響深遠的第三次發(fā)展浪潮。

          Globus Toolkit

          Globus Tookit工具包來源于Globus項目,Globus項目是國際上最有影響力的與網(wǎng)格計算相關的項目之一,是由來自世界各地關注網(wǎng)格技術的研究人員和開發(fā)人員共同努力的成果。Globus Tookit是一個開放源碼的網(wǎng)格的基礎平臺,基于開放結構、開放服務資源和軟件庫,并支持網(wǎng)格和網(wǎng)格應用,目的是為構建網(wǎng)格應用提供中間件服務和程序庫。

          Globus Tookit具有較為統(tǒng)一的國際標準,有利于整合現(xiàn)有資源,也易于維護和升級換代。現(xiàn)在,一些重要的公司,包括IBM和微軟等都公開宣布支持Globus Toolkit。目前大多數(shù)網(wǎng)格項目都是采用基于Globus Tookit所提供的協(xié)議及服務建設的。

           

          Globus現(xiàn)在的發(fā)展勢頭正可謂與Linux有異曲同工之處。作為免費的操作系統(tǒng),Linux正以勢如破竹之勢發(fā)展著。從世界范圍來看,開放源代碼軟件(OSS)是軟件業(yè)發(fā)展的大趨勢,Linux更是OSS的重頭戲,不僅深得IBM、惠普和Sun等國際IT巨頭的厚愛,同時也博得了各國政府的支持。

           

          Globus與Linux 最大的相似之處在于,它們都是開放源代碼軟件,推廣、使用開源軟件已成為眾多政府官員、專家、企業(yè)與用戶的共識。目前,Globus和Linux的都非常注重標準的制定,通過采用統(tǒng)一的標準,使各個公司企業(yè)同一個方向上發(fā)展,加快他們的普及。所以我們可以形象地將Globus稱作網(wǎng)格世界的Linux。

           

          隨著時代的發(fā)展和進步,Globus隨著體系結構的變化也經(jīng)歷了幾次飛躍,它現(xiàn)在變得越來越完善。

           

          Globus Toolkit 2

           

          自從1997年起,Globus Toolkit工具包的第二版(GT2)成為了網(wǎng)格計算的事實標準。它著重于可用性和互操作性能力,定義和實現(xiàn)了一些協(xié)議、API和服務。

           

          當時在世界上有上千個網(wǎng)格應用基于GT2,通過提供授權認證、資源發(fā)現(xiàn)和資源訪問等共同問題的解決方案,GT2加快了網(wǎng)格應用的構建。GT2通過定義和實現(xiàn)的“標準”協(xié)議和服務,真正地實現(xiàn)了可互操作的網(wǎng)格系統(tǒng)。

           

          但是,GT2畢竟目的是針對網(wǎng)格的具體實現(xiàn),所以它并沒有一個正式的標準,也沒有接受公開的審閱,所以在某種程度上限制了它的發(fā)展。隨著網(wǎng)格技術的快速發(fā)展和全球網(wǎng)格論壇這個標準性的機構出現(xiàn),使修訂Globus Tookit的協(xié)議的標準提到了日程上。

           

          基于OGSI的Globus

           

          2002年2 月,在加拿大多倫多市召開的全球網(wǎng)格論壇GGF會議上,Globus項目組和IBM共同倡議了一個全新的網(wǎng)格標準OGSA。OGSA叫做開放網(wǎng)格服務體系,它把Globus標準與以商用為主的Web Services的標準結合起來,網(wǎng)格服務統(tǒng)一以Services的方式對外界提供。2003年符合OGSA規(guī)范的Globus Toolkit 3.0(GT3)發(fā)布,這標志著OGSA已經(jīng)從一種理念、一種體系結構,走到付諸實踐的階段了。

           

          GT3提供了一個完整的開放網(wǎng)格服務基礎設施(OGSI)實現(xiàn),它的許多功能重構成與OGSI兼容的服務。GT3將服務發(fā)現(xiàn)、程序執(zhí)行作業(yè)的提交、監(jiān)控和可靠的文件傳輸,定義成了與OGSI兼容的服務。其它如數(shù)據(jù)傳遞、副本定位和授權等服務也盡量構建成與OGSI相兼容。并且GT3定義了一組關于使用Web服務描述語言(WSDL)和擴展標識語言(XML)模式的約定與擴展,以便啟用有狀態(tài)服務。

           

          雖然OGSI的概念很重要,但是也存在一些自身的缺陷,需要一些新的結構來解決這些問題。所以采用新的結構代替OGSI是有必要的,通過轉變可以獲得網(wǎng)絡服務強有力的支持。

           

          基于WSRF的Globus

           

          2004年1 月,美國Akamai Technologies、美國The Globus Alliance、惠普、IBM、美國Sonic Software和美國TIBCO Software六公司公布了統(tǒng)一網(wǎng)格計算和Web服務的新標準“WS-Notification”和“WS-Resource Framework”。Web服務資源框架(WSRF)是OGSI的重構和發(fā)展,利用新的Web服務標準。

           

          WSRF基本保留了OGSI中的所有功能,同時更改了一些語法,并且還在其表示中采用了不同的技術。Web服務通知(WSN)為Web服務提供基于消息發(fā)布和預定能力。WSRF和WSN都是建立在已存在的Web服務定義和技術基礎上的,幫助實現(xiàn)了網(wǎng)格計算、系統(tǒng)管理和Web服務的統(tǒng)一。

           

          2005年1月31日發(fā)布的Globus Toolkit 4(GT4),實現(xiàn)了WSRF和WSN標準。GT4提供API來構建有狀態(tài)的Web服務,其目標是建立分布式異構計算環(huán)境。所有知名的GT3協(xié)議都被重新設計為可以使用WSRF。并且GT4也在其中增添了一些新的Web服務的組件。    

          posted @ 2007-11-03 11:56 y 閱讀(204) | 評論 (0)編輯 收藏

          講述MFC規(guī)則DLL的創(chuàng)建與使用技巧。
          5. MFC規(guī)則DLL

            5.1 概述

            MFC規(guī)則DLL的概念體現(xiàn)在兩方面:

            (1) 它是MFC的
            
            “是MFC的”意味著可以在這種DLL的內(nèi)部使用MFC;

            (2) 它是規(guī)則的
          “是規(guī)則的”意味著它不同于MFC擴展DLL,在MFC規(guī)則DLL的內(nèi)部雖然可以使用MFC,但是其與應用程序的接口不能是MFC。而MFC擴展DLL與應用程序的接口可以是MFC,可以從MFC擴展DLL中導出一個MFC類的派生類。

            Regular DLL能夠被所有支持DLL技術的語言所編寫的應用程序調用,當然也包括使用MFC的應用程序。在這種動態(tài)連接庫中,包含一個從CWinApp繼承下來的類,DllMain函數(shù)則由MFC自動提供。

            Regular DLL分為兩類:

            (1)靜態(tài)鏈接到MFC 的規(guī)則DLL

            靜態(tài)鏈接到MFC的規(guī)則DLL與MFC庫(包括MFC擴展 DLL)靜態(tài)鏈接,將MFC庫的代碼直接生成在.dll文件中。在調用這種DLL的接口時,MFC使用DLL的資源。因此,在靜態(tài)鏈接到MFC 的規(guī)則DLL中不需要進行模塊狀態(tài)的切換。

            使用這種方法生成的規(guī)則DLL其程序較大,也可能包含重復的代碼。

            (2)動態(tài)鏈接到MFC 的規(guī)則DLL

            動態(tài)鏈接到MFC 的規(guī)則DLL 可以和使用它的可執(zhí)行文件同時動態(tài)鏈接到 MFC DLL 和任何MFC擴展 DLL。在使用了MFC共享庫的時候,默認情況下,MFC使用主應用程序的資源句柄來加載資源模板。這樣,當DLL和應用程序中存在相同ID的資源時(即所謂的資源重復問題),系統(tǒng)可能不能獲得正確的資源。因此,對于共享MFC DLL的規(guī)則DLL,我們必須進行模塊切換以使得MFC能夠找到正確的資源模板。

            我們可以在Visual C++中設置MFC規(guī)則DLL是靜態(tài)鏈接到MFC DLL還是動態(tài)鏈接到MFC DLL。如圖8,依次選擇Visual C++的project -> Settings -> General菜單或選項,在Microsoft Foundation Classes中進行設置。


          圖8 設置動態(tài)/靜態(tài)鏈接MFC DLL



              5.2 MFC規(guī)則DLL的創(chuàng)建

            我們來一步步講述使用MFC向導創(chuàng)建MFC規(guī)則DLL的過程,首先新建一個project,如圖9,選擇project的類型為MFC AppWizard(dll)。點擊OK進入如圖10所示的對話框。


          圖9 MFC DLL工程的創(chuàng)建


          圖10所示對話框中的1區(qū)選擇MFC DLL的類別。

            2區(qū)選擇是否支持automation(自動化)技術, automation 允許用戶在一個應用程序中操縱另外一個應用程序或組件。例如,我們可以在應用程序中利用 Microsoft Word 或Microsoft Excel的工具,而這種使用對用戶而言是透明的。自動化技術可以大大簡化和加快應用程序的開發(fā)。

            3區(qū)選擇是否支持Windows Sockets,當選擇此項目時,應用程序能在 TCP/IP 網(wǎng)絡上進行通信。 CWinApp派生類的InitInstance成員函數(shù)會初始化通訊端的支持,同時工程中的StdAfx.h文件會自動include <AfxSock.h>頭文件。

            添加socket通訊支持后的InitInstance成員函數(shù)如下:

          BOOL CRegularDllSocketApp::InitInstance()
          {
           if (!AfxSocketInit())
           {
            AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
            return FALSE;
           }
           return TRUE;
          }

            4區(qū)選擇是否由MFC向導自動在源代碼中添加注釋,一般我們選擇“Yes,please”。


          圖10 MFC DLL的創(chuàng)建選項

          posted @ 2007-08-16 16:15 y 閱讀(194) | 評論 (0)編輯 收藏

          Because SQL is a declarative language, you can write the same query in many forms, each getting the same result but with vastly different execution plans and performance.

          In this example, we select all books that do not have any sales.  Note that this is a non-correlated sub-query, but it could be re-written in several ways.

          select
             book_key
          from
             book
          where
             book_key NOT IN (select book_key from sales);
           

          There are serious problems with subqueries that may return NULL values. It is a good idea to discourage the use of the NOT IN clause (which invokes a sub-query) and to prefer NOT EXISTS (which invokes a correlated sub-query), since the query returns no rows if any rows returned by the sub-query contain null values.

          select
             book_key
          from
             book
          where
             NOT EXISTS (select book_key from sales);

          Subqueries can often be re-written to use a standard outer join, resulting in faster performance.  As we may know, an outer join uses the plus sign (+) operator to tell the database to return all non-matching rows with NULL values.  Hence we combine the outer join with a NULL test in the WHERE clause to reproduce the result set without using a sub-query.

          select
             b.book_key
          from
             book  b,
             sales s
          where
             b.book_key = s.book_key(+)
          and
             s.book_key IS NULL;

          This execution plan will also be faster by eliminating the sub-query.

          posted @ 2007-08-14 15:06 y 閱讀(206) | 評論 (0)編輯 收藏

          What is a subquery?

          A subquery is a query within a query. In Oracle, you can create subqueries within your SQL statements. These subqueries can reside in the WHERE clause, the FROM clause, or the SELECT clause.


          WHERE clause

          Most often, the subquery will be found in the WHERE clause. These subqueries are also called nested subqueries.

          For example:

          select * from all_tables tabs
          where tabs.table_name in (select cols.table_name
           from all_tab_columns cols
           where cols.column_name = 'SUPPLIER_ID');

          Limitations: Oracle allows up to 255 levels of subqueries in the WHERE clause.


          FROM clause

          A subquery can also be found in the FROM clause. These are called inline views.

          For example:

          select suppliers.name, subquery1.total_amt
          from suppliers,
             (select supplier_id, Sum(orders.amount) as total_amt
             from orders
             group by supplier_id) subquery1,
          where subquery1.supplier_id = suppliers.supplier_id;

          In this example, we've created a subquery in the FROM clause as follows:

          (select supplier_id, Sum(orders.amount) as total_amt
           from orders
           group by supplier_id) subquery1

          This subquery has been aliased with the name subquery1. This will be the name used to reference this subquery or any of its fields.

          Limitations: Oracle allows an unlimited number of subqueries in the FROM clause.


          SELECT clause

          A subquery can also be found in the SELECT clause.

          For example:

          select tbls.owner, tbls.table_name,
            (select count(column_name) as total_columns
             from all_tab_columns cols
             where cols.owner = tbls.owner
             and cols.table_name = tbls.table_name) subquery2
          from all_tables tbls;

          In this example, we've created a subquery in the SELECT clause as follows:

          (select count(column_name) as total_columns
           from all_tab_columns cols
           where cols.owner = tbls.owner
           and cols.table_name = tbls.table_name) subquery2

          The subquery has been aliased with the name subquery2. This will be the name used to reference this subquery or any of its fields.

          The trick to placing a subquery in the select clause is that the subquery must return a single value. This is why an aggregate function such as SUM, COUNT, MIN, or MAX is commonly used in the subquery

          posted @ 2007-08-14 12:19 y 閱讀(207) | 評論 (0)編輯 收藏
              只有注冊用戶登錄后才能閱讀該文。閱讀全文
          posted @ 2007-08-13 18:06 y 閱讀(47) | 評論 (0)編輯 收藏
              只有注冊用戶登錄后才能閱讀該文。閱讀全文
          posted @ 2007-08-13 17:32 y 閱讀(51) | 評論 (0)編輯 收藏
              只有注冊用戶登錄后才能閱讀該文。閱讀全文
          posted @ 2007-08-11 08:56 y 閱讀(53) | 評論 (0)編輯 收藏
          給個通俗的解釋吧.
          例表a
          aid adate
          1 a1
          2 a2
          3 a3
          表b
          bid bdate
          1 b1
          2 b2
          4 b4
          兩個表a,b相連接,要取出id相同的字段
          select * from a inner join b on a.aid = b.bid這是僅取出匹配的數(shù)據(jù).
          此時的取出的是:
          1 a1 b1
          2 a2 b2
          那么left join 指:
          select * from a left join b on a.aid = b.bid
          首先取出a表中所有數(shù)據(jù),然后再加上與a,b匹配的的數(shù)據(jù)
          此時的取出的是:
          1 a1 b1
          2 a2 b2
          3 a3 空字符
          同樣的也有right join
          指的是首先取出b表中所有數(shù)據(jù),然后再加上與a,b匹配的的數(shù)據(jù)
          此時的取出的是:
          1 a1 b1
          2 a2 b2
          4 空字符 b4
          posted @ 2007-07-10 12:01 y 閱讀(191) | 評論 (0)編輯 收藏
           聲明方法的存在而不去實現(xiàn)它的類被叫做抽象類(abstract class),它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實例。然而可以創(chuàng)建一個變量,其類型是一個抽象類,并讓它指向具體子類的一個實例。不能有抽象構造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現(xiàn),否則它們也是抽象類為。取而代之,在子類中實現(xiàn)該方法。知道其行為的其它類可以在類中實現(xiàn)這些方法。

                  接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現(xiàn)與子類相似,除了該實現(xiàn)類不能從接口定義中繼承行為。當類實現(xiàn)特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實現(xiàn)了該接口的類的任何對象上調用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動態(tài)聯(lián)編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現(xiàn)了接口。

                 接口可以繼承接口。抽象類可以實現(xiàn)(implements)接口,抽象類是可以繼承實體類,但前提是實體類必須有明確的構造函數(shù)。

                接口更關注“能實現(xiàn)什么功能”,而不管“怎么實現(xiàn)的”。

          posted @ 2007-07-06 15:58 y 閱讀(184) | 評論 (0)編輯 收藏
          聲明方法的存在而不去實現(xiàn)它的類被叫做抽象類(abstract class),它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實例。然而可以創(chuàng)建一個變量,其類型是一個抽象類,并讓它指向具體子類的一個實例。不能有抽象構造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現(xiàn),否則它們也是抽象類為。取而代之,在子類中實現(xiàn)該方法。知道其行為的其它類可以在類中實現(xiàn)這些方法。

                  接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現(xiàn)與子類相似,除了該實現(xiàn)類不能從接口定義中繼承行為。當類實現(xiàn)特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實現(xiàn)了該接口的類的任何對象上調用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動態(tài)聯(lián)編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現(xiàn)了接口。

                 接口可以繼承接口。抽象類可以實現(xiàn)(implements)接口,抽象類是可以繼承實體類,但前提是實體類必須有明確的構造函數(shù)。

                接口更關注“能實現(xiàn)什么功能”,而不管“怎么實現(xiàn)的”。

          相同及聯(lián)系
            A. 兩者都是抽象類,都不能實例化。
            B. interface實現(xiàn)類及abstrct class的子類都必須要實現(xiàn)已經(jīng)聲明的抽象方法。

          2. 不同
            A. interface需要實現(xiàn),要用implements,而abstract class需要繼承,要用extends。
            B. 一個類可以實現(xiàn)多個interface,但一個類只能繼承一個abstract class。
            C. interface強調特定功能的實現(xiàn),而abstract class強調所屬關系。 
            D. 盡管interface實現(xiàn)類及abstrct class的子類都必須要實現(xiàn)相應的抽象方法,但實現(xiàn)的形式不同。interface中的每一個方法都是抽象方法,都只是聲明的(declaration, 沒有方法體),實現(xiàn)類必須要實現(xiàn)。而abstract class的子類可以有選擇地實現(xiàn)。這個選擇有兩點含義:
              一是Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子類必須實現(xiàn)。那些沒有abstract的方法,在Abstrct class中必須定義方法體。
              二是abstract class的子類在繼承它時,對非抽象方法既可以直接繼承,也可以覆蓋;而對抽象方法,可以選擇實現(xiàn),也可以通過再次聲明其方法為抽象的方式,無需實現(xiàn),留給其子類來實現(xiàn),但此類必須也聲明為抽象類。既是抽象類,當然也不能實例化。
            E. abstract class是interface與Class的中介。
            interface是完全抽象的,只能聲明方法,而且只能聲明pulic的方法,不能聲明private及protected的方法,不能定義方法體,也不能聲明實例變量。然而,interface卻可以聲明常量變量,并且在JDK中不難找出這種例子。但將常量變量放在interface中違背了其作為接口的作用而存在的宗旨,也混淆了interface與類的不同價值。如果的確需要,可以將其放在相應的abstract class或Class中。
            abstract class在interface及Class中起到了承上啟下的作用。一方面,abstract class是抽象的,可以聲明抽象方法,以規(guī)范子類必須實現(xiàn)的功能;另一方面,它又可以定義缺省的方法體,供子類直接使用或覆蓋。另外,它還可以定義自己的實例變量,以供子類通過繼承來使用。

          3. interface的應用場合
            A. 類與類之前需要特定的接口進行協(xié)調,而不在乎其如何實現(xiàn)。
            B. 作為能夠實現(xiàn)特定功能的標識存在,也可以是什么接口方法都沒有的純粹標識。
            C. 需要將一組類視為單一的類,而調用者只通過接口來與這組類發(fā)生聯(lián)系。
            D. 需要實現(xiàn)特定的多項功能,而這些功能之間可能完全沒有任何聯(lián)系。

          4. abstract class的應用場合
            一句話,在既需要統(tǒng)一的接口,又需要實例變量或缺省的方法的情況下,就可以使用它。最常見的有:
            A. 定義了一組接口,但又不想強迫每個實現(xiàn)類都必須實現(xiàn)所有的接口。可以用abstract class定義一組方法體,甚至可以是空方法體,然后由子類選擇自己所感興趣的方法來覆蓋。
            B. 某些場合下,只靠純粹的接口不能滿足類與類之間的協(xié)調,還必需類中表示狀態(tài)的變量來區(qū)別不同的關系。abstract的中介作用可以很好地滿足這一點。
            C. 規(guī)范了一組相互協(xié)調的方法,其中一些方法是共同的,與狀態(tài)無關的,可以共享的,無需子類分別實現(xiàn);而另一些方法卻需要各個子類根據(jù)自己特定的狀態(tài)來實現(xiàn)特定的功能。

          posted @ 2007-07-06 15:53 y 閱讀(243) | 評論 (0)編輯 收藏
          僅列出標題  
          主站蜘蛛池模板: 满城县| 双鸭山市| 垦利县| 东源县| 彩票| 黄石市| 博乐市| 彭州市| 富宁县| 正安县| 崇文区| 固镇县| 天镇县| 疏勒县| 龙泉市| 永寿县| 伊宁市| 武平县| 广河县| 苏尼特左旗| 麦盖提县| 姜堰市| 定襄县| 上思县| 疏附县| 鸡东县| 郓城县| 绿春县| 陇南市| 连南| 邯郸县| 邯郸市| 土默特左旗| 大悟县| 揭西县| 醴陵市| 江阴市| 白城市| 班玛县| 四会市| 平和县|