程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> jUDDI 簡單安裝使用

jUDDI 簡單安裝使用

編輯:關於JAVA

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中加入:

suffix=".txt" timestamp="true"/>

factory

org.apache.commons.dbcp.BasicDataSourceFactory

maxActive100

maxIdle30

maxWait10000

usernameroot

passWord****

driverClassName

com.MySQL.jdbc.Driver

url

jdbc:MySQL://host.domain.com:3306/juddi?autoReconnect=true

validationQuery

select count(*) from PUBLISHER

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved