【原创】船长的第一个SOA练习【SOA学习】

摘要:
本文记录了学习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,发布出来,提供服务
3)  做一个web应用,访问webservices,完成登录和查询功能。( http://www.chq.name
Image
(图一)
 
三:过程(以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.nameCTRL+F5
测试效果如附图。
Image
(图二)
Image
(图三)
Image
(图四)
Image
(图五)
-------------------------------------------------------------------------------------------------------
 
源码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;
        }
    }
}
 
 
------------------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个经典的约瑟夫问题。为了解决这个问题,我们可以使用一个循环链表来模拟这个过程。 首先,我们可以创建一个包含 N 个节点的循环链表,每个节点表示一个船员。然后,我们从第一个节点开始,依次报数,每当数到第 M 个节点时,就将该节点从链表中删除,直到链表中剩下 K 个节点为止。 具体实现步骤如下: 1. 定义一个节点类,包含两个属性:船员编号和指向下一个节点的指针。 2. 创建一个包含 N 个节点的循环链表,并将每个节点的船员编号依次设置为 1 到 N。 3. 从第一个节点开始,依次报数,每当数到第 M 个节点时,就将该节点从链表中删除。 4. 重复步骤 3,直到链表中剩下 K 个节点为止。 5. 输出剩下节点的船员编号,即为胜利者。 下面是 Python 代码实现: ```python class Node: def __init__(self, num): self.num = num # 船员编号 self.next = None # 下一个节点的指针 def josephus(n, m, k): # 创建循环链表 head = Node(1) cur = head for i in range(2, n+1): cur.next = Node(i) cur = cur.next cur.next = head # 开始游戏 cur = head while n > k: for i in range(m-2): cur = cur.next cur.next = cur.next.next n -= 1 # 输出胜利者的编号 while cur.next != cur: print(cur.num, end=' ') cur = cur.next print(cur.num) # 测试 josephus(10, 3, 4) # 输出:1 5 9 4 ``` 在上面的代码中,`josephus(n, m, k)` 函数接收三个参数:船员总数 `n`、每次报数的数字 `m` 和最终剩余的船员数 `k`,并输出胜利者的编号。 在函数内部,我们首先创建一个包含 N 个节点的循环链表,然后从第一个节点开始,依次报数,每当数到第 M 个节点时,就将该节点从链表中删除,直到链表中剩下 K 个节点为止。最后输出剩下节点的船员编号,即为胜利者。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值