FileDocCategorySizeDatePackage
ProcessPaymentBean.javaAPI DocExample6371Thu May 23 17:51:24 BST 2002com.titan.processpayment

ProcessPaymentBean.java

package com.titan.processpayment;


import java.rmi.RemoteException;

import javax.ejb.SessionContext;
import javax.ejb.EJBException;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import java.sql.Connection;
import java.sql.PreparedStatement;
import javax.sql.DataSource;
import java.sql.SQLException;

import com.titan.customer.*;


public class ProcessPaymentBean implements javax.ejb.SessionBean
{
   final public static String CASH = "CASH";
   final public static String CREDIT = "CREDIT";
   final public static String CHECK = "CHECK";
   
   protected SessionContext context;
   
   public void ejbCreate ()
   {
   }
   
   public boolean byCash (CustomerRemote customer, double amount)
   throws PaymentException
   {
      return process (getCustomerID (customer), amount, CASH, null, -1, null, null);
   }
   
   public boolean byCheck (CustomerRemote customer, CheckDO check, double amount)
   throws PaymentException
   {
      int minCheckNumber = getMinCheckNumber ();
      if (check.checkNumber > minCheckNumber)
      {
         return process (getCustomerID (customer), amount, CHECK,
         check.checkBarCode, check.checkNumber, null, null);
      }
      else
      {
         throw new PaymentException ("Check number is too low. Must be at least "+minCheckNumber);
      }
   }
   
   public boolean byCredit (CustomerRemote customer, CreditCardDO card, double amount)
   throws PaymentException
   {
      if (card.expiration.before (new java.util.Date ()))
      {
         throw new PaymentException ("Expiration date has passed");
      }
      else
      {
         return process (getCustomerID (customer), amount,
         CREDIT, null, -1, card.number, new java.sql.Date (card.expiration.getTime ()));
      }
   }
   
   private boolean process (Integer customerID, double amount,
                            String type, String checkBarCode,
                            int checkNumber, String creditNumber,
                            java.sql.Date creditExpDate)
   throws PaymentException
   {
      
      System.out.println ("process() with customerID="+customerID+" amount="+amount);
      Connection con = null;
      PreparedStatement ps = null;
      
      try
      {
         con = getConnection ();
         
         ps = con.prepareStatement
         ("INSERT INTO payment (customer_id, amount, " + 
           "type, check_bar_code, " + 
           "check_number, credit_number, " + 
           "credit_exp_date) "+
          "VALUES (?,?,?,?,?,?,?)");
         ps.setInt (1,customerID.intValue ());
         ps.setDouble (2,amount);
         ps.setString (3,type);
         ps.setString (4,checkBarCode);
         ps.setInt (5,checkNumber);
         ps.setString (6,creditNumber);
         ps.setDate (7,creditExpDate);
         
         int retVal = ps.executeUpdate ();
         if (retVal!=1)
         {
            throw new EJBException ("Payment insert failed");
         }
         
         return true;
      } 
      catch(SQLException sql)
      {
         throw new EJBException (sql);
      } 
      finally
      {
         try { ps.close (); } catch (Exception e) {}
         try { con.close ();} catch (Exception e) {}
      }
   }
   
   public void ejbActivate ()
   {}
   public void ejbPassivate ()
   {}
   public void ejbRemove ()
   {}
   public void setSessionContext (SessionContext ctx)
   {
      context = ctx;
   }
   
   private Integer getCustomerID (CustomerRemote customer)
   {
      try
      {
         return (Integer)customer.getPrimaryKey ();
      } catch(RemoteException re)
      {
         throw new EJBException (re);
      }
   }
   
   private Connection getConnection () throws SQLException
   {
      try
      {
         InitialContext jndiCntx = new InitialContext ();
         
         DataSource ds = (DataSource)
         jndiCntx.lookup ("java:comp/env/jdbc/titanDB");
         
         return ds.getConnection ();
      } 
      catch(NamingException ne)
      {
         throw new EJBException (ne);
      }
   }
   
   private int getMinCheckNumber ()
   {
      try
      {
         InitialContext jndiCntx = new InitialContext ();
         
         Integer value = (Integer)
         jndiCntx.lookup ("java:comp/env/minCheckNumber");
         
         return value.intValue ();
      } 
      catch(NamingException ne)
      {
         throw new EJBException (ne);
      }
   }

   // Create DB environmnet
   //
   public void makeDbTable () 
   {
      PreparedStatement ps = null;
      Connection con = null;
      
      try
      {
         con = this.getConnection ();
         
         System.out.println("Creating table PAYMENT...");
         ps = con.prepareStatement ("CREATE TABLE PAYMENT ( " +
                                     "CUSTOMER_ID INT, " +
                                     "AMOUNT DECIMAL (8,2), " +
                                     "TYPE CHAR (10), " +
                                     "CHECK_BAR_CODE CHAR (50), " +
                                     "CHECK_NUMBER INTEGER, " +
                                     "CREDIT_NUMBER CHAR (20), " +
                                     "CREDIT_EXP_DATE DATE" +
                                    ")" );
         ps.execute ();
         System.out.println("...done!");
      }
      catch (SQLException sql)
      {
         throw new EJBException (sql);
      }
      finally
      {
         try { ps.close (); } catch (Exception e) {}
         try { con.close (); } catch (Exception e) {}
      }
   }
   
   public void dropDbTable ()
   {
      PreparedStatement ps = null;
      Connection con = null;
      
      try
      {
         con = this.getConnection ();
         
         System.out.println("Dropping table PAYMENT...");
         ps = con.prepareStatement ("DROP TABLE PAYMENT");
         ps.execute ();
         System.out.println("...done!");
      }
      catch (SQLException sql)
      {
         throw new EJBException (sql);
      }
      finally
      {
         try { ps.close (); } catch (Exception e) {}
         try { con.close (); } catch (Exception e) {}
      }
   }
   
}