• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            M-A-T Tory's Blog

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              16 隨筆 :: 1 文章 :: 1 評論 :: 0 Trackbacks

            2006年7月11日 #

            Eclipse啟動參數說明(部分)


            其實,Eclipse是一個可以進行非常靈活配置的系統,除了以缺省的方式啟動以外,還可以指定各種參數來定制啟動方式。在參考了一些資料之后,我總結了一些比較常用的啟動時Command Arguments,如果有不正確的地方希望大家予以指出。

            -arch [processor architecture]
            描述:指定所使用的處理器的類別
            舉例:eclipse -arch x86或eclipse -arch sparc

            -application [id]
            描述:指定要運行的應用,id為擴展org.eclipse.core.applications擴展點的插件id加擴展id
            舉例:例如有個插件id為edu.sdu.app,擴展id為myapp,則eclipse -application edu.sdu.app.myapp,就會執行你的擴展應用

            -clean
            描述:清空插件緩存內容
            舉例:eclipse -clean,有時插件顯示不出來是因為Eclipse將插件進行了緩存以加速啟動過程,若指定此參數則會清空緩存,從頭加載

            -configuration [cofigfile location]
            描述:指定配置文件的位置,在啟動時使用此目錄下的配置文件config.ini來啟動
            舉例:eclipse -configuration d:/eclipse/configuration

            -data [workspace location]
            描述:指定啟動時的Workspace位置
            舉例:例如Workspace位置設在D:/myworkspace,則eclipse -data D:/myworkspace

            -debug [option file]
            描述:以Debug狀態啟動Eclipse,所有的Debug開關在.options文件中指定
            舉例:eclipse -debug d:/eclipse/.options

            -dev [classpath entry]
            描述:以開發狀態啟動Eclipse,這會添加所有指定的路徑作為每個插件的Classpath
            舉例:例如eclipse -dev bin,會將產生在bin目錄下的所有類加載到類路徑中,這在開發插件時非常有用

            -nosplash
            描述:指定啟動時不顯示閃屏
            舉例:eclipse -nosplash

            -vm [jre path]
            描述:指定啟動時所使用的Java虛擬機
            舉例:例如要使用自己的Java虛擬機,則eclipse -vm D:/j2sdk1.4.2_04/jre/bin/java.exe,這樣還有一個好處,就是可以開啟一個Console,能夠顯示控制臺信息,當然若使用eclipse -vm D:/j2sdk1.4.2_04/jre/bin/javaw.exe則不會再顯示控制臺

            -vmargs [Java VM arguments]
            描述:指定啟動時要使用的Java虛擬機參數
            舉例:例如要指定使用的內存容量,則eclipse -vmargs "-Xms256m -Xmx1024m"
            注:此參數一定要放在所有參數變量的最后面

            posted @ 2006-07-11 18:25 Tory 閱讀(1979) | 評論 (0)編輯 收藏

            2006年6月3日 #

                 摘要: < html > < META?HTTP - EQUIV = " Content-Type " ?content = " text/html;?charset=gb_2312-80 ...  閱讀全文
            posted @ 2006-06-03 19:21 Tory 閱讀(598) | 評論 (0)編輯 收藏

            2006年5月24日 #

            什么是設計模式
            設計模式是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。

            毫無疑問,設計模式于己于他人于系統都是多贏的,設計模式使代碼編制真正工程化,設計模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。

            GoF的“設計模式”是第一次將設計模式提升到理論高度,并將之規范化,本書提出了23種基本設計模式,自此,在可復用面向對象軟件的發展過程中,新的大量的設計模式不斷出現。

            設計模式和框架
            現在,可復用面向對象軟件系統現在一般劃分為三大類:應用程序 工具箱和框架(Framework),我們平時開發的具體軟件都是應用程序;Java的API屬于工具箱;而框架是構成一類特定軟件可復用設計的一組相互協作的類。EJB(Enterprise JavaBeans)是Java應用于企業計算的框架.

            框架通常定義了應用體系的整體結構 類和對象的關系等等設計參數,以便于具體應用實現者能集中精力于應用本身的特定細節。框架主要記錄軟件應用中共同的設計決策,框架強調設計復用,因此框架設計中必然要使用設計模式.

            另外,設計模式有助于對框架結構的理解,成熟的框架通常使用了多種設計模式,如果你熟悉這些設計模式,毫無疑問,你將迅速掌握框架的結構,我們一般開發者如果突然接觸EJB J2EE等框架,會覺得特別難學,難掌握,那么轉而先掌握設計模式,無疑是給了你剖析EJB或J2EE系統的一把利器。

            EJB中的設計模式
            下面我們從設計模式的角度看看EJB的框架是怎樣的?在這之前假設你已經大概了解了設計模式。專門的設計模式闡述請見我的設計模式之系列.

            EJB是采取多層結構,原先我們數據庫開發基本是應用程序(商業邏輯運算)直接調用數據庫驅動,在EJB中,為將商業邏輯計算和數據庫截然分開,使用多個結構式模式:Adapter模式和Bridge模式等.這樣做的好處顯然有三個:

            1.分離了商業邏輯層和數據訪問層;
            2.能同時支持多個數據庫;
            3.但數據庫類型更換時,不會設計到商業邏輯代碼的大量修改.

            EJB中將對數據庫進行調用(如發出select等語句)稱為會話bean(Sessionbean),而將對應數據庫一個個記錄的bean稱為實體bean(Entity bean);由這兩種類型的bean完成對數據庫的訪問.

            會話bean一般和客戶端應用是一一對應,而和數據庫端聯系緊密的是實體bean,EJB在實體bean(或直接在會話bean)和數據庫之間使用了Adapter模式和Bridge模式,無意在實體bean和數據庫之間又多了一層,稱之為DAO(Data Access Object ),DAO實際就是設計模式的混合體.

            我們以Java的寵物店中的Catalog為例,這是專門處理寵物店中的寵物類別,在對數據庫訪問中,有兩個主要程序:CatalogEJB和CatalogDAO,我們從具體代碼中看看設計模式是怎么應用的.

            Bridge模式和Adapter模式
            我們首先看看CatalogEJB代碼:

            public class CatalogEJB implements SessionBean {
              protected CatalogDAO dao;

              //從DAO工廠中獲取一個DAO 這是調用工廠(factory)模式的一個實例
              public void ejbCreate() {
                try {
                  dao = CatalogDAOFactory.getDAO();
                }
                catch (CatalogDAOSysException se) {
                  Debug.println("Exception getting dao " + se);
                  throw new EJBException(se.getMessage());
                }
              }

              ....

             

            }



            我們發現在CatalogEJB中并沒有通常的會話bean那樣有對數據庫操作的"select .. from ."等之類SQL操作語句,這些都被封裝到DAO的具體實現中(Concrete class).

            在Catalog這個示例中使用了設計模式的Bridge模式,判斷是否是某種模式,主要依據其參與者的種類和相互關系,我們先看看Bridge模式的定義和參與者:

            Bridge模式是將抽象和行為劃分開來,各自獨立,但能動態的結合起來(好象搭建了一座橋)。在本例中,是將商業邏輯和數據庫訪問這樣的行為劃分開來,數據庫訪問專門放置在DAO中了。

            Bridge模式需要兩個接口(抽象類和接口通稱為接口),一個用來封裝抽象部分,本例中是封裝商業邏輯,是CatalogEJB;還有一個是封裝行為(Implementor),本例中是CatalogDAO,看看CatalogDAO代碼:


            public interface CatalogDAO {

              public Category getCategory(String categoryID, Locale l)
              throws CatalogDAOSysException;

              public Page getCategories(int start, int count, Locale l)
              throws CatalogDAOSysException;

              public Product getProduct(String productID, Locale l)
              throws CatalogDAOSysException;

              public Page getProducts(String categoryID, int start, int count, Locale l)
              throws CatalogDAOSysException;

              public Item getItem(String itemID, Locale l)
              throws CatalogDAOSysException;

              public Page getItems(String productID, int start, int size, Locale l)
              throws CatalogDAOSysException;

              public Page searchItems(String query, int start, int size, Locale l)
              throws CatalogDAOSysException;


            }


            Bridge模式中參與者還需要有行為接口的具體實現(ConcreteImplementor),在本例中是CatalogDAOImpl,雖然在目前寵物店中只有一個ConcreteImplementor,但是可擴展為到Mysql XML等數據源訪問,比如你可以自己新增一個叫CatalogDAOImplMysql,也是作為CatalogDAO的子類。

            看看CatalogDAO的一個子類CatalogDAOImpl的代碼:

            public class CatalogDAOImpl implements CatalogDAO {
              protected static DataSource getDataSource()
                throws CatalogDAOSysException {
                try {
                  InitialContext ic = new InitialContext();
                  return (DataSource) ic.lookup(JNDINames.CATALOG_DATASOURCE);
                }
                catch (NamingException ne) {
                  throw new CatalogDAOSysException("NamingException while looking "
                    + "up DB context : "
                    + ne.getMessage());
                }
              }

              //具體Select語句在這里出現,這里主要是Oracle 數據庫的訪問語句

              public Category getCategory(String categoryID, Locale l)
              throws CatalogDAOSysException {

                Connection c = null;
                PreparedStatement ps = null;
                ResultSet rs = null;
                Category ret = null;

                try {
                  c = getDataSource().getConnection();

                  ps = c.prepareStatement("select a.catid, name, descn "
                      + "from (category a join "
                      + "category_details b on "
                      + "a.catid=b.catid) "
                      + "where locale = ? "
                      + "and a.catid = ?",
                  ResultSet.TYPE_SCROLL_INSENSITIVE,
                  ResultSet.CONCUR_READ_ONLY);
                  ps.setString(1, l.toString());
                  ps.setString(2, categoryID);
                  rs = ps.executeQuery();
                  if (rs.first()) {
                    ret = new Category(rs.getString(1).trim(),
                    rs.getString(2),
                    rs.getString(3));
                  }
                  rs.close();
                  ps.close();

                  c.close();
                  return ret;
                }
                catch (SQLException se) {
                  throw new CatalogDAOSysException("SQLException: "
                  + se.getMessage());
                }


                ....

            }


            Bridge模式參與者總結如下:

            商業邏輯抽象類 (CatalogEJB)

            抽象的商業邏輯操作.
            對DAOImplementor調用.
            不關心是具體什么數據源被使用(無論是Oracle還是JDBC還是XML).
            DAO(Data Access Object) (CatalogDAO)

            對數據源的抽象操作行為.
            提供了非常方便訪問和維護管理數據的API結構.
            DAOImplementor (CatalogDAOImpl 有可能有CatalogDAOImplSybase CatalogDAOImplMysql 等)

            實現具體的DAO接口內容.
            使用Adapter模式,將特定的數據源驅動接口適配到DAO接口中去
            數據源 ( Oracle, or Sybase database via JDBC API)

            提供訪問具體數據庫的驅動接口,如包括連接池等.


            在使用數據源驅動接口時,需要使用Adapter模式,Adapter模式將兩個不相關的類糾合在一起使用,Adapter模式實際是使用組合(composition)和繼承(inheritance)兩種方式再生類,在著名的"think in Java"的"類再生"專門提到這兩個方式.

            很顯然,如果你對Bridge模式和Adapter模式熟悉,那么對寵物店中的Catalog理解就會非常快,同樣,在寵物店其他部分如訂單 用戶注冊 等都能迅速理解。

            Factory模式和Singleton模式
            該模式類似new,是用來創建對象的,使用Factory模式是為了實現面向對象的基本原則.封裝(Encapsulation)和分派(Delegation);將創建對象與使用對象進行分工。因此在平時開發過程中,盡量使用Factory模式創建對象。

            本例CatalogEJB中是使用Factory模式獲得一個DAO的具體實例對象,見上面CatalogEJB代碼中注釋。我們看看CatalogDAOFactory的代碼:

            public class CatalogDAOFactory {
              public static CatalogDAO getDAO() throws CatalogDAOSysException {

                CatalogDAO catDao = null;
                try {
                  InitialContext ic = new InitialContext();
                  String className = (String) ic.lookup(JNDINames.CATALOG_DAO_CLASS);
                  catDao = (CatalogDAO) Class.forName(className).newInstance();
                } catch (NamingException ne) {
                  ...

                }
                return catDao;
            }



            在CatalogDAOFactory可以依據系統的配置文件,動態獲得DAO的方法,之所以采取動態方式,當然便于用戶自己增加自己的DAO方式,而不必修改代碼,只要直接修改配置文件就可以。

            如果在這里只需要CatalogDAOFactory產生一個實例,可以采取Singleton模式,Singleton的目的是控制類實例對象的創建,并且允許整個程序只在一點對它進行訪問。Singleton本身類只能創建一個,是單線程。


            public class CatalogDAOFactory {
              private static CatalogDAO catDao = null;

              public static CatalogDAO getIntance(){
                if (catDao==null)
                  try {
                    InitialContext ic = new InitialContext();
                    String className =
                       (String) ic.lookup(JNDINames.CATALOG_DAO_CLASS);
                    catDao = (CatalogDAO) Class.forName(className).newInstance();
                  } catch (NamingException ne) {
                    ...

                  }
                 }
                return catDao;

              }
            }



            那么在CatalogEJB的調用從
            dao = CatalogDAOFactory.getDAO();
            要改為
            dao = CatalogDAOFactory.getIntance();

            Facade模式
            在EJB應用中,有兩個端點,這一端是用戶端,另外一端是EJB,通常在這兩個端點間會增加一層,用來松散兩個端點之間的耦合,比如在寵物店例子中,考慮到不同身份的用戶有不同的操作流程,比如顧客注冊進入后,需要瀏覽目錄,下訂單,而商店管理者進入后需要確認或者否定訂單,或者檢查庫存。這些功能需要借助Session bean和Entity bean完成。

            但是如果用戶端直接和這些bean互動,會有以下問題:


            1. 用戶端必須注意和這些beans的所有有聯系或互動的事情,無法阻止用戶端可能不恰當的使用這些beans.
            2.如果EJB的API改動,那么用戶端的一些代碼也要修改。無疑擴展性很差。
            3.即使這些beans都在同一臺服務器上,用戶端還是用remote方式來調用它們,造成網絡無故擁擠。

            那么我們使用Facade模式來解決這個問題,Facade的定義是為子系統中的一組接口提供一個一致的界面,很顯然我們需要為這些bean提供一個統一的對外界面。如下圖:


            在寵物店中,ShoppingClientFacadeLocalEJB是面對所有用戶端操作的統一界面,用戶端操作就不直接和那些EJB如CustomerEJB或ShoppingCartEJB有聯系,而是都通過ShoppingClientFacadeLocalEJB來聯系的。代碼如下:

            public class ShoppingClientFacadeLocalEJB implements SessionBean {
              ...

              //和CustomerEJB聯系
              public CustomerLocal getCustomer() throws FinderException {
                if (userId == null) {
                  ...
                }
                try {
                  InitialContext ic = new InitialContext();
                  Object o = ic.lookup("java:comp/env/ejb/petstore/local/customer");
                  CustomerLocalHome home =(CustomerLocalHome)o;
                  customer = home.findByPrimaryKey(userId);
                } catch (javax.naming.NamingException nx) {
                  ...
                }

                return customer;
              }

              .....

              //和ShoppingCartEJB聯系
              public ShoppingCartLocal getShoppingCart() {
                if (cart == null) {
                  try {
                    InitialContext ic = new InitialContext();
                    Object o = ic.lookup("java:comp/env/ejb/cart/Cart");
                    ShoppingCartLocalHome home =(ShoppingCartLocalHome)o;
                    cart = home.create();
                  } catch (javax.ejb.CreateException cx) {
                   ...
                  }
                }
                return cart;
              }

              ....

            }



            Facade模式參與者:

            SessionFacade (ShoppingClientFacadeLocalEJB)

            提供一組操作流程
            將真正工作委托到EJB的bean.
            EJB的bean (CustomerEJB, ShoppingCartEJB等等)

            執行基本的商業邏輯操作
            沒有任何對SessionFacade的調用.

            這樣不但可擴展性大大增強,效率也提高了,用戶端只需要一次Remote對SessionFacade調用就可以了,而SessionFacade會自動定位到與它同一臺服務器的那些鄰居bean(CustomerEJB, ShoppingCartEJB等等),無疑減少網絡擁擠,提高了速度.

            總結
            在EJB的具體使用中,使用合適的設計模式,不但使代碼可重用性 可拓展性增強,最重要的是能提高效率和速度,我們知道EJB框架由于考慮大型系統中事務安全等各方面問題,效率性能有所欠缺,那么我們在具體問題具體應用時,使用設計模式可以彌補這個問題。

            例如Proxy模式可以為我們在訪問巨大的需要花費一定時間才能展開的對象時,提供一個代理,這樣不會因為那個巨大對象而影響當前運行速度,EJB中的那些bean很顯然屬于巨大對象(因為它們有反復的數據庫操作,這些很費時間〕。

            Flyweight模式是避免大量擁有相同內容的小類的開銷(如耗費內存),使大家共享一個類(元類).當你要從EJB中獲取一系列字符串,而這些字符串中肯定有許多是重復的,那么我們可以將這些重復的字符串儲存在Flyweight池(pool)中以達到共享。
            posted @ 2006-05-24 22:34 Tory 閱讀(203) | 評論 (0)編輯 收藏

            2006年5月23日 #

            java操作Excel文件應該有兩個方法,一種是利用POI,一種是利用 JAVA EXCEL?。
            一開始本來是打算用POI,可是不知為什么,使用POI時可以正常寫Excel,但讀的時候卻老出問題了,不得不改用JAVA EXCELLE。
            ?

            Java Excel是一開放源碼項目,通過它Java開發人員可以讀取Excel文件的內容、創建新的Excel文件、更新已經存在的Excel文件。使用該API非Windows操作系統也可以通過純Java應用來處理Excel數據表。因為是使用Java編寫的,所以我們在Web應用中可以通過JSP、Servlet來調用API實現對Excel數據表的訪問。

            現在發布的穩定版本是V2.0,提供以下功能:

            • 從Excel 95、97、2000等格式的文件中讀取數據;
            • 讀取Excel公式(可以讀取Excel 97以后的公式);
            • 生成Excel數據表(格式為Excel 97);
            • 支持字體、數字、日期的格式化;
            • 支持單元格的陰影操作,以及顏色操作;
            • 修改已經存在的數據表;

            現在還不支持以下功能,但不久就會提供了:

            1. 不能夠讀取圖表信息;
            2. 可以讀,但是不能生成公式,任何類型公式最后的計算值都可以讀出;

            應用示例

            1 從Excel文件讀取數據表

            class?ReadExcelByJxl
            {
            public?static?void?main(String?[]?args)
            {
            try
            {
            //構建Workbook對象,?只讀Workbook對象
            ????
            //直接從本地文件創建Workbook
            //從輸入流創建Workbook
            ????InputStream?is?=?new?FileInputStream("Electrolux_images_PM400download_complete.xls");
            ????jxl.Workbook?rwb?
            =?Workbook.getWorkbook(is);
            ????
            ????Sheet[]?rs?
            =?rwb.getSheets();
            ????
            for(int?i?=?0;?i?<?rs.length;?i++)
            ????
            {
            ????Cell?cellUrl?
            =?rs[i].findCell("Location?URI?\n(to?be?entered?by?Dalian)");
            ????
            int?row?=?cellUrl.getRow();
            ????
            int?column?=?cellUrl.getColumn();
            ????String?loUri?
            =?rs[i].getCell(column?+?2,?row).getContents();
            ????System.out.println(loUri);
            }

            具體用的時候很簡單,遇到什么不懂得查一下API文檔就可以了(今天才發現我也會用API了,^_^)。
            關于POI使用時出現的問題現在還沒有解決,不知道是什么原因。

            posted @ 2006-05-23 20:51 Tory 閱讀(480) | 評論 (0)編輯 收藏

            2006年5月22日 #

                 摘要: 今天在某網站上發現了一個javascript的計算器,很有創意,而且功能也很強大。具體哪一個網站記不清了,代碼純為了學習研究,請作者見諒。 < HTML >< HEAD >< TITLE > 科學計算器 </ TITLE >...  閱讀全文
            posted @ 2006-05-22 14:35 Tory 閱讀(292) | 評論 (0)編輯 收藏

            2006年5月19日 #

            經過了兩天多的摸索,axis終于配置成功了。步驟其實很簡單的,主要是關于classpath的配置。axis主頁上安裝向導其實寫的明白了,鑒于研究Web Service的人都是有一定java基礎的人,所以上面并沒有詳細說明關于classpath的設置。像我這樣的java新手自然要走很多彎路,沒辦法的事情,這是學習的一個過程。

            axis的配置很簡單,過程如下
            1. 將axis-src-1_2_1這個包解壓后,將axis-1_2_1\webapps下axis的所有東西拷貝到你剛剛建立的TOMCAT的webapps下。目錄結構如下:
            然后查看一下你的axis的WEB-INF的lib下*.jar文件是否全,應該有8個
            axis.jar
            axis-ant.jar
            commons-discovery-0.2.jar
            commons-logging-1.0.4.jar
            jaxrpc.jar
            log4j-1.2.8.jar
            saaj.jar
            wsdl4j-1.5.1.jar
            (一定看好各個文件的文件名,一會將配置CLASSPATH)
            axis的安裝向導還要求其他的幾個.jar文件,包括xerces.jar,和mail.jar.這些都可以在Apache網站上找到/
            2. 然后到axis-1_2_1目錄下,找到lib文件夾,拷貝其中的activation.jar文件,到
            Tomcat\webapps\axis\WEB-INF\lib,和上面的8個jar文件在一起,就OK了。
            3.剩下的就是整個過程中最為關鍵的部分,如果弄不好你需要走很彎路的。
            關于classpath?的設置,包括兩部分。一. 有關Tomcat的classpath的設置,這一部分是最容易被忽視的,很多關于axis的安裝的文章都沒有講。這就使你在后面遇到很多問題,首先如果這部分沒有設置,即使你后面關于axis的classpath設置的完全正確,在編寫客戶端測試Web?Service?是也會出現錯誤。而且這時候,你的axis已經可以運行,你寫的簡單的HelloWorld.jws也沒什么問題,能看到相應的SOAP消息。但是你的客戶端程序卻出問題了,你可以正常編譯,不會出現錯誤。但運行時會出現諸如Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/axis/client/Service此類的異常,這種錯誤通常是最令人痛苦的。
            關于Tomcat的classpath一要注意,如果你是通過Windows安裝程序安裝時,這是你的系統中已經有了TOMCAT_HOME,和JAVA_HOME 環境變量,此時你要做的就是添加classpath環境變量(如果你還沒有添加的話,具體做法我就不用說了,很簡單的基礎知識),classpath的設置如下
            classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(.;是必需的,它指代當前目錄)
            然后修改環境變量中的classpath,把tomat安裝目錄下的common\lib下的(可以根據實際追加)servlet.jar追加到classpath中去,修改后的classpath如下:
            classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;
            4.接下來就是關于axis的環境變量的設置了,向導上講的很清楚。就把原文直接考過來

            On Windows, this can be done via the following. For this document we assume that you have installed Axis in C:\axis. To store this information permanently in WinNT/2000/XP you will need to right click on "My Computer" and select "Properties". Click the "Advanced" tab and create the new environmental variables. It is often better to use WordPad to create the variable string and then paste it into the appropriate text field.

            set AXIS_HOME=c:\axis
            set AXIS_LIB=%AXIS_HOME%\lib
            set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar;
              %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;
              %AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar
            注意一點,.jar文件要與你的解壓的axis目錄中的文件名一致,由于版本問題,文件名可能不一致。
            5 .  測試
            下面是一個簡單的WebService, 供測試使用
            (代碼是轉貼,呵呵)
            import?java.util.*;
            ?
            public?class?wsTestService
            {
            ??String?strName?
            =?"Ryun";
            ??
            int?intAge?=?21;
            ??List?items?
            =?new?ArrayList();
            ??
            ??
            public?String?getName()?{
            ????
            return?strName;
            ???}

            ??
            ??
            public?int?getAge()?{
            ????
            return?intAge;
            ???}

            ??
            ??
            public?List?getItems()?{
            ????
            return?items;
            ???}

            ??}

            將此文件命名為 wsTestService.jws 存放到
            Tomcat的\webapp\axis\目錄下
            訪問 http://localhost:8080/axis/wsTestService.jws, 出現 "There is a Web

            Service here"即表明 Web Service 服務端程序安裝完成.
            開發一個 Web Service 客戶端程序
            建立客戶端程序wsTestClient.java
            以下是客戶端的源程序, 用于向 Web Service Server 提交服務請求:

            import?org.apache.axis.client.Call;
            import?org.apache.axis.client.Service;
            ?
            public?class?wsTestClient?{
            ??
            public?static?void?main(String?args[])?{
            ????System.out.println(
            "Start?invoking");
            ????
            try?{
            ??????String?strUri?
            =?

            "http://localhost:8080/axis/wsTestService.jws";
            ??????Service?service?
            =?new?Service();
            ??????Call?call?
            =?(Call)
            ??????service.createCall();
            ??????call.setTargetEndpointAddress(
            new?

            java.net.URL(strUri));
            ??????call.setOperationName(
            "getName");
            ??????String?ret?
            =?""?+?call.invoke(new?Object[]?{});
            ??????System.out.println(
            "I?am?"?+?ret?+?".");
            ?????}

            ????
            catch?(Exception?e)?{
            ??????System.err.println(e.toString());
            ?????}

            ????System.out.println(
            "Finished?the?invoking.");
            ????}

            }
            然后編譯運行,如果出現問題,那可能是環境變量path,classpath配置的問題,自己查看

            一下,這里就不再描述了。
            C:\>cd \
            C:\>javac wsTestClient.java
            ?
            C:\>java wsTestClient
            Start invoking...
            I am Ryun.
            Finished the invoking.
            完成,再去學習,稍后總結
            但這時還有一個問題,我還沒有解決,關于log4j的一個warn,不知道該如何配置log4j,懶得再去找答案了。axis的相關問題搜索了兩天了才有個結果,log4j的問題以后有時間再弄吧。

            posted @ 2006-05-19 16:24 Tory 閱讀(2432) | 評論 (1)編輯 收藏

            2006年5月16日 #

            匿名類:
            1. 定義方法: new ClassNameorInrefaceName?() {...}
            2. 類名前不能有修飾符。
            3. 類中不能有構造方法,因為它沒有名字。在構造對象是使用父類的構造方法。如果實現接口,則接口后面的圓括號不能帶參數。
            class?TestInnerAnonymous
            {
            ??
            public?static?void?main(String[]?args)
            ??
            {
            ?????Object?obj?
            =?new?Outer().makeTheInner(47);
            ?????System.out.println(
            "Hello?World"?+?obj.toString());
            ??}

            }


            class?Outer
            {
            ??
            private?int?size?=?5;
            ??
            public?Object?makeTheInner(int?localVar)
            ??
            {
            ????
            final?int?fianlLocalVar?=?99;
            ????
            return?new?Object()
            ????????????????
            {
            ???????????????????
            public?String?toString()
            ?????????????????????
            {
            ?????????????????????????
            return?("InnerSize"?+?size?+?"finalLocalVar:"?+?finalLocalVar);
            ?????????????????????}

            ????????????????}
            ;
            ??}

            }
            如果要使用構造函數的話
            ????????????????? {...}
            注意:匿名類屬于方法內嵌類,不可以使用父類的成員

            抽象類與接口的區別:
            抽象類可以有非抽象的方法,有構造函數。
            抽象類是它所有子類的公共屬性的集合,抽象類不能被實例化,它的構造函數是提供給它的子類調用的。
            被abstract所修飾的方法叫抽象方法,格式如下
            abstract returnType abstractMethod([paramlist]);
            抽象類中可以包含抽象方法,也可以不包含abstract方法。但是,一旦某個類中包含了抽象方法,則這個類必須聲明為abstract類。即abstract方法必須位于abstract類中。
            接口是方法和常量值得集合。
            posted @ 2006-05-16 22:01 Tory 閱讀(803) | 評論 (0)編輯 收藏

            首先,更正一下,是只顯示了28層,而非27.

            下面用了遞歸,可以清楚的看到你所要創建的表格層數都創建了,只是到顯示的時候,從第28層之后都不能顯示出來而已.

            至于為什么顯示不來,我也不得而知.

            點擊下面的代碼,查看結果:

            ?

            <! DOCTYPE?html?PUBLIC? " -//W3C//DTD?XHTML?1.0?Transitional//EN " ? " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
            < html?xmlns = " http://www.w3.org/1999/xhtml " >
            < head >
            < meta?http - equiv = " Content-Type " ?content = " text/html;?charset=utf-8 " ? />
            < title > Untitled?Document </ title >
            </ head >

            < body >
            </ body >
            </ html >
            < script >
            var ?n? = ? 40 ;
            function ?createTable(pI) {
            var ?oTable? = ?document.createElement( " TABLE " );
            ?oTable.border?
            = ? 1 ;
            ?oTable.width?
            = ? 1000 ? - ?pI;
            ?oTable.height?
            = ? 1000 ? - ?pI;
            var ?oTBody? = ?document.createElement( " TBODY " );
            var ?oTr? = ?document.createElement( " TR " );
            var ?oTd? = ?document.createElement( " TD " );
            oTd.innerHTML?
            = ?pI;

            if (pI < n)
            ??oTd.appendChild(createTable(pI
            + 1 ));

            oTr.appendChild(oTd);
            oTBody.appendChild(oTr);
            oTable.appendChild(oTBody);
            document.body.appendChild(oTable);
            alert(pI)
            return ?oTable;
            }


            createTable(
            1 );
            </ script >
            posted @ 2006-05-16 19:02 Tory 閱讀(285) | 評論 (0)編輯 收藏

            2006年5月5日 #

            These characteristics, which we cover in depth in Section 3.1 , include how those relationships are influenced by the following factors detailed in the same section:

            • Platform

            • Location

            • Protocols

            • Programming language

            • Invocation patterns

            • Security

            • Service versioning

            • Service model

            • Information model

            • Data format

            Figure 3.1. The domains of SOA.


            ?

            Enterprise services share some or all of these characteristics that impact what actions the service performs, how it does so, and whom it interacts with. These services can be reclassified in the SOA model and placed into new domains that describe what function they perform in the overall model. An analysis of the preceding list identifies at least four different domains of architecture, along with subdomains that influence where a service can exist and the function it performs. These domains and subdomains, discussed later in this chapter, are as follows:

            • Infrastructure services domain with subdomains

              • Utility business services

              • Service-level automation and orchestration

              • Resource virtualization

            • Middleware domain

            • Business services domain

            • Application services domain with subdomains

              • Application programming model subdomain

              • Off-the-shelf commercial software subdomain

              • Information management subdomain

            It is essential to maintain a separation of concerns and domains. In an enterprise, these domains can have separate implementations using any permutation of packaged applications, custom applications, existing infrastructure, and external or outsourced services.

            posted @ 2006-05-05 22:04 Tory 閱讀(254) | 評論 (0)編輯 收藏

            2006年5月3日 #

            在實施SOA的過程中牢記以下特征:
            * 可從企業外部訪問
            * 隨時可用
            * 粗粒度的服務接口
            * 分級
            * 松散耦合
            * 可重用的服務
            * 服務接口設計管理
            * 標準化的服務接口
            * 支持各種消息模式
            * 精確定義的服務契約


            引用別人的話"它不是一門技術,更不能把它刻錄到光盤去賣什么的..它提供的是一種思想!就想OO思想一樣!


            IBM WebSphere Integration Developer, Version 6 software is Eclipse technology-based tooling designed to enable you to rapidly assemble business solutions based on a composite application development framework and using minimal programming skills.

            Its graphically rich interface allows developers to create composite business applications by wiring service components with minimal skills and agnostic of underlying programming implementations. It has fully integrated testing, debug and deployment environment that allows you to easily deploy to WebSphere Process Server. Once deployed, you can dynamically change and adapt to changes with its rich features, such as business rules, selectors, and state machines.


            WebSphere Process Server includes three layers:

            ?? SOA core
            ?? Supporting services
            ?? Service components

            Role resources matrix
            Duration matrix
            Availablity matrix
            Decision probabilities

            posted @ 2006-05-03 22:36 Tory 閱讀(266) | 評論 (0)編輯 收藏

            僅列出標題  下一頁
            久久精品国产亚洲7777| 久久精品午夜一区二区福利| 亚洲国产天堂久久综合网站| A级毛片无码久久精品免费| 2021最新久久久视精品爱| 亚洲国产精品无码久久SM| 97精品国产91久久久久久| 久久久久久久久久久免费精品 | 国产麻豆精品久久一二三| 精品无码人妻久久久久久| 久久久久亚洲精品无码蜜桃| 亚洲狠狠久久综合一区77777| 亚洲v国产v天堂a无码久久| 91精品国产高清久久久久久io| 国产亚洲精久久久久久无码AV| 99精品久久精品一区二区| 久久久久久国产a免费观看黄色大片 | 精品久久久久久久久久久久久久久| 一本久久精品一区二区| 99久久婷婷国产一区二区| 久久精品免费一区二区| 亚洲欧美成人综合久久久| 国产成人无码精品久久久久免费| 中文字幕日本人妻久久久免费 | 99久久婷婷国产综合亚洲| 久久久久国产精品人妻| 日日狠狠久久偷偷色综合免费| 99久久亚洲综合精品网站| www.久久热.com| 久久精品一本到99热免费| 久久久无码精品亚洲日韩按摩| 777午夜精品久久av蜜臀| 亚洲国产精品无码久久久久久曰 | 26uuu久久五月天| 香蕉久久一区二区不卡无毒影院 | 一本久久a久久精品vr综合| 久久精品青青草原伊人| 亚洲精品乱码久久久久久自慰| 亚洲av伊人久久综合密臀性色| 色婷婷综合久久久久中文一区二区 | av无码久久久久不卡免费网站 |