?? tellerbean.java
字號:
/* * * Copyright 2001 Sun Microsystems, Inc. All Rights Reserved. * * This software is the proprietary information of Sun Microsystems, Inc. * Use is subject to license terms. * */import java.util.*;import javax.ejb.*;import java.sql.*;import javax.sql.*;import javax.naming.*;import javax.transaction.*;public class TellerBean implements SessionBean { private String customerId; private double machineBalance; private SessionContext context; private Connection con; private String dbName = "java:comp/env/jdbc/TellerDB"; public void withdrawCash(double amount) { UserTransaction ut = context.getUserTransaction(); try { ut.begin(); updateChecking(amount); machineBalance -= amount; insertMachine(machineBalance); ut.commit(); } catch (Exception ex) { try { ut.rollback(); } catch (SystemException syex) { throw new EJBException ("Rollback failed: " + syex.getMessage()); } throw new EJBException ("Transaction failed: " + ex.getMessage()); } } public double getCheckingBalance() { try { return selectChecking(); } catch (SQLException ex) { throw new EJBException ("Unable to get balance: " + ex.getMessage()); } } public void ejbCreate(String id) throws CreateException { customerId = id; try { makeConnection(); machineBalance = selectMachine(); } catch (Exception ex) { throw new CreateException(ex.getMessage()); } } public void ejbRemove() { try { con.close(); } catch (SQLException ex) { throw new EJBException(ex.getMessage()); } } public void ejbActivate() { try { makeConnection(); } catch (Exception ex) { throw new EJBException(ex.getMessage()); } } public void ejbPassivate() { try { con.close(); } catch (SQLException ex) { throw new EJBException(ex.getMessage()); } } public void setSessionContext(SessionContext context) { this.context = context; } public TellerBean() {}/************************** Database Routines **********************/ private void makeConnection() throws NamingException, SQLException { InitialContext ic = new InitialContext(); DataSource ds = (DataSource) ic.lookup(dbName); con = ds.getConnection(); } private void updateChecking(double amount) throws SQLException { String updateStatement = "update checking set balance = balance - ? " + "where id = ?"; PreparedStatement prepStmt = con.prepareStatement(updateStatement); prepStmt.setDouble(1, amount); prepStmt.setString(2, customerId); prepStmt.executeUpdate(); prepStmt.close(); } private void insertMachine(double amount) throws SQLException { String insertStatement = "insert into cash_in_machine values " + "( ? , current_date )"; PreparedStatement prepStmt = con.prepareStatement(insertStatement); prepStmt.setDouble(1, amount); prepStmt.executeUpdate(); prepStmt.close(); } private double selectMachine() throws SQLException { String selectStatement = "select amount " + "from cash_in_machine " + "where time_stamp = " + "(select max(time_stamp) from cash_in_machine)"; PreparedStatement prepStmt = con.prepareStatement(selectStatement); ResultSet rs = prepStmt.executeQuery(); if (rs.next()) { double result = rs.getDouble(1); prepStmt.close(); return result; } else { prepStmt.close(); throw new EJBException ("Row for id " + customerId + " not found."); } } private double selectChecking() throws SQLException { String selectStatement = "select balance " + "from checking " + "where id = ?"; PreparedStatement prepStmt = con.prepareStatement(selectStatement); prepStmt.setString(1, customerId); ResultSet rs = prepStmt.executeQuery(); if (rs.next()) { double result = rs.getDouble(1); prepStmt.close(); return result; } else { prepStmt.close(); throw new EJBException ("Row for id " + customerId + " not found."); } }} // TellerBean
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -