Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

8. Copy the following contents into Account.java.

Code Block
JAVA
JAVA
titlesample.jpa.Account.java
borderStylesolidJAVA
package sample.jpa;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.PostLoad;
import javax.persistence.PostUpdate;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Table;


@Entity
@Table(name = "ACCOUNTCME")
public class Account implements Serializable {

 @Id
 public int accountNumber;
 public String ownerName;
 public double balance;


 public Account() {
  accountNumber = (int) System.nanoTime();
 }

 public String toString() {
 return "Acc.# " + accountNumber + ", owner" + ownerName 
        + ", balance: " + balance
        + " $";
 }

 @PrePersist
 public void prepersist() {
  System.out.println("pre persist!!");
 }

 @PreUpdate
 public void preupdate() {
  System.out.println("pre update!!");
 }

 @PostUpdate
 public void postupdate() {
  System.out.println("post update!!");
 }

 @PostLoad
 public void postload() {
  System.out.println("post load!!");
 }

 public int getAccountNumber() {
  return accountNumber;
 }

 public void setAccountNumber(int accountNumber) {
  this.accountNumber = accountNumber;
 }

 public String getOwnerName() {
  return ownerName;
 }

 public void setOwnerName(String ownerName) {
  this.ownerName = ownerName;
 }

 public void setBalance(double balance) {
  this.balance = balance;
 }

 public double getBalance() {
 return balance;
 }
}

9. Similarly, create AccountInterface.java and copy the following contents.

Code Block
JAVA
JAVA
titlesample.jpa.AccountInterface.java
borderStylesolidJAVA
package sample.jpa;

public interface AccountInterface {

 public Account open(int accountNumber) ;
 public double getBalance(int accountNumber);
 public void deposit(int accountNumber,double amount) ;
 public double withdraw(int accountNumber,double amount) ;
}

10. Similarly, create AccountBean.java.java and copy the following contents.

Code Block
JAVA
JAVA
titlesample.jpa.AccountBean.java
borderStylesolidJAVA
package sample.jpa;


import javax.ejb.EJBException;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;


@Stateless
@Remote(AccountInterface.class)
public class AccountBean implements AccountInterface { 

 @PersistenceContext(type=PersistenceContextType.TRANSACTION)    
 private EntityManager manager;


 @TransactionAttribute(TransactionAttributeType.REQUIRED)    
 public Account open(int accountNumber) {
  Account account = manager.find(Account.class, accountNumber);
  if(account == null){
   account = new Account();
   account.ownerName = "anonymous";
   account.accountNumber = accountNumber;
   manager.persist(account);
   return account;
  }else{
   throw new EJBException("Account already exists..!!. Account Number = "+accountNumber);
  }
 }    

 @TransactionAttribute(TransactionAttributeType.REQUIRED)    
 public double getBalance(int accountNumber) {
  Account account = manager.find(Account.class, accountNumber);
  if(account==null)
   throw new EJBException("Account not found..!!. Account Number = "+accountNumber);
  return account.balance;
 }

 @TransactionAttribute(TransactionAttributeType.REQUIRED)
 public void deposit(int accountNumber, double amount) {
  Account account = manager.find(Account.class, accountNumber);
  if(account==null)
   throw new EJBException("Account not found..!!. Account Number = "+accountNumber);
  double new_balance = account.getBalance() + amount;
  account.setBalance(new_balance);
 }

 @TransactionAttribute(TransactionAttributeType.REQUIRED)    
 public double withdraw(int accountNumber, double  amount) { 
  Account account = manager.find(Account.class, accountNumber);
  if(account==null)
   throw new EJBException("Account not found..!!. Account Number = "+accountNumber);
  if (amount > account.getBalance()) {
   return 0;
  }else {
   double new_balance = account.getBalance() - amount;
   account.setBalance(new_balance);
   return amount;
  }
 }
}

...

9. Copy the below content into the servlet Test.java

Code Block
JAVA
JAVA
titleTest.java
borderStylesolidJAVA
package sample.jpa;

import java.io.IOException;
import java.io.PrintWriter;

import javax.ejb.EJB;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.transaction.UserTransaction;

public class Test extends javax.servlet.http.HttpServlet 
 implements javax.servlet.Servlet {

 static final long serialVersionUID = 1L;

 @PersistenceContext(unitName="AccountUnit")
 private EntityManager em;

 @EJB AccountInterface accountBean;

 public Test() {
  super();
 }   	

 protected void doGet(HttpServletRequest request, 
                      HttpServletResponse response) 
                      throws ServletException, 
                      IOException {


 PrintWriter out = response.getWriter();

 int accNo1 = Integer.parseInt(
              request.getParameter("account1"));
 int  accNo2 = Integer.parseInt(
              request.getParameter("account2"));
 double amount = Double.parseDouble(
                 request.getParameter("amount"));

 try{
  Context ctx = new InitialContext();
  UserTransaction ut = (UserTransaction)
                        ctx.lookup("java:comp/UserTransaction");
  ut.begin();

  Account account = em.find(Account.class, accNo1);
  if(account.getBalance() < amount){
   throw new Exception("<font size=5>Account "+accNo1+
         " does not have enough balance "+amount+"</font>");
  }else{
   outputText(out, "2", "green", 
              "Message : Getting the balance amount available in Account Number "
              +accNo1+" in the Test Servlet");

   outputText(out, "5", "black","Account ="+
              accNo1+" : Current balance "+account.getBalance());
   out.println("<br/>");

   outputText(out, "2", "green","Message : Withdrawing amount ("+
              amount+") using AccountBean from the Account Number "+accNo1);

   accountBean.withdraw(accNo1, amount);

   outputText(out, "2", "green",
     "Message : Getting the balance amount available in Account Number "+accNo1+
     " in the Test Servlet after withdrawing");

   double balance = account.getBalance();
   outputText(out, "5", "black","Account ="+accNo1+
   " : After withdrawing the balance is "+balance);
   out.println("<br/>");

   outputText(out, "2", "green",
    "Message : Getting the balance amount available in Account Number "+
    accNo2+" in the Test Servlet");

   Account account2 = em.find(Account.class, accNo2);
   outputText(out, "5", "black","Account ="+
    accNo2+" : Current balance "+account2.getBalance());
   
   out.println("<br/>");

   outputText(out, "2", "green",
    "Message : depositing amount ("+amount+
    ") using AccountBean to the Account Number "+accNo2);

   accountBean.deposit(accNo2, amount);
   outputText(out, "2", "green",
   "Message : Getting the balance amount available in Account Number "+
   accNo2+" in the Test Servlet after depositing");

   outputText(out, "5", "black","Account ="+
              accNo2+" : After depositing the balance is "+
              account2.getBalance());

   out.println("<br/>");
   }
  ut.commit();
  }catch(Exception e){
  throw new ServletException(e);
 }
}  	

 protected void doPost(HttpServletRequest request, 
                       HttpServletResponse response) 
                       throws ServletException, IOException {
 }   	

 private void outputText(PrintWriter out, 
                         String fontsize, 
                         String color,
                         String text){
  out.println("<font size="+fontsize+" color="+
                color+">"+text+"</font>"+"<br/>");
 }
}

...