技术开发 频道

设计模式应用之Observer模式

  2. 实现代码


  1) 定义监听接口ActionListener,作为用户登录和退出的监听接口,代码如下:
   

package test.pattern;      public interface ActionListener {    //登录    public void login(User user) throws CustomException;    //退出    public void logout(User user) throws CustomException;   }


  ActionListener的实现类DefaultLogonListener。用户在登录和退出的时候在相应的记录表中登记:

ActionListener的实现类DefaultLogonListener。用户在登录和退出的时候在相应的记录表中登记:
package test.pattern;      import org.apache.log4j.Logger;   import java.sql.Connection;   import java.sql.PreparedStatement;   import java.util.Map;      public class DefaultLogonListener implements ActionListener {    static Logger logger = Logger.getLogger(DefaultLogonListener.class);    public DefaultLogonListener() {    }    //登录    public void login(User user) throws CustomException {    Connection conn = null;    try {    //获得数据库连接    conn = ConnMgr.getConnection();    conn.setAutoCommit(false);    //定义sql语句    StringBuffer sqlstmt = new StringBuffer();    //判断用户是否已经在表中    //构造sql语句    sqlstmt.append("select count(*) v_count from LOGIN_USER where USERID =");    sqlstmt.append(user.getUserId());    logger.debug("sql语句:" + sqlstmt);    //取得结果    Map map = BusinessLogicQueryHelper.factory().getRecord(conn, sqlstmt.toString());    int iCount = Integer.parseInt(map.get("v_count").toString());    if (iCount > 0) {    //已在审核小组中存在,退出    return;    }    //否则,把该用户插入到用户登记表中 //执行sql语句    sqlstmt.append("insert into LOGIN_USER values (?,?)");    PreparedStatement stmt = conn.prepareStatement(sqlstmt.toString());    //设置参数    stmt.setInt(1, user.getUserId());//用户ID    stmt.setString(2, user.getUserName());//用户名称    //执行    stmt.execute();    conn.commit();//提交事务    } catch (Exception e) {    try {    conn.rollback();    } catch (Exception e2) {    }    throw new CustomException("login出错!" + e);    } finally {    ConnMgr.closeConnection(conn);//关闭数据库连接    }    }    //退出    public void logout(User user) throws CustomException {    Connection conn = null;    try {    //获取数据库连接    conn = ConnMgr.getConnection();    conn.setAutoCommit(false);    StringBuffer sqlstmt = new StringBuffer();    //用户退出的时候在用户登记表中删除该用户        //执行sql语句    sqlstmt.append("DELETE FROM LOGIN_USER WHERE USERID = ? ");    logger.debug("sql语句:" + sqlstmt);    PreparedStatement stmt = conn.prepareStatement(sqlstmt.toString());    stmt.setInt(1, user.getUserId());//用户ID    //执行    stmt.execute();    conn.commit();    } catch (Exception e) {    try {    conn.rollback();    } catch (Exception e2) {    }    throw new CustomException("logout出错!" + e);    } finally {    ConnMgr.closeConnection(conn);    }    }   }


  2) ActionListener的实现类LogonListener在用户登录和退出的时候更新相关的业务表单:

package test.pattern; import org.apache.log4j.Logger; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.Map; public class LogonListener implements ActionListener { static Logger logger = Logger.getLogger(LogonListener.class); int id = 0;//流程实例ID public LogonListener(int id) { this.id = id; } public LogonListener() { } //登录 public void login(User user) throws CustomException { Connection conn = null; try { //数据库连接 conn = ConnMgr.getConnection(); conn.setAutoCommit(false); //sql语句 StringBuffer sqlstmt = new StringBuffer(); //判断用户是否已经在表中 //构造sql语句 sqlstmt.append("select count(*) v_count from AUDIT_TEAM where USERID ="); sqlstmt.append(user.getUserId()); sqlstmt.append(" and INSTANCEID = "); sqlstmt.append(id); logger.debug("sql语句:" + sqlstmt); //取得结果 Map map = BusinessLogicQueryHelper.factory().getRecord(conn, sqlstmt.toString()); int iCount = Integer.parseInt(map.get("v_count").toString()); if (iCount > 0) { return; } //执行sql语句 sqlstmt.append("insert into AUDIT_TEAM values (?,?,?,?)"); PreparedStatement stmt = conn.prepareStatement(sqlstmt.toString()); //设置参数 stmt.setInt(1, id); stmt.setInt(2, user.getUserId()); stmt.setString(3, user.getUserName()); stmt.setString(4, "0"); //执行 stmt.execute(); conn.commit(); } catch (Exception e) { try { conn.rollback(); } catch (Exception e2) { } throw new CustomException ("出错!" + e); } finally { ConnMgr.closeConnection(conn); } } //退出 public void logout(User user) throws CustomException { Connection conn = null; try { //数据库连接 conn = ConnMgr.getConnection(); conn.setAutoCommit(false); StringBuffer sqlstmt = new StringBuffer(); //执行sql语句 sqlstmt.append("DELETE FROM AUDIT_TEAM WHERE USERID = ? AND INSTANCEID = ?"); sqlstmt.append(" and isnull(FLAG,'0') = '0'"); logger.debug("sql语句:" + sqlstmt); PreparedStatement stmt = conn.prepareStatement(sqlstmt.toString()); stmt.setInt(1, user.getUserId()); stmt.setInt(2, id); //执行 stmt.execute(); conn.commit(); } catch (Exception e) { try { conn.rollback(); } catch (Exception e2) { } throw new CustomException ("出错!" + e); } finally { ConnMgr.closeConnection(conn); } } }


  

0
相关文章