以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  我想做一个简单的拥有三层架构的web service  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=70376)


--  作者:lixiaoming
--  发布时间:12/11/2008 10:03:00 PM

--  我想做一个简单的拥有三层架构的web service
各位大侠,请指教,起初刚刚接触了web service想自己做一个简单的例子,我现在已经把,juddi+axis+MyEclipse+Tomcat+Mysql的一个试验平台搭建好了,uddi4j连接juddi也测试成功了。现在我想做一个简单的包括三层架构的web service,   希望各位可以指点指点:
首先,我做了如下的功夫
首先在myeclipse中新建了一个web project
接着:
  这里是个pojo类,名字为Product.java
  public class Product {
  private String pid;
  private String pname;
  private double price;
  private int cnt;
  private String ext;
  
  public int getCnt() {
    return cnt;
  }
  public void setCnt(int cnt) {
    this.cnt = cnt;
  }
  public String getExt() {
    return ext;
  }
  public void setExt(String ext) {
    this.ext = ext;
  }
  public String getPid() {
    return pid;
  }
  public void setPid(String pid) {
    this.pid = pid;
  }
  public String getPname() {
    return pname;
  }
  public void setPname(String pname) {
    this.pname = pname;
  }
  public double getPrice() {
    return price;
  }
  public void setPrice(double price) {
    this.price = price;
  }
}

接着我做了一个数据库连接的文件,,名字为:DBAccess.java
package com.icss.oa.opt;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBAccess {
  private static Connection _conn = null;

  public static Connection getConn() {
    try {
      Class.forName("com.mysql.jdbc.Driver");
      _conn = DriverManager.getConnection(
          "jdbc:mysql://127.0.0.1:3306/juddi", "root", "root");
    } catch (Exception e) {
      e.printStackTrace();
    }
    return _conn;
  }

  public static void closeConn(Statement stmt, ResultSet rs, Connection conn) {
    try {
      if (rs != null) {
        rs.close();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    try {
      if (stmt != null) {
        stmt.close();
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
    try {
      if (conn != null) {
        conn.close();
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }

  public static void closeConn() {
    try {
      if (_conn == null || _conn.isClosed()) {
        return;
      } else {
        _conn.close();
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }

  public void execUpdate() {
  }

  public ResultSet exceQuery(String sql) {
    ResultSet rs = null;
    try {
      if (_conn.isClosed()) {
        System.out.println("Conn is closed!!");
      }
      Statement stmt = _conn.createStatement();
      rs = stmt.executeQuery(sql);
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return rs;
  }
}

接着我又做了一个接口:Productoption.java

import java.util.ArrayList;

public interface Productoption {
public ArrayList getAllProducts();
} //里面有一个返回为ArrayList的方法

将这几个文件通过MyEclipse+Tomcat发布之后,进入发布后classes所在的文件夹:我的是C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\SimpleExample\WEB-INF\classes
在cmd中输入命令C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\SimpleExample\WEB-INF\classes> java org.apache.axis.wsdl.Java2WSDL  -o mb.wsdl -l "http://localhost:80/axis/services/Productoption" -n "urn:Productoption" -p"com.icss.oa.opt" "urn:Produtoption"  com.icss.oa.opt.Productoption 生成了mb.wsdl文件,接着在输入命令 java org.apache.axis.wsdl.WSDL2Java -o . -d Session -s -S true  -Nurn:Productoption com.icss.oa.opt mb.wsdl 生成了许多的.java文件,
最后就是在ProductoptionSoapBindingImpl.java中添加业务代码了,也就是说具体实现上面接口中的getAllProducts()方法了
具体代码如下:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import com.icss.oa.entity.Product;

public class ProductoptionSoapBindingImpl implements com.icss.oa.opt.Productoption{
    public java.lang.Object[] getAllProducts() throws java.rmi.RemoteException {
      Connection conn = null;    
         Statement stmt = null;    
         ResultSet rs = null;
         conn = DBAccess.getConn();
           String sql ="select * from product";
           
           ArrayList<Product> proList = new ArrayList<Product>();    
           
           try {
             stmt = conn.createStatement();
             rs = stmt.executeQuery(sql);
             
             Product product;
             
             while(rs.next()){
               product = new Product();
               
               product.setPid(rs.getString(1));
               product.setPname(rs.getString(2));
               product.setPrice(rs.getDouble(3));
               product.setCnt(rs.getInt(4));
               product.setExt(rs.getString(5));
               
               proList.add(product);
             }
           } catch (SQLException e) {
             e.printStackTrace();
           }finally{
             DBAccess.closeConn(stmt,rs,conn);
           }
          return proList.toArray();   
     
    }
最后我用   java     org.apache.axis.client.AdminClient  deploy.wsdd命令发布了这个方法
现在,我是想把getAllproducts()这个方法以web service的方式放到uddi上面,让人们可以查找并调用它。是不是不用使用  java     org.apache.axis.client.AdminClient  deploy.wsdd 命令而是直接把上面的mb.wsdl文件放到uddi上面啊,如果是的话,怎么放,可不可以指教一下呢。
如果完成了上述的步骤,下面应该做什么呢,是不是可以来编写客户端的代码了,客户端该如何调用这个服务呢,希望您能够指教


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
7,511.719ms