JAVA WebService注册中心JUDDI使用方法(引用)
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中加入:
访问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的使用请网上下载阅读。
把解压后的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端口
- <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>
- <parameter><name>maxActive</name><value>100</value></parameter>
- <parameter><name>maxIdle</name><value>30</value></parameter>
- <parameter><name>maxWait</name><value>10000</value></parameter>
- <parameter><name>username</name><value>juddi</value></parameter>
- <parameter><name>password</name><value>juddi</value></parameter>
- <parameter>
- <name>driverClassName</name>
- <value>oracle.jdbc.driver.OracleDriver</value>
- </parameter>
- <parameter>
- <name>url</name>
- <value>jdbc:oracle:thin:@192.168.1.99:1521:ZHXT</value>
- </parameter>
- <parameter>
- <name>validationQuery</name>
- <value>select count(*) from PUBLISHER</value>
- </parameter>
- </ResourceParams>
- </Context>
<context path="/juddi" docbase="juddi" debug="5" reloadable="true" crosscontext="true"></context>
JAVA WebService注册中心JUDDI使用方法(引用)相关推荐
- 如何在Java 8中将Lambda表达式转换为方法引用?
如果您使用Java 8进行编码,那么您会知道使用方法引用代替lambda表达式会使您的代码更具可读性,因此建议尽可能使用方法引用替换lambda表达式,但是,最大的问题是,您如何查找是否可以用方法引用 ...
- java 服务注册中心_服务治理的含义和java最流行的微服务框架服务治理注册中心的搭建...
原标题:服务治理的含义和java最流行的微服务框架服务治理注册中心的搭建 Spring Cloud Eureka基于Netflix Eureka做了二次封装,是Spring Cloud Netflix ...
- java中long如何使用_在Java中如何使用lambda和方法引用实现LongSupplier?
LongSupplier 是来自 java.util.function 包的内置函数接口.该接口不需要任何输入,但生成Long值输出.因为 LongSupplier 是一个函数接口,所以它可以用作 l ...
- java day24【Stream流、方法引用】
第一章 Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定"流"就一定是"IO流"呢?在Java 8中,得益于Lambda所带来的 ...
- 学习Java的第五天 | 定义方法 | 引用数据类型——类 | 访问权限-修饰符 | 全局变量与局部变量 | toString | 构造方法 | 方法重载
前面提到的,冒泡排序,二分查找,我们有时候写代码可能不止要查到一种数组的数据,这时候我们就很需要想循环那样的结构,来帮我们解决代码冗余的情况. 我们前面使用的main方法,是一个java程序的入口,我 ...
- JAVA进阶知识点总结 8【方法引用、Stream流】
01.第三章:方法引用_什么是方法引用 1).什么是"方法引用":指引用现有的方法代替Lambda表达式–当我们要写一个Lambda表达式做一些事情时,发现有些方法已经实现了我们要 ...
- Java: 函数式接口双冒号::实现方法引用,传递方法作为函数参数
方法引用是一种函数式接口的另一种书写方式 方法引用分为三种,方法引用通过一对双冒号:: 来表示 静态方法引用,通过类名::静态方法名, 如 Integer::parseInt 实例方法引用,通过实例对 ...
- java服务注册中心有哪些_Spring Cloud服务注册中心简述
概念 当一个大型系统拥有很多服务时,往往需要一个服务注册中心来管理这些服务,它可以提供如下功能: 登记每个服务提供的功能 检测每个服务是否可用,不可用的服务剔除 服务间互相调用时,通过服务注册中心很容 ...
- 【Java】JDK8新特性之方法引用
什么是方法引用 方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用. 如: List<String> list = Arrays.asList(&q ...
最新文章
- 程序员保值的5个秘密
- 窗口分析函数_13_生成相邻上一个元素
- 文本纠错pycorrector
- Kibana 的安装(Windows版本)新手入门
- 标准模板库之双向循环链表的内部关系
- 【机器学习】机器学习从零到掌握之九 -- 教你使用K近邻算法形成完整系统
- qt 正则 html,Qt 正则表达式 (一)
- 世界上最恐怖的格斗比赛---黑市拳赛
- 中国IT实验室--Visual C++编程电子书专题下载
- 路径规划基本介绍(一)
- windows 域,windows domain
- python MyQR制作动态二维码
- 简单理解下用户体验五要素
- 如何在ChemDraw中输入℃温度符号
- 简单的mg动画制作方法,看到就是赚到 | 万彩动画大师
- 中职计算机课题申报,中职计算机教研课题怎么申报
- 5个省,7大 “5G+智能电网” 落地应用案例!
- 383-基于kintex UltraScale XCKU040的双路QSFP+光纤PCIe 卡
- jsp+ssm计算机毕业设计电影影评网【附源码】
- 阿piu传-文档批量上传客户端豆丁版使用帮助
热门文章
- Android 哪个方向好,方向定位指南针(指北针)哪个好?最好用的手机指南针软件推荐...
- 蓝桥杯(python)——星系炸弹
- 使用ConnectifyInstaller软件模拟wifi热点,实现网络共享
- 声学所ZJ系列压电测试仪之多层压电陶瓷变压器的振动与疲劳
- 提示“正尝试安装的adobe flash player不是最新版本”的解决方法
- 51单片机c语言LED灯闪烁实验,实验一LED灯闪烁
- 算法与游戏实战技术之刀光拖尾实现
- 2023年2月天猫平台面膜品牌销量排行榜(天猫销售数据分析)
- Rust社区运营3周年总结
- 学iOS开发如何选择iOS培训机构之浅析