/*
* Copyright (c) 2003 Sun Microsystems, Inc. All rights reserved. U.S.
* Government Rights - Commercial software. Government users are subject
* to the Sun Microsystems, Inc. standard license agreement and
* applicable provisions of the FAR and its supplements. Use is subject
* to license terms.
*
* This distribution may include materials developed by third parties.
* Sun, Sun Microsystems, the Sun logo, Java and J2EE are trademarks
* or registered trademarks of Sun Microsystems, Inc. in the U.S. and
* other countries.
*
* Copyright (c) 2003 Sun Microsystems, Inc. Tous droits reserves.
*
* Droits du gouvernement americain, utilisateurs gouvernementaux - logiciel
* commercial. Les utilisateurs gouvernementaux sont soumis au contrat de
* licence standard de Sun Microsystems, Inc., ainsi qu'aux dispositions
* en vigueur de la FAR (Federal Acquisition Regulations) et des
* supplements a celles-ci. Distribue par des licences qui en
* restreignent l'utilisation.
*
* Cette distribution peut comprendre des composants developpes par des
* tierces parties. Sun, Sun Microsystems, le logo Sun, Java et J2EE
* sont des marques de fabrique ou des marques deposees de Sun
* Microsystems, Inc. aux Etats-Unis et dans d'autres pays.
*/
package com.sun.ebank.ejb.customer;
import java.sql.*;
import javax.sql.*;
import java.util.*;
import javax.ejb.*;
import javax.naming.*;
import com.sun.ebank.ejb.exception.MissingPrimaryKeyException;
import com.sun.ebank.util.Debug;
import com.sun.ebank.util.CustomerDetails;
import com.sun.ebank.util.CodedNames;
public class CustomerBean implements EntityBean {
private String customerId;
private String lastName;
private String firstName;
private String middleInitial;
private String street;
private String city;
private String state;
private String zip;
private String phone;
private String email;
private EntityContext context;
private Connection con;
// business methods
public CustomerDetails getDetails() {
Debug.print("CustomerBean getDetails");
return new CustomerDetails (customerId, lastName,
firstName, middleInitial, street, city, state,
zip, phone, email);
}
public void setLastName(String lastName) {
Debug.print("CustomerBean setLastName");
this.lastName = lastName;
}
public void setFirstName(String firstName) {
Debug.print("CustomerBean setFirstName");
this.firstName = firstName;
}
public void setMiddleInitial(String middleInitial) {
Debug.print("CustomerBean setMiddleInitial");
this.middleInitial = middleInitial;
}
public void setStreet(String street) {
Debug.print("CustomerBean setStreet");
this.street = street;
}
public void setCity(String city) {
Debug.print("CustomerBean setCity");
this.city = city;
}
public void setState(String state) {
Debug.print("CustomerBean setState");
this.state = state;
}
public void setZip(String zip) {
Debug.print("CustomerBean setZip");
this.zip = zip;
}
public void setPhone(String phone) {
Debug.print("CustomerBean setPhone");
this.phone = phone;
}
public void setEmail(String email) {
Debug.print("CustomerBean setEmail");
this.email = email;
}
// ejb methods
public String ejbCreate (String customerId, String lastName,
String firstName, String middleInitial, String street,
String city, String state, String zip, String phone,
String email)
throws CreateException, MissingPrimaryKeyException {
Debug.print("CustomerBean ejbCreate");
if ((customerId == null) || (customerId.trim().length() == 0)) {
throw new MissingPrimaryKeyException
("ejbCreate: customerId arg is null or empty");
}
this.customerId = customerId;
this.lastName = lastName;
this.firstName = firstName;
this.middleInitial = middleInitial;
this.street = street;
this.city = city;
this.state = state;
this.zip = zip;
this.phone = phone;
this.email = email;
try {
insertRow();
} catch (Exception ex) {
throw new EJBException("ejbCreate: " +
ex.getMessage());
}
return customerId;
}
public String ejbFindByPrimaryKey(String primaryKey)
throws FinderException {
Debug.print("CustomerBean ejbFindByPrimaryKey");
boolean result;
try {
result = selectByPrimaryKey(primaryKey);
} catch (Exception ex) {
throw new EJBException("ejbFindByPrimaryKey: " +
ex.getMessage());
}
if (result) {
return primaryKey;
}
else {
throw new ObjectNotFoundException
("Row for id " + primaryKey + " not found.");
}
}
public Collection ejbFindByAccountId(String accountId)
throws FinderException {
Debug.print("CustomerBean ejbFindByAccountId");
Collection result;
try {
result = selectByAccountId(accountId);
} catch (Exception ex) {
throw new EJBException("ejbFindByAccountId " +
ex.getMessage());
}
return result;
}
public Collection ejbFindByLastName(String lastName)
throws FinderException {
Debug.print("CustomerBean ejbFindByLastName");
Collection result;
try {
result = selectByLastName(lastName);
} catch (Exception ex) {
throw new EJBException("ejbFindByLastName " +
ex.getMessage());
}
return result;
}
public void ejbRemove() {
Debug.print("CustomerBean ejbRemove");
try {
deleteRow(customerId);
} catch (Exception ex) {
throw new EJBException("ejbRemove: " +
ex.getMessage());
}
}
public void setEntityContext(EntityContext context) {
Debug.print("CustomerBean setEntityContext");
this.context = context;
}
public void unsetEntityContext() {
Debug.print("CustomerBean unsetEntityContext");
}
public void ejbLoad() {
Debug.print("CustomerBean ejbLoad");
try {
loadCustomer();
} catch (Exception ex) {
throw new EJBException("ejbLoad: " +
ex.getMessage());
}
}
public void ejbStore() {
Debug.print("CustomerBean ejbStore");
try {
storeCustomer();
} catch (Exception ex) {
throw new EJBException("ejbStore: " +
ex.getMessage());
}
}
public void ejbActivate() {
Debug.print("CustomerBean ejbActivate");
customerId = (String)context.getPrimaryKey();
}
public void ejbPassivate() {
Debug.print("CustomerBean ejbPassivate");
customerId = null;
}
public void ejbPostCreate(String customerId, String lastName,
String firstName, String middleInitial, String street,
String city, String state, String zip, String phone,
String email) {}
/*********************** Database Routines *************************/
private void makeConnection() {
Debug.print("CustomerBean makeConnection");
try {
InitialContext ic = new InitialContext();
DataSource ds = (DataSource) ic.lookup(CodedNames.BANK_DATABASE);
con = ds.getConnection();
} catch (Exception ex) {
throw new EJBException("Unable to connect to database. " +
ex.getMessage());
}
} // makeConnection
private void releaseConnection() {
Debug.print("CustomerBean releaseConnection");
try {
con.close();
} catch (SQLException ex) {
throw new EJBException("releaseConnection: " + ex.getMessage());
}
} // releaseConnection
private void insertRow () throws SQLException {
Debug.print("CustomerBean insertRow");
makeConnection();
String insertStatement =
"insert into customer values ( ? , ? , ? , ? , ? , " +
" ? , ? , ? , ? , ? )";
PreparedStatement prepStmt =
con.prepareStatement(insertStatement);
prepStmt.setString(1, customerId);
prepStmt.setString(2, lastName);
prepStmt.setString(3, firstName);
prepStmt.setString(4, middleInitial);
prepStmt.setString(5, street);
prepStmt.setString(6, city);
prepStmt.setString(7, state);
prepStmt.setString(8, zip);
prepStmt.setString(9, phone);
prepStmt.setString(10, email);
prepStmt.executeUpdate();
prepStmt.close();
releaseConnection();
}
private void deleteRow(String id) throws SQLException {
Debug.print("CustomerBean deleteRow");
makeConnection();
String deleteStatement =
"delete from customer where customer_id = ? ";
PreparedStatement prepStmt =
con.prepareStatement(deleteStatement);
prepStmt.setString(1, id);
prepStmt.executeUpdate();
prepStmt.close();
releaseConnection();
}
private boolean selectByPrimaryKey(String primaryKey)
throws SQLException {
Debug.print("CustomerBean selectByPrimaryKey");
makeConnection();
String selectStatement =
"select customer_id " +
"from customer where customer_id = ? ";
PreparedStatement prepStmt =
con.prepareStatement(selectStatement);
prepStmt.setString(1, primaryKey);
ResultSet rs = prepStmt.executeQuery();
boolean result = rs.next();
prepStmt.close();
releaseConnection();
return result;
}
private Collection selectByAccountId(String accountId)
throws SQLException {
Debug.print("CustomerBean selectByAccountId");
makeConnection();
String selectStatement =
"select customer_id " +
"from customer_account_xref " +
"where account_id = ? ";
PreparedStatement prepStmt =
con.prepareStatement(selectStatement);
prepStmt.setString(1, accountId);
ResultSet rs = prepStmt.executeQuery();
ArrayList a = new ArrayList();
while (rs.next()) {
a.add(rs.getString(1));
}
prepStmt.close();
releaseConnection();
return a;
}
private Collection selectByLastName(String lastName)
throws SQLException {
Debug.print("CustomerBean selectByLastName");
makeConnection();
String selectStatement =
"select customer_id " +
"from customer " +
"where last_name = ? ";
PreparedStatement prepStmt =
con.prepareStatement(selectStatement);
prepStmt.setString(1, lastName);
ResultSet rs = prepStmt.executeQuery();
ArrayList a = new ArrayList();
while (rs.next()) {
a.add(rs.getString(1));
}
prepStmt.close();
releaseConnection();
return a;
}
private void loadCustomer() throws SQLException {
Debug.print("CustomerBean loadCustomer");
makeConnection();
String selectStatement =
"select last_name, first_name, middle_initial, " +
"street, city, state, zip, phone, email " +
"from customer where customer_id = ? ";
PreparedStatement prepStmt =
con.prepareStatement(selectStatement);
prepStmt.setString(1, customerId);
ResultSet rs = prepStmt.executeQuery();
if (rs.next()) {
lastName = rs.getString(1);
firstName = rs.getString(2);
middleInitial = rs.getString(3);
street = rs.getString(4);
city = rs.getString(5);
state = rs.getString(6);
zip = rs.getString(7);
phone = rs.getString(8);
email = rs.getString(9);
prepStmt.close();
releaseConnection();
}
else {
prepStmt.close();
releaseConnection();
throw new NoSuchEntityException("Row for id " +
customerId + " not found in database.");
}
}
private void storeCustomer() throws SQLException {
Debug.print("CustomerBean storeCustomer");
makeConnection();
String updateStatement =
"update customer " +
"set last_name = ? , first_name = ? , " +
"middle_initial = ? , street = ? , city = ? , " +
"state = ? , zip = ? , phone = ? , email = ? " +
"where customer_id = ? ";
PreparedStatement prepStmt =
con.prepareStatement(updateStatement);
prepStmt.setString(1, lastName);
prepStmt.setString(2, firstName);
prepStmt.setString(3, middleInitial);
prepStmt.setString(4, street);
prepStmt.setString(5, city);
prepStmt.setString(6, state);
prepStmt.setString(7, zip);
prepStmt.setString(8, phone);
prepStmt.setString(9, email);
prepStmt.setString(10, customerId);
int rowCount = prepStmt.executeUpdate();
prepStmt.close();
releaseConnection();
if (rowCount == 0) {
throw new EJBException("Storing row for id " + customerId + " failed.");
}
}
} // CustomerBean