jUDDI 简单安装使用
2024-07-21 02:14:10
供稿:网友
来源:http://xio.mblogger.cn
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 ql/mysql/create_database.sql, juddi-0.9rc3 ql/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 rc/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 amples.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
原作者:[email protected]来 源:http://xio.mblogger.cn
,欢迎访问网页设计爱好者web开发。