Versions Compared

Key

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

...

8. Copy the following contents into Account.java.

Code Block
JAVAJAVA
borderStylesolid
titlesample.jpa.Account.java
JAVA
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
JAVAJAVA
borderStylesolid
titlesample.jpa.AccountInterface.java
JAVA
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.

JAVA
Code Block
JAVA
borderStylesolid
titlesample.jpa.AccountBean.java
JAVA
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
JAVAJAVA
borderStylesolid
titleTest.java
JAVA
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/>");
 }
}

...

1. Start the geronimo server and open the admin console on a browser window with the url
http://localhost:8080/consoleImage Removed.

2. Click on the Embedded DB => DB Manager on the Console Navigation portlet.

...

1. Open a browser window and hit the URL as http://localhost:8080/ContainerManagedJPA-WEB/Image Removed
This page displays a html form with input fields for Debit Account Number, Credit Account Number and Amount to be Transferred. Enter the values as given in the below screen shot and click on the Submit button.

...