摘要:
本文记录了学习SOA,完成一个涉及到使用web Services访问mysql数据库的练习的过程
(附图)
【原创】船长的第一个SOA练习【SOA学习】
标题:
【原创】船长的第一个SOA练习【SOA学习】
作者:陈海青(josonchen)
日期:2007.11.21
摘要:
本文记录了学习SOA,完成一个涉及到使用web Services访问mysql数据库的练习的过程
关键字:
SOA , web Services, weblogic , workshop , mysql 5.0, java
刚参加完11月3日系分考试,试题多次涉及SOA 、ESB等内容,平时不注意学习这些,几乎被打败了 :(
正好有个学习SOA的机会,培训公司是武汉的圣伟思,可不能错过。今天是soa培训的第4天,培训效果不错,给我们培训宋老师懂的真多。我终于了解了诸如SOA、XSD、Web Services、ESB、WSDL......等东东,一大堆缩写,苦涩难懂,简直可用作密码。借助IDE的强大功能,而且终于完成了我的第一个SOA练习,记录脚印如下:
一:练习环境:
应用服务器:weblogic 8.1 、tomcat
数据库服务器:任选,我用的是mysql 5.0
开发工具:workshop/jbuilder 2006/记事本
开发语言:java /php /c#等。(
http://www.chq.name)
二:简单的开发需求:
1) 登录验证功能,做成webservices,发布出来,提供服务
2) 检查某个人的ID是否在黑名单里,做成webservices,发布出来,提供服务
(图一)
三:过程(以weblogic 8.1+ mysql 5.0+ workshop+ java为例)
1) 建立Web Services ,包括写Bean,生成WSDL。共有两个,一个验证密码,一个检查黑名单。
1、 新建一个“应用程序”,类型为“空的应用项目”,指定目录,如myWebServers01
2、 在其中新建一个“项目”,类型为“Web Services项目”,指定目录
3、 在其设计视图,右键添加一个方法,命名为login
4、 在源代码视图,写好login验证逻辑的代码。
5、 在login上右键—“生成WSDL文件”-----我们学得那么费劲,这里只是一个点击动作就over了
6、 在“应用程序”层次上,右键—“生成应用程序”,完成编译和部署工作。
7、 ,可以运行进行测试了。CTRL+F5
第一个Web Services工作完成,主要成果login.jws附后(WSDL不再附加了。在项目中可以直接查看):
再来一个,过程基本相同,主要是要访问数据库,时间关系,只是简单的不规范的示例,源码Blacklist.jws附后。
----------------------------------------------------
2) 建立B/S结构的Web应用,提供登录页面和输入页面,使用Web Services访问数据库等。
1、 新建一个项目,类型:“Web界面—web项目“
2、 在其设计视图,新建一个Action(动作)和Form,命名为login 和LoginForm。
3、 在login上右键-“编辑Bean”,添加属性:id/pwd
4、 在login上右键—“生成输入页面“,生成.jsp文件,
5、 调整工作流的指向,如图一所示,命名并为其链接改名。
6、 在其操作试图,右键—添加控件—web Service,添加login.、Blacklist两个web Service,其WSDL可通过其网址提供,如“http://localhost:7001/Ws_login/Blacklist.jws?WSDL”
7、 修改源码,添加逻辑处理的代码。
8、 在“应用程序”层次上,右键—“生成应用程序”,完成编译和部署工作。
9、 ,可以运行进行测试了。(http://www.chq.name)CTRL+F5
测试效果如附图。
(图二)
![Image Image](http://192.168.2.7/wordpress/wp-content/uploads/2007/11/soa1-2.jpg)
(图二)
![Image Image](http://192.168.2.7/wordpress/wp-content/uploads/2007/11/soa1-3.jpg)
(图三)
![Image Image](http://192.168.2.7/wordpress/wp-content/uploads/2007/11/soa1-4.jpg)
(图四)
![Image Image](http://192.168.2.7/wordpress/wp-content/uploads/2007/11/soa1-5.jpg)
(图五)
-------------------------------------------------------------------------------------------------------
源码1
------------------------------------------------login.Jws----
public class Login implements com.bea.jws.WebService
{
static final long serialVersionUID = 1L;
/**
* @common:operation
*/
public String login(String id,String pwd){
String result;
if (id.equalsIgnoreCase(pwd)){
result = "ok";
}
else
result= "yes";
return result;
}
}
-----------------------------------------------------------
源码2
--------------------------- Blacklist .jws--------------------------------
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.ResultSet;
public class Blacklist implements com.bea.jws.WebService
{
static final long serialVersionUID = 1L;
//定义相关属性(
http://www.hhrz.org)
//驱动程序名(
http://www.chq.name)
private String driverName = "com.mysql.jdbc.Driver";
//数据库用户名(
http://www.hhrz.org)
private String userName = "test";
//密码(
http://www.chq.name)
private String userPasswd = "test";
//数据库名(
http://www.hhrz.org)
private String dbName = "test";
//表名(
http://www.hhrz.org)
private String tableName = "blacklist";
//联结字符串(
http://www.hhrz.org)
private String url = "jdbc:mysql://localhost:3306/" + dbName + "?user=" + userName +
"&password=" + userPasswd;
//获得的链接结果(
http://www.hhrz.org)
private Connection connection;
private Statement stmt;
private ResultSet rs;
public Blacklist() {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
System.out.println("JdbcDriver Not Found.");
}
try {
connection = DriverManager.getConnection(url);
} catch (SQLException e) {
System.out.println("Create Connection failed .");
}
try {
//建立Statement Object(
http://www.hhrz.org)
stmt = connection.createStatement();
} catch (SQLException e) {
System.out.println("Create Statement failed .");
}
}
/**
* @common:operation
*/
public String getblacklist(String id) throws SQLException {
//设置并执行SQL语句 (
http://www.chq.name)
String query = "select * from " + tableName;
rs = stmt.executeQuery(query);
String ls_result = "No";
//得到结果集ResultSet(
http://www.chq.name)
while (rs.next()) {
if (id.equalsIgnoreCase(rs.getString(1))) {
ls_result = rs.getString(2);
break;
}
}
//executeUpdate()(http://www.chq.name)
//String upd = "insert into test (id,name) values(1001,xuzhaori)";
//int con = stmt.executeUpdate(upd);
//execute();(http://www.chq.name)
// closeConn();
//weblogic 中难道会自动管理数据库连接?关掉链接会报错。thinking。。(
http://www.chq.name)
return ls_result;
}
private void closeConn() throws SQLException {
try {
rs.close();
} catch (SQLException ex) {
System.out.println(ex.getStackTrace());
}
try {
stmt.close();
} catch (SQLException ex1) {
System.out.println(ex1.getStackTrace());
}
try {
connection.close();
}
catch (SQLException ex2) {
System.out.println(ex2.getStackTrace());
}
}
}
-----------------------------------------------------------
源码3
------------------------- Controller.jpf-----------------------------------
public class Controller extends PageFlowController
{
/**(http://www.chq.name)
* @common:control
*/
private webServices.InBlacklist inBlacklist;
/**(http://www.chq.name)
* @common:control
*/
private webServices.ws_login ws_login;
/**(http://www.chq.name)
* @jpf:action
* @jpf:forward name="login" path="login.jsp"
*/
protected Forward begin()
{
return new Forward("login");
}
/**(http://www.chq.name)
* @jpf:action
* @jpf:forward name="success" path="inputBlacklist.jsp"
* @jpf:forward name="fault" path="error.jsp"
*/
protected Forward login(LoginForm form)
{
String id = form.getId();
String pwd = form.getPwd();
String strTrue = ws_login.login(id,pwd);
if (strTrue.equalsIgnoreCase("ok")){
return new Forward("success");
}
else
return new Forward("fault");
}
/**(http://www.chq.name)
* @jpf:action
* @jpf:forward name="notinlist" path="notInBlacklist.jsp"
* @jpf:forward name="inlist" path="inBlacklist.jsp"
*/
protected Forward inBlacklist(InBlacklistForm form)
{
String id = form.getId();
String strIn = inBlacklist.getblacklist(id);
if(strIn.equalsIgnoreCase("NO"))
{
return new Forward("notinlist");
}
else
return new Forward("inlist");
}
/**(http://www.chq.name)
* FormData get and set methods may be overwritten by the Form Bean editor.
*/
public static class LoginForm extends FormData
{
private String pwd;
private String id;
public void setId(String id)
{
this.id = id;
}
public String getId()
{
return this.id;
}
public void setPwd(String pwd)
{
this.pwd = pwd;
}
public String getPwd()
{
return this.pwd;
}
}
/**(http://www.chq.name)
* FormData get and set methods may be overwritten by the Form Bean editor.
*/
public static class InBlacklistForm extends FormData
{
private String id;
private String nsrsbh;
public void setId(String id)
{
this.id = id;
}
public String getId()
{
return this.id;
}
}
}
------------------------------------------------------------