浏览 8226 次
精华帖 (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.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 代码
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |