Aufgabenstellung Konto: Kontonummer, Inhaber, PIN, Guthaben, Zinssatz, Kreditrahmen Funktionsumfang: 1. Bankangestellte: - Einrichten neuer Konten - Änderung Kreditrahmen und Verzinsung für ein Konto Aufgabenstellung 2. Bankangestellte und Bankterminalbenutzer: - Einzahlung eines Geldbetrages - Anzeige des Kontostandes (nötig: Kontonummer, Inhaber, PIN) - Abhebung (nötig: Kontonummer, Inhaber, PIN) - Überweisung (nötig: Quelle: Kontonummer, Inhaber, PIN; Ziel: Kontonummer, Inhaber) 1 Aufgabenstellung => 3. EJBs: - Entity-Bean: Konto - Stateless Session Bean: Bankangestellte - Stateful Session Bean: Bankterminalbenutzer //HomeInterface der EntityBean import javax.ejb.*; import javax.ejb.CreateException; import javax.ejb.FinderException; import java.rmi.RemoteException; public interface KontoHome extends EJBHome { public Konto create(int kontoNr, String inhaber) throws CreateException, RemoteException; public Konto findByPrimaryKey(KontoPK pk) throws RemoteException, FinderException; } 2 //RemoteInterface der EntityBean import javax.ejb.*; import java.rmi.RemoteException; public interface Konto extends EJBObject { public String getInhaber() throws RemoteException; public int getPIN() throws RemoteException; public void setPIN(int pin) throws RemoteException; public double getGuthaben() throws RemoteException; public void einzahlen(double betrag) throws RemoteException; public void abheben(double betrag) throws RemoteException, KreditrahmenUeberzogenException; public double getZinssatz() throws RemoteException; public void setZinssatz(double zs) throws RemoteException; public double getKreditrahmen() throws RemoteException; public void setKreditrahmen(double kr) throws RemoteException; } //Die Beanklasse der EntityBean import java.rmi.*; import javax.ejb.*; public class KontoBean implements EntityBean { private EntityContext entityContext; public int kontoNr; public String inhaber; public int pin; public double guthaben; public double zinssatz; public double kreditrahmen; public KontoPK ejbCreate(int kontoNr, String inhaber) throws CreateException { this.kontoNr = kontoNr; this.inhaber = inhaber; return null; } public void ejbPostCreate(int kontoNr, String inhaber){ } 3 public double getGuthaben(){ return guthaben; } public String getInhaber(){ return inhaber; } public void setPIN(int pin){ this.pin = pin; } public int getPIN(){ return pin; } public void setZinssatz(double zs){ this.zinssatz = zs; } public double getZinssatz(){ return zinssatz; } public void setKreditrahmen(double kr){ this.kreditrahmen = kr; } public double getKreditrahmen(){ return kreditrahmen; } public void einzahlen(double betrag) { guthaben = guthaben + betrag; } public void abheben(double betrag) throws KreditrahmenUeberzogenException{ if ((guthaben - betrag) >= (- kreditrahmen)){ guthaben = guthaben - betrag; return; } throw new KreditrahmenUeberzogenException(); } public void ejbActivate() { } 4 public void ejbLoad() { } public void ejbPassivate() { } public void ejbRemove() throws RemoveException { } public void ejbStore() { } public void setEntityContext(EntityContext context) { entityContext = context; } public void unsetEntityContext() { entityContext = null; } } // Die primary-key-Klasse import java.io.Serializable; public class KontoPK implements Serializable{ public int kontoNr; public KontoPK() { } public KontoPK(int kontoNr) { this.kontoNr = kontoNr; } public int hashCode(){ return kontoNr; } public boolean equals(Object obj){ if(obj instanceof KontoPK){ return (kontoNr == ((KontoPK)obj).kontoNr); } return false; } } 5 //HomeInterface der stateless Session Bean public interface KontenverwaltungHome extends javax.ejb.EJBHome { Kontenverwaltung create() throws java.rmi.RemoteException, javax.ejb.CreateException; } // RemoteInterface der stateless session Bean import java.rmi.RemoteException; public interface Kontenverwaltung extends javax.ejb.EJBObject { void neuesKonto(int kontoNr, String inhaber) throws RemoteException, javax.naming.NamingException, javax.ejb.CreateException, KeinKontoException; void setKreditrahmen(Konto konto, double kr) throws RemoteException, KeinKontoException; void setZinssatz(Konto konto, double zs) throws RemoteException, KeinKontoException; void einzahlen(Konto konto, double betrag) throws RemoteException, KeinKontoException; double getGuthaben(Konto konto) throws RemoteException, KeinKontoException; void abheben(Konto konto, double betrag) throws KreditrahmenUeberzogenException, RemoteException, KeinKontoException; void ueberweisen(Konto quellKonto, Konto zielKonto, double betrag) throws KreditrahmenUeberzogenException, RemoteException, KeinKontoException; } 6 //Beanclass des stateless Session Beans import java.rmi.RemoteException; public class KontenverwaltungBean implements javax.ejb.SessionBean { private javax.ejb.SessionContext _context; public void setSessionContext (javax.ejb.SessionContext context) { _context=context; } public void ueberweisen(Konto quellKonto, Konto zielKonto, double betrag) throws KreditrahmenUeberzogenException, RemoteException, KeinKontoException{ if( quellKonto == null ){ throw new KeinKontoException(); } if( zielKonto == null ){ throw new KeinKontoException(); } quellKonto.abheben(betrag); zielKonto.einzahlen(betrag); } } //HomeInterface der stateful SessionBean import java.rmi.RemoteException; public interface KundenterminalHome extends javax.ejb.EJBHome { Kundenterminal create(int kontoNr) throws javax.ejb.CreateException ,javax.ejb.FinderException, javax.naming.NamingException, RemoteException; } 7 //RemoteInterface der stateful SessionBean import java.rmi.RemoteException; public interface Kundenterminal extends javax.ejb.EJBObject { void einzahlen(double betrag) throws InhaberNoetigException, RemoteException, KeinKontoException; double getGuthaben() throws InhaberNoetigException, RemoteException, PinNoetigException, KeinKontoException; void abheben(double betrag) throws InhaberNoetigException, RemoteException, PinNoetigException, KreditrahmenUeberzogenException, KeinKontoException; void ueberweisen(int zielKNr, String zielInhaber, double betrag) throws javax.ejb.FinderException, RemoteException, javax.naming.NamingException, InhaberNoetigException, PinNoetigException, KeinKontoException, KreditrahmenUeberzogenException; void setPin(int pin) throws RemoteException, FalscheAngabeException; void setInhaber(String inhaber) throws RemoteException, FalscheAngabeException; } //BeanKlasse der stateful SessionBean import java.rmi.RemoteException; public class KundenterminalBean implements javax.ejb.SessionBean { private javax.ejb.SessionContext _context; private Konto aktKonto; private boolean bInhaber = false; private boolean bPin = false; public void setInhaber(String inhaber) throws RemoteException, FalscheAngabeException{ if(aktKonto.getInhaber().equals(inhaber)){ this.bInhaber = true; return; } throw new FalscheAngabeException(); } 8 public void setPin(int pin) throws RemoteException, FalscheAngabeException{ if(aktKonto.getPIN() == pin){ this.bPin = true; return; } throw new FalscheAngabeException(); } public void einzahlen(double betrag) throws InhaberNoetigException, RemoteException, KeinKontoException{ if(aktKonto == null){ throw new KeinKontoException(); } if( !bInhaber){ throw new InhaberNoetigException(); } aktKonto.einzahlen(betrag); } public double getGuthaben() throws InhaberNoetigException, RemoteException, PinNoetigException, KeinKontoException{ if(aktKonto == null){ throw new KeinKontoException(); } if( !bInhaber){ throw new InhaberNoetigException(); } if( !bPin){ throw new PinNoetigException(); } return aktKonto.getGuthaben(); } } 9