精彩的人生

          好好工作,好好生活

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks
          jUDDI,發音(Judy),是服務于WebServices 的UDDI的java實現開源包。

          1 安裝

          1.1 下載

          下載地址:http://ws.apache.org/juddi/releases.html

          目前的jUDDI的最新版本是0.9rc3(Release Candidate #3 for Version 0.9),不過在這個版本中有一些的bug。

          juddi0.9版本發布應該是不會久,可以參考下面這段話,是Viens Stephen(juddi主要開發者之一)在mail list中說的:we've closed 40+ issues since January 1, 2005. We'll be releasing a 0.9rc4 as soon as Axis 1.2 final is released and then releasing a 0.9 final a few weeks after that. (March 22, 2005)

          1.2 數據庫安裝

          UDDI需要有一個地方來存儲注冊的數據,因此首先要選擇一個關系數據庫安裝。JUDDI可以使用任何支持ANSI standard SQL關系數據庫( 例如MySQL, DB2, Sybase, JdataStore等)。本實例使用MySQL。

          數據庫安裝完成后,在MySQL數據庫中運行juddi-0.9rc3\\sql\\mysql\\create_database.sql, juddi-0.9rc3\\sql\\mysql\\insert_publishers.sql。數據庫準備完成。

          1.3 安裝juddi及配置

          首先將juddi-0.9rc3\\webapp下的juddi文件夾復制到Tomcat下的webapps中,并將 mysql-connector-java-3.1.7\\mysql-connector-java-3.1.7-bin.jar復制到Tomcat 5.0\\webapps\\juddi\\WEB-INF\\lib下。

          下面就是連接數據庫的配置,在Tomcat/conf/server.xml的Host element中加入:
          <Context path="/juddi" docBase="juddi" debug="5" reloadable="true" crossContext="true">
          <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_juddiDB_log"
          suffix=".txt" timestamp="true"/>
          <Resource name="jdbc/juddiDB" auth="Container" type="javax.sql.DataSource"/>
          <ResourceParams name="jdbc/juddiDB">
          <parameter>
          <name>factory</name>
          <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
          </parameter>
          <!-- Maximum number of dB connections in pool. Make sure you
          configure your mysqld max_connections large enough to handle
          all of your db connections. Set to 0 for no limit. -->
          <parameter><name>maxActive</name><value>100</value></parameter>
          <!-- Maximum number of idle dB connections to retain in pool.
          Set to 0 for no limit. -->
          <parameter><name>maxIdle</name><value>30</value></parameter>
          <parameter><name>maxWait</name><value>10000</value></parameter>
          <!-- MySQL dB username and password for dB connections 帳號密碼根據數據庫安裝配置修改 -->
          <parameter><name>username</name><value>root</value></parameter>
          <parameter><name>password</name><value>****</value></parameter>
          <!-- Class name for mysql JDBC driver -->
          <parameter>
          <name>driverClassName</name>
          <value>com.mysql.jdbc.Driver</value>
          </parameter>
          <!-- The JDBC connection url for connecting to your MySQL dB.
          The autoReconnect=true argument to the url makes sure that the
          mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
          connection. mysqld by default closes idle connections after 8 hours.
          數據庫url連接配置
          -->
          <parameter>
          <name>url</name>
          <value>jdbc:mysql://host.domain.com:3306/juddi?autoReconnect=true</value>
          </parameter>
          <parameter>
          <name>validationQuery</name>
          <value>select count(*) from PUBLISHER</value>
          </parameter>
          </ResourceParams>
          </Context>

          1.4 本地安裝檢查

          訪問http://127.0.0.1:8080/juddi/happyjuddi.jsp頁面,此頁面檢查了jUDDI所必須的包和配置的正確性,并測試數據庫連接是否成功。 如果沒有紅色文字,即本地安裝成功,即可進行webservices的發布發現等服務。

          2 測試實例



          以上安裝成功的是UDDI的服務器端,而進行發布、查找服務的客戶端的應用則要用jUDDI、UDDI4J等包來進行開發。我們可以直接使用jUDDI自 帶的測試代碼來進行客戶端使用的學習。

          2.1 使用uddi4j測試

          使用uddi4j作為客戶端進行測試。

          代碼位置:juddi-0.9rc3\\src\\uddi4j\\org\\apache\\juddi\\uddi4j

          新建立好一個工程并引入此代碼,然后對代碼進行必要的修改,主要是包名和配置。引入必要的包,比如:junit.jar、 uddi4j.jar、juddi.jar、soap.jar等(因為歐的代碼庫中有很多種代碼,對應很多包,不知道其他哪些是必須的了:)。

          接著是數據庫的初始化,需要插入一個可以添加其他Publisher的Publisher,sql 語句: INSERT INTO PUBLISHER (PUBLISHER_ID,PUBLISHER_NAME,ENABLIED,ADMIN) VALUES ('juddi','juddi user','true','true');

          調試代碼后,運行TestAll測試,您可能會發現測試FAILURE很多,這些當中有些是測試代碼的錯誤,也有可能是juddi-0.9rc3的缺陷( juddi-0.9rc3不是正式發布版)。

          以下列舉一些本測試案例測試失敗的可能出現的修改方法:

          2.1.1 加載配置文件時訪問不到samples.prop

          我的解決辦法是將建立一個新配置文件位置,在工程目錄下的:conf\\samples.prop。

          在Configurator.load()方法中代碼可以這樣修改:
              Properties config = new Properties();
          try {
          config.load(new java.io.FileInputStream("./conf/samples.prop"));
          }
          catch (Exception e) {
          System.out.println("Error loading samples property file\\n" + e);
          }
          解決方法很多,您可以自己思索。

          2.1.2 TransportClassName配置錯誤

          如果錯誤提示中有這樣的報告,即可能是此錯誤:
          org.xml.sax.SAXParseException: Element or attribute do not match QName production: QName::=(NCName':')?NCName.

          在當前測試實例代碼中的默認配置(samples.prop)中,TransportClassName定義成org.uddi4j.transport.ApacheSOAPTransport, 而我們使用的包是axis.jar,因此需要修改成相應的類,代碼修改如下:
          # -----------------------------------------------------------------------

          # Transport classname. Typically defined on commandline as

          # -Dorg.uddi4j.TransportClassName=xxx.

          # -----------------------------------------------------------------------

          #TransportClassName=org.uddi4j.transport.ApacheSOAPTransport

          TransportClassName=org.uddi4j.transport.ApacheAxisTransport

          # TransportClassName=org.uddi4j.transport.HPSOAPTransport

          2.1.3 TestFindBusiness案例不通過

          TestFindBusiness中有大小寫匹配測試,但是在juddi-0.9rc3中的大小寫匹配(caseSensitiveMatch)有bug,因此可以將大小寫匹配的測 試案例注釋掉。

          2.1.4 PublisherManager的代碼錯誤

          在測試Test_save_tModel的時候_testAuthTokenExpired()中,我們測試過期驗證時,在錯誤匹配的時候,會出現測試失敗,如果捕捉這個 匹配的結果,你會發現,出錯的類型是E_authTokenRequired而不是期待的E_authTokenExpired。

          這是因為在我們所獲得的AuthToken是空的,在根源就是在PublisherManager. getExpiredAuthToken(String, String)方法中,代碼:
          RegistryProxy proxy = new RegistryProxy();
          proxy的實例的配置是空的。因此,我們修改這個方法變成:
            /**

          * changed by xio

          * @param publisher String

          * @param password String

          * @param testprops Properties:增加的參數,傳入基本配置

          * @return String

          */

          public static String getExpiredAuthToken(String publisher, String password,

          Properties testprops) {

          Properties props = new Properties();

          props.setProperty(RegistryProxy.ADMIN_ENDPOINT_PROPERTY_NAME,

          testprops.getProperty("adminURL"));

          props.setProperty(RegistryProxy.INQUIRY_ENDPOINT_PROPERTY_NAME,

          testprops.getProperty("inquiryURL"));

          props.setProperty(RegistryProxy.PUBLISH_ENDPOINT_PROPERTY_NAME,

          testprops.getProperty("publishURL"));



          RegistryProxy proxy = new RegistryProxy(props);

          AuthToken token = null;

          AuthInfo authInfo = null;

          String ret = null;

          try {

          token = proxy.getAuthToken(publisher, password);

          authInfo = token.getAuthInfo();

          ret = authInfo.getValue();

          System.out.println("getExpiredAuthToken:" + authInfo);

          proxy.discardAuthToken(authInfo);

          }

          catch (Exception ex) {

          ex.printStackTrace();

          }

          return ret;

          }

          2.2 使用jUDDI測試

          在juddi-0.9rc3版本中自帶的代碼中沒有客戶端的使用實例,雖然附帶了整個項目代碼的測試代碼,但是估計沒什么人喜歡從這里抽取學 習客戶端使用的學習。

          當然,學習的實例還是有的,在cvs當前的工程代碼中,有個samples的文件夾,這部分代碼便是一個十分齊全的實例(有幾個類沒完成, 但不影響:)。

          Cvs服務器數據:http://ws.apache.org/juddi/cvs.html

          Wincvs的使用請網上下載閱讀。

          其他:在進行代碼學習的同時,建議閱讀webservices相關資料文檔。強烈建議閱讀:理解 UDDI 注冊中心的 WSDL 系列 (http://www-900.ibm.com/developerWorks/cn/webservices/ws-uwsdl/part1/)

          參考資料:
          http://wiki.apache.org/ws/jUDDI_HOW-TOs
          http://ws.apache.org/juddi/lists.html

          原作者:xio@qq.com
          來 源:http://xio.mblogger.cn



          原文地址:http://it.13520.org/ArticleView/2005-9-7/Article_View_121697.Htm

          posted on 2006-07-18 15:04 hopeshared 閱讀(2114) 評論(0)  編輯  收藏 所屬分類: Web Service
          主站蜘蛛池模板: 武鸣县| 五台县| 德州市| 鲁山县| 青海省| 柳河县| 安图县| 阳泉市| 嵊州市| 太仓市| 镇赉县| 沭阳县| 永清县| 辽宁省| 永登县| 江津市| 肇州县| 内丘县| 禄丰县| 丽水市| 甘谷县| 襄垣县| 伊吾县| 丰原市| 金昌市| 隆尧县| 揭西县| 安西县| 沙河市| 宝山区| 吉首市| 砚山县| 宁陕县| 库尔勒市| 林甸县| 平陆县| 同心县| 青河县| 晴隆县| 庆元县| 凉山|