Il controller definisce il flusso di operazioni da eseguire
package it.html.ejb.entity.bmp.controller;
import it.html.ejb.entity.bmp.AccountPK;
import it.html.ejb.entity.bmp.BankAccount;
import it.html.ejb.entity.bmp.BankAccountHome;
import it.html.ejb.entity.bmp.BankAccountLocal;
import it.html.ejb.entity.bmp.BankAccountLocalHome;
import java.io.IOException;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Controller extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
Context ctx;
BankAccountLocalHome bah;
//Inizializzazione della factory, utilizzata durante l'intera vita della servlet
public void init(){
//Le proprietà del context saranno le medesime del contesto in cui si troverà questa servlet (e quindi l'ejb)
try {
ctx=new InitialContext();
bah=(BankAccountLocalHome) ctx.lookup("BankAccountLocal");
} catch (NamingException e) {
e.printStackTrace();
}
}
//Il metodo funge da dispatcher, sulla base del parametro op
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String op=request.getParameter("op");
if (op.equalsIgnoreCase("create"))
createAccount(request,response);
if (op.equalsIgnoreCase("find"))
findAccount(request,response);
if (op.equalsIgnoreCase("deposito"))
doDeposito(request,response);
if (op.equalsIgnoreCase("prelievo"))
doPrelievo(request,response);
}
//Il metodo effettua l'operazione di creazione di un conto corrente @throws IOException
private void createAccount(HttpServletRequest request, HttpServletResponse response) throws IOException {
//Recupero dei parametri per l'inizializzazione del conto
String id=request.getParameter("id");
String nome=request.getParameter("nome");
//Creazione del conto corrente
try {
bah.create(id, nome);
//Segnalazione di operazione riuscita
response.getOutputStream().println("Account "+id+" creato!");
} catch (Exception e) {
/*
* Segnaliamo all'utente la presenza di un'eccezione generica:
* sarebbe bene dettagliare la tipologia di errore (id ripetuto, valori
* nulli, ...)
*/
response.getOutputStream().println("Errore nella creazione dell'account ("+id+","+nome+")");
}
}
//Il metodo effettua l'operazione di prelievo
private void doPrelievo(HttpServletRequest request, HttpServletResponse response) throws IOException {
//Recupero il parametro che identifica il conto
String id=request.getParameter("id");
String amount=request.getParameter("amount");
//Recupero il bean associato a tale chiave
try {
BankAccountLocal ba = bah.findByPrimaryKey(new AccountPK(id));
//Operazione di prelievo
double amt=Double.parseDouble(amount);
ba.prelievo(amt);
//Operazione riuscita
response.getOutputStream().println("Prelievo di "+amt+" giunto a buon fine.");
} catch (Exception e) {
response.getOutputStream().println("Nessun conto associato all'id!");
}
}
//Il metodo effettua l'operazione di deposito
private void doDeposito(HttpServletRequest request, HttpServletResponse response) throws IOException {
//Recupero il parametro che identifica il conto
String id=request.getParameter("id");
String amount=request.getParameter("amount");
//Recupero il bean associato a tale chiave
try {
BankAccountLocal ba = bah.findByPrimaryKey(new AccountPK(id));
//Operazione di prelievo
double amt=Double.parseDouble(amount);
ba.deposito(amt);
//Operazione riuscita
response.getOutputStream().println("Prelievo di "+amt+" giunto a buon fine.");
} catch (Exception e) {
response.getOutputStream().println("Nessun conto associato all'id!");
}
}
//Il metodo cerca l'account ed inoltra il controllo alla vista di visualizzazione
private void findAccount(HttpServletRequest request, HttpServletResponse response) throws IOException {
//Recupero l'id
String id=request.getParameter("id");
try {
BankAccountLocal ba = bah.findByPrimaryKey(new AccountPK(id));
//Inoltro il conto corrente alla JSP, che si occuperà di visualizzarlo
RequestDispatcher rd=this.getServletContext().getRequestDispatcher("/home.jsp");
request.setAttribute("account",ba);
rd.forward(request,response);
} catch (Exception e) {
response.getOutputStream().println("Nessun conto associato all'id!");
}
}
}