BMP学习笔记

今天主要是从写程序的角度来学习BMP的,主要学习如何对EntityBean的接口进行编程。目前对以下接口总算弄明白了些:

ejbCreate()

 

 

 

 

 

 

 

 

 

 

 

ejbPostCreate()

 

 

 

 

 

 

 

 

 

 

 

ejbRemove()

 

 

 

 

 

 

 

 

 

 

 

ejbFindByPrimaryKey()

 

 

 

 

 

 

 

 

 

 

 

ejbLoad()

 

 

 

 

 

 

 

 

 

 

 

ejbStore()

 

 

 

 

 

 

 

 

 

 

 

unsetEntityContext()

 

 

 

 

 

 

 

 

 

 

 

setEntityContext()

 

 

 

 

 

 

 

 

 

 

 

ejbHome()

一、理解接口

 

 

 

 

 

 

 

 

 

 

 

1.         ejbCreate()ejbPostCreate()

 

 

 

 

 

 

 

 

 

 

 

首先,ejbCreate()ejbPostCreate()必须成对出现。ejbCreate()的参数列表是什么,ejbPostCreate()的参数列表也必须是什么,也即完全一致。

其次,从调用顺序上来看,容器先调用ejbCreate(),然后调用ejbPostCreate()

最后看看他们的功能。ejbCreate()中的代码是向数据库中插入一行数据,即使用Insert语句。在Home接口中有一个和ejbCreate()相对应的create()方法,对应法则是参数列表相同。客户程序一般通过Home接口的create()方法来插入一行数据,create()方法将这个请求代理给ejbCreate()来完成。

2.         ejbRemove()

 

 

 

 

 

 

 

 

 

 

 

这个的功能和ejbCreate()恰恰相反,ejbRemove()是从数据库中删除一行数据,使用Delete语句。没太多可说的,注意删除的时候应从EntityContext获得要删除的行的主键。

3.         ejbFindByPrimaryKey()

 

 

 

 

 

 

 

 

 

 

 

这个比较有意思。方法签名为:

[PrimaryKey] ejbFindByPrimaryKey( [PrimaryKey] pk )

[PrimaryKey]EntityBean的主键类。按理说应是由主键得到代表该行数据的实体Bean,但这里却返回的依然是主键(容器将使用这个主键,然后在Home接口的相应方法中返回正确的实体BeanHome接口的实现代码都是由容器自动生成的)。其实你可以什么也不做,直接把pk参数当作返回值返回也是可以的,当然,前提是这个主键所代表的行必须存在。

       所以,这个方法的正确实现方式是:用这个主键到数据库中去查找数据,如果有这行数据就把这个主键直接返回,由容器来自动生成相应的实体Bean返回给客户(实际的处理过程可能是:容器实例化一个EntityBean,然后调用setEntityContext()方法,这个方法的参数EntityContext将包含你返回的主键,然后再调用ejbLoad(),在ejbLoad()中获取所有的数据,这样一个正确的实体Bean就生成好,可以给客户使用了);如果没有这样一行数据,你就直接返回null,容器就知道查找失败了。

       其他的Finder方法也一样,只是ejbFindByPrimaryKey()是必须要的。

4.         ejbLoad()ejbStore()

 

 

 

 

 

 

 

 

 

 

 

ejbLoad()就是从数据库中读取数据,然后更新实体Bean的各个数据域;

ejbStore()正好相反,是将自己的各个数据域写入数据库中。

唯一需要区别的是,ejbLoad()发生的时候,实体Bean还未和具体的一行数据关联,因此,主键应从EntityContext对象中获得;而ejbStore()发生的时候,实体Bean和数据库中的某一行数据肯定已经关联,你可以使用实体Bean本身的数据域来获取主键。

5.         unsetEntityContext()setEntityContext()

 

 

 

 

 

 

 

 

 

 

 

这个也很简单,就是设置实体BeanEntityContext对象,使得实体Bean可以获得环境信息。最常用的方法就是EntityContext.getPrimaryKey()了,可以通过这个方法来获取实体Bean对应的主键。

6.         ejbHome()

 

 

 

 

 

 

 

 

 

 

 

这是一个特殊的接口方法,它不与任何给定的数据实例(或行)相关,比如要想知道现在有多少用户,我们可以通过返回用户表的行数来获得,这个就与具体的数据实例无关。

客户端一般通过Home接口来调用它。与其他方法不同的是:调用它时,容器是从缓存池中找一个Bean来完成这个方法的,更具体的说,容器并未调用这个BeansetEntityContext()方法,也即该Bean未和任何具体的数据行相关联,这是与其他方法最大的不同。

这个方法是在Home接口中定义的,实现是在Bean类完成的,关联的方式是:返回值和参数列表相一致,在Home接口中的方法名为xxxx(),则在Bean类中方法名变为ejbHomeXxxx(),即加上ejbHome前缀,并把第一个字母大写。

【示例】

       Home接口中定义方法为:

public [return value] xxxx( [parameters list] );

 

 

 

 

 

 

 

 

 

 

 

       Bean类中定义为:

public [return value] ejbHomeXxxx( [parameters list] ) { //具体实现… }

7.         其他的访问函数:setXXX()getXXX()

 

 

 

 

 

 

 

 

 

 

 

这些函数很简单。主要是给客户端使用的。在调用getXXX()方法前,ejbLoad()已经被容器调用过了,所以你只需很简单的把相应的数据域返回给客户就可以了。调用setXXX()也一样,只需简单把相应数据域设置成参数所传递的值即可,真正写入数据库的操作是在ejbStore()中完成的。

二、总结

 

 

 

 

 

 

 

 

 

 

 

需要编写SQL语句的方法,即需要访问数据库的方法:

 

 

 

 

 

 

 

 

 

 

 

ejbCreate()

 

 

 

 

 

 

 

 

 

 

 

ejbPostCreate()

 

 

 

 

 

 

 

 

 

 

 

ejbRemove()

 

 

 

 

 

 

 

 

 

 

 

ejbFindByPrimaryKey()

 

 

 

 

 

 

 

 

 

 

 

ejbLoad()

 

 

 

 

 

 

 

 

 

 

 

ejbStore()

 

 

 

 

 

 

 

 

 

 

 

需要从EntityContext中获取主键的函数:

 

 

 

 

 

 

 

 

 

 

 

ejbLoad()

 

 

 

 

 

 

 

 

 

 

 

setXXX()

 

 

 

 

 

 

 

 

 

 

 

getXXX()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

代码示例package iscas.bookstore.DALayer;

import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;
import javax.ejb.FinderException;
import java.sql.*;
import javax.naming.*;

public class UsersBean implements EntityBean {
    EntityContext entityContext;
    String userID;
    String password;

    public String ejbCreate(String userID, String pwd) throws CreateException {
        setUserID(userID);
        setPassword(pwd);

        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = this.getConnection();
            pstmt = conn.prepareStatement(
                    "insert into Users(UserID,password) values(?,?)");
            pstmt.setString(1, this.userID);
            pstmt.setString(2, this.password);

            pstmt.executeUpdate();

            return this.userID;
        } catch (Exception e) {
            //e.printStackTrace();
            throw new CreateException(e.toString());
        } finally {
            try {
                if (pstmt != null) {
                    pstmt.close();
                }
            } catch (Exception e) {

            }
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {

            }

        }
    }

    public void ejbPostCreate(String userID, String pwd) throws CreateException {
    }

    public void ejbRemove() throws RemoveException {
        String uid = (String) entityContext.getPrimaryKey();

        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = this.getConnection();
            pstmt = conn.prepareStatement(
                    "delete from Users where UserID=?");
            pstmt.setString(1, uid);

            pstmt.executeUpdate();
        } catch (Exception e) {
        } finally {
            try {
                if (pstmt != null) {
                    pstmt.close();
                }
            } catch (Exception e) {

            }
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {

            }
        }
    }

    public void setUserID(String userID) {

        this.userID = userID;
    }

    public String getUserID() {
        return userID;
    }

    public String ejbFindByPrimaryKey(String userID) throws
            FinderException {
        boolean succ = false;
        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = this.getConnection();
            pstmt = conn.prepareStatement(
                    "select * from Users where UserID=?");
            pstmt.setString(1, userID);

            ResultSet rs = pstmt.executeQuery();
            rs.next();

            succ = true;

        } catch (Exception e) {
            throw new FinderException(e.toString());
        } finally {
            try {
                if (pstmt != null) {
                    pstmt.close();
                }
            } catch (Exception e) {

            }
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {

            }
        }

        if (succ) {
            return userID;
        } else {
            return null;
        }
    }

    public void ejbLoad() {
        String uid = (String)this.entityContext.getPrimaryKey();

        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = this.getConnection();
            pstmt = conn.prepareStatement(
                    "select * from Users where UserID=?");
            pstmt.setString(1, uid);

            ResultSet rs = pstmt.executeQuery();
            rs.next();
            this.userID = rs.getString("UserID");
            this.password = rs.getString("password");
        } catch (Exception e) {
        } finally {
            try {
                if (pstmt != null) {
                    pstmt.close();
                }
            } catch (Exception e) {

            }
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {

            }
        }


    }

    public void ejbStore() {
        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = this.getConnection();
            pstmt = conn.prepareStatement(
                    "update Users set UserID=?, password=? where UserID=?");
            pstmt.setString(1, this.userID);
            pstmt.setString(2, this.password);
            pstmt.setString(3, this.userID);

            pstmt.executeUpdate();
        } catch (Exception e) {
        } finally {
            try {
                if (pstmt != null) {
                    pstmt.close();
                }
            } catch (Exception e) {

            }
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {

            }
        }

    }

    public void ejbActivate() {
    }

    public void ejbPassivate() {
    }

    public void unsetEntityContext() {
        this.entityContext = null;
    }

    public void setEntityContext(EntityContext entityContext) {
        this.entityContext = entityContext;
    }

    public void setPassword(String password) {

        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    private Connection getConnection() throws Exception {
        try {
            Context ctx = new InitialContext();
            javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(
                    "java:MSSQLDS");
            return ds.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }
}

package iscas.bookstore.DALayer;

import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;
import javax.ejb.FinderException;
import java.sql.*;
import javax.naming.*;

public class UsersBean implements EntityBean {
    EntityContext entityContext;
    String userID;
    String password;

    public String ejbCreate(String userID, String pwd) throws CreateException {
        setUserID(userID);
        setPassword(pwd);

        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = this.getConnection();
            pstmt = conn.prepareStatement(
                    "insert into Users(UserID,password) values(?,?)");
            pstmt.setString(1, this.userID);
            pstmt.setString(2, this.password);

            pstmt.executeUpdate();

            return this.userID;
        } catch (Exception e) {
            //e.printStackTrace();
            throw new CreateException(e.toString());
        } finally {
            try {
                if (pstmt != null) {
                    pstmt.close();
                }
            } catch (Exception e) {

            }
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {

            }

        }
    }

    public void ejbPostCreate(String userID, String pwd) throws CreateException {
    }

    public void ejbRemove() throws RemoveException {
        String uid = (String) entityContext.getPrimaryKey();

        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = this.getConnection();
            pstmt = conn.prepareStatement(
                    "delete from Users where UserID=?");
            pstmt.setString(1, uid);

            pstmt.executeUpdate();
        } catch (Exception e) {
        } finally {
            try {
                if (pstmt != null) {
                    pstmt.close();
                }
            } catch (Exception e) {

            }
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {

            }
        }
    }

    public void setUserID(String userID) {

        this.userID = userID;
    }

    public String getUserID() {
        return userID;
    }

    public String ejbFindByPrimaryKey(String userID) throws
            FinderException {
        boolean succ = false;
        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = this.getConnection();
            pstmt = conn.prepareStatement(
                    "select * from Users where UserID=?");
            pstmt.setString(1, userID);

            ResultSet rs = pstmt.executeQuery();
            rs.next();

            succ = true;

        } catch (Exception e) {
            throw new FinderException(e.toString());
        } finally {
            try {
                if (pstmt != null) {
                    pstmt.close();
                }
            } catch (Exception e) {

            }
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {

            }
        }

        if (succ) {
            return userID;
        } else {
            return null;
        }
    }

    public void ejbLoad() {
        String uid = (String)this.entityContext.getPrimaryKey();

        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = this.getConnection();
            pstmt = conn.prepareStatement(
                    "select * from Users where UserID=?");
            pstmt.setString(1, uid);

            ResultSet rs = pstmt.executeQuery();
            rs.next();
            this.userID = rs.getString("UserID");
            this.password = rs.getString("password");
        } catch (Exception e) {
        } finally {
            try {
                if (pstmt != null) {
                    pstmt.close();
                }
            } catch (Exception e) {

            }
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {

            }
        }


    }

    public void ejbStore() {
        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = this.getConnection();
            pstmt = conn.prepareStatement(
                    "update Users set UserID=?, password=? where UserID=?");
            pstmt.setString(1, this.userID);
            pstmt.setString(2, this.password);
            pstmt.setString(3, this.userID);

            pstmt.executeUpdate();
        } catch (Exception e) {
        } finally {
            try {
                if (pstmt != null) {
                    pstmt.close();
                }
            } catch (Exception e) {

            }
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {

            }
        }

    }

    public void ejbActivate() {
    }

    public void ejbPassivate() {
    }

    public void unsetEntityContext() {
        this.entityContext = null;
    }

    public void setEntityContext(EntityContext entityContext) {
        this.entityContext = entityContext;
    }

    public void setPassword(String password) {

        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    private Connection getConnection() throws Exception {
        try {
            Context ctx = new InitialContext();
            javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(
                    "java:MSSQLDS");
            return ds.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值