论坛首页 Java企业应用论坛

JAVA WebService注册中心JUDDI使用方法(引用)

浏览 8196 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-10  
 jUDDI,发音(Judy),是服务于WebServices   的UDDI的java实现开源包。  
1   安装

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

目前的jUDDI的最新版本是0.9rc4(Release   Candidate   #4   for   Version   0.9),不过在这个版本中有一些的bug。  
juddi0.9版本发布应该是不会久。 

1.2   数据库安装
UDDI需要有一个地方来存储注册的数据,因此首先要选择一个关系数据库安装。JUDDI可以使用任何支持ANSI   standard   SQL关系数据库(   例如MySQL,   DB2,   Sybase,   JdataStore等)。本实例使用MySQL。  

数据库安装完成后,在MySQL数据库中运行juddi-0.9rc4\sql\mysql\create_database.sql,   juddi-0.9rc4\sql\mysql\insert_publishers.sql。数据库准备完成。  
1.3   安装juddi及配置
首先将juddi-0.9rc4\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中加入:  
xml 代码
  1. <Context   path="/juddi"   docBase="juddi"   debug="5"   reloadable="true"   crossContext="true" >  
  2.     <Logger   className="org.apache.catalina.logger.FileLogger"   prefix="localhost_juddiDB_log"     
  3.     suffix=".txt"   timestamp="true">  
  4.     <Resource   name="jdbc/juddiDB"   auth="Container"   type="javax.sql.DataSource">  
  5.     <ResourceParams   name="jdbc/juddiDB" >  
  6.         <parameter >  
  7.             <name >factory name >  
  8.             <value >org.apache.commons.dbcp.BasicDataSourceFactory value >  
  9.         parameter >  
  10.         <!---->
  11.                   configure   your   mysqld   max_connections   large   enough   to   handle   
  12.                   all   of   your   db   connections.   Set   to   0   for   no   limit.   -- >  
  13.         <parameter > <name >maxActive name > <value >100 value > parameter >  
  14.         <!---->
  15.                   Set   to   0   for   no   limit.   -- >  
  16.         <parameter > <name >maxIdle name > <value >30 value > parameter >  
  17.         <parameter > <name >maxWait name > <value >10000 value > parameter >  
  18.         >  
  19.         <parameter > <name >username name > <value >root value > parameter >  
  20.         <parameter > <name >password name > <value >**** value > parameter >  
  21.         >  
  22.         <parameter >  
  23.             <name >driverClassName name >  
  24.             <value >com.mysql.jdbc.Driver value >  
  25.         parameter >  
  26.         <!---->
  27.                   The   autoReconnect=true   argument   to   the   url   makes   sure   that   the   
  28.                   mm.mysql   JDBC   Driver   will   automatically   reconnect   if   mysqld   closed   the   
  29.                   connection.     mysqld   by   default   closes   idle   connections   after   8   hours.     
  30.                 数据库url连接配置   
  31.         -- >  
  32.         <parameter >  
  33.             <name >url name >  
  34.             <value >jdbc:mysql://host.domain.com:3306/juddi?autoReconnect=true value >  
  35.         parameter >  
  36.         <parameter >  
  37.                       <name >validationQuery name >  
  38.                       <value >select   count(*)   from   PUBLISHER value >  
  39.         parameter >  
  40.     ResourceParams >  
  41. 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的使用请网上下载阅读。
 
补充:
安装mysql      
把解压后的juddi下的webapp里的   juddi文件夹拷贝到Tomcat的webapps下
把juddi   下的   mysql目录下的两个脚本在   mysql中运行   创建表       我把这两个脚本拷到了e盘根目录下
mysql >\.   e:\create_datebase.sql
mysql >\.   e:\insert_publishers.sql   (注意先打开这个脚本   insert语句把无关字符删掉否则   不能直接运行)

配置tomcat   5.5的mysql数据源
    把tomcat驱动mysql-connector-java-5.0.4-bin.jar     添加到$tomcat_home$/commond/lib     以及webapp\juddi下的lib里
修改配置$tomcat_home$/conf/server.xml
    在 <globalnamingresources></globalnamingresources>    添加     (上面创建表时用的账户是sjp     密码   sjp     这个根据你自己的   修改下)
                    <resource auth="Container" name="jdbc/juddiDB"></resource>                            type="javax.sql.DataSource"   driverClassName="com.mysql.jdbc.Driver"
                            url="jdbc:mysql://localhost:3306/juddi?autoReconnect=true"
                            username="sjp"   password="sjp"   maxActive="20"   maxIdle="10"
                            maxWait="-1"  
                            factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"/ >
    在 <host></host>中添加
    <context path="/juddi" docbase="E:\apache-tomcat-5.5.20\webapps\juddi"></context>                debug="5"   reloadable="true"   crossContext="true" >
   
                          <resource auth="Container" name="jdbc/juddiDB"></resource>                            type="javax.sql.DataSource"   driverClassName="com.mysql.jdbc.Driver"
                            url="jdbc:mysql://localhost:3306/juddi?autoReconnect=true"
                            username="sjp"   password="sjp"   maxActive="20"   maxIdle="10"
                            maxWait="-1"  
                            factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"/ >

 

 
我们不对juddi中web.xml更改了   因为其中默认数据库源     jndi   名     为     jdbc/juddiDB     而我们上面设置数据源时就用这个名字   所以不更改了
  如果数据源不是这个名字     要更改   juddi下的   web.xml         以及   juddi.propertites   文件

启动Tomcat,浏览器中输入http://localhost:8080/juddi则可以看到index页面,点击"validate"页面出现配置信息,可以看到配置是否正确的信息。如果没有错误,则表明安装成功。

ps:     如果你用的是oracle     你要更改tomcat的端口号   因为   oracle要占用8080端口     而且要更改juddi里面的一些文件   如control.jsp   因为juddi默认是8080端口
 
xiaoxin 使用说明:
使用中发现配置数据源的时候需要将从网页上拷贝的内容整理一下,将多余的空格去掉,不然tomcat在启动的时候会解析不了配置文件。
这个是我配置oracle数据库成功的例子:
xml 代码
  1. <Context path="/juddi" docBase="juddi" debug="5" reloadable="true" crossContext="true">  
  2.    <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_juddiDB_log" suffix=".txt" timestamp="true"/>  
  3.    <Resource name="jdbc/juddiDB" auth="Container" type="javax.sql.DataSource"/>  
  4.    <ResourceParams name="jdbc/juddiDB">  
  5.        <parameter>  
  6.            <name>factory</name>  
  7.            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>  
  8.        </parameter>  
  9.        <parameter><name>maxActive</name><value>100</value></parameter>  
  10.        <parameter><name>maxIdle</name><value>30</value></parameter>  
  11.        <parameter><name>maxWait</name><value>10000</value></parameter>  
  12.        <parameter><name>username</name><value>juddi</value></parameter>  
  13.        <parameter><name>password</name><value>juddi</value></parameter>  
  14.        <parameter>  
  15.            <name>driverClassName</name>  
  16.            <value>oracle.jdbc.driver.OracleDriver</value>  
  17.        </parameter>  
  18.        <parameter>  
  19.            <name>url</name>  
  20.            <value>jdbc:oracle:thin:@192.168.1.99:1521:ZHXT</value>  
  21.        </parameter>  
  22.        <parameter>  
  23.            <name>validationQuery</name>  
  24.            <value>select count(*) from PUBLISHER</value>  
  25.        </parameter>  
  26.    </ResourceParams>  
  27. </Context>  
<context path="/juddi" docbase="juddi" debug="5" reloadable="true" crosscontext="true"></context>
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics