Realisierung Client

Werbung
Das Client-Programm
Klasse BankierClient
•
•
•
bietet Funktionalität für den Bankangestellten
verwendet die Entity Bean Konto
verwendet die stateless Session Bean Kontenverwaltung
Klasse KundenClient
•
•
•
bietet Funktionalität für den Kunden
verwendet die Entity Bean Konto
verwendet die stateful Session Bean Kundenterminal
weitere Klassen für die Benutzeroberfläche
Welche Dateien werden benötigt?
IAS: Client Jar Generation Wizard
KontoHome.class
KontoPK.class
Konto.class
KreditrahmenUeberzogenException.class
KundenterminalHome.class
Kundenterminal.class
InhaberNoetigException.class
PinNoetigException.class
KeinKontoException.class
FalscheAngabeException.class
KontenverwaltungHome.class
Kontenverwaltung.class
KontenverwaltungHelper.class
KontenverwaltungHolder.class
KontenverwaltungHomeHelper.class
KontenverwaltungHomeHolder.class
KontenverwaltungHomeOperations.class
KontenverwaltungHomePOAInvokeHandler.class
KontenverwaltungOperations.class
KontenverwaltungPOAInvokeHandler.class
KontoHelper.class
KontoHolder.class
KontoHomeHelper.class
KontoHomeHolder.class
KontoHomeOperations.class
KontoHomePOAInvokeHandler.class
KontoOperations.class
KontoPOAInvokeHandler.class
KundenterminalHelper.class
KundenterminalHolder.class
KundenterminalHomeHelper.class
KundenterminalHomeHolder.class
KundenterminalHomeOperations.class
KundenterminalHomePOAInvokeHandler.class
KundenterminalOperations.class
KundenterminalPOAInvokeHandler.class
_KontenverwaltungHome_Stub.class
_Kontenverwaltung_Stub.class
_KontoHome_Stub.class
_Konto_Stub.class
_KundenterminalHome_Stub.class
_Kundenterminal_Stub.class
1
Wie kommt der Client an die Beans?
// InitalContext ist Container/Serverabhängig (existiert nur durch Starten mit “vbj”)
// “vbj” statt “java” und “vbjc” stat “javac” verwenden
// Ergebnis ist ein JNDI Kontext des VisiBroker Naming Service
javax.naming.Context context = new javax.naming.InitialContext();
// holt ein Objekt mit JNDI Namen “konto” (Home Interface der Bean Konto)
Object ref = java.naming.context.lookup("konto");
// überprüft, ob der Cast vom Typ Object nach KontoHome möglich ist
KontoHome kHome = (KontoHome)
javax.rmi.PortableRemoteObject.narrow(ref, KontoHome.class);
// Ergebnis ist ein Stub-Klasse, die das RemoteInterface der Konto Bean implementiert
Konto aktKonto = kHome.findByPrimaryKey(new KontoPK(kontoNr));
// mögliche Exceptions: java.rmi.RemoteException, javax.naming.NamingException
// müssen abgefangen oder geworfen werden
setKonto(kNr) im BankierClient
public void setKonto(int kontoNr) throws RemoteException,
KeinKontoException,
NamingException {
javax.naming.Context context = new InitialContext();
Object ref = context.lookup("konto");
KontoHome kHome = (KontoHome)
PortableRemoteObject.narrow(ref,KontoHome.class);
try {
aktKonto = kHome.findByPrimaryKey(new KontoPK(kontoNr));
}
catch( Exception ex ) {
throw new KeinKontoException();
}
aktKontoNr=kontoNr;
}
2
Der Konstruktor des BankierClient
public class BankierClient {
[...]
private Kontenverwaltung kontoVerw;
[...]
// private Variable
public BankierClient() {
try{
javax.naming.Context context = new javax.naming.InitialContext();
Object ref = context.lookup("kontenverwaltung");
KontenverwaltungHome kverwHome = (KontenverwaltungHome)
javax.rmi.PortableRemoteObject.narrow
(ref, KontenverwaltungHome.class);
kontoVerw = kverwHome.create();
} catch (Exception e) {
e.printStackTrace();
}
}
[...]
Aufrufen der Bean-Methoden
public double getZinssatz() throws RemoteException,
KeinKontoException {
if(aktKonto == null){ throw new KeinKontoException();}
return aktKonto.getZinssatz();
}
public String getInhaber() throws RemoteException,
KeinKontoException {
if(aktKonto == null) { throw new KeinKontoException(); }
return aktKonto.getInhaber();
}
public void neuesKonto(int kontoNr, String inhaber, int pin)
throws RemoteException,
NamingException,
CreateException,
KeinKontoException {
kontoVerw.neuesKonto(kontoNr, inhaber);
setKonto(kontoNr);
aktKonto.setPIN(pin);
}
3
setKonto(kNr) im KundenClient
public void setKonto (int kontoNr) throws KeinKontoException,
RemoteException,
javax.naming.NamingException {
javax.naming.Context context = new javax.naming.InitialContext();
try {
Object ref = context.lookup("kundenterminal");
KundenterminalHome kHome = (KundenterminalHome)
javax.rmi.PortableRemoteObject.narrow(ref, KundenterminalHome.class);
kterminal = kHome.create(kontoNr);
// stateful Session Bean erzeugen
} catch(Exception ex) {
throw new KeinKontoException();
}
}
Aufrufen der Bean-Methoden
public void setInhaber(String inhaber) throws
RemoteException,
FalscheAngabeException{
kterminal.setInhaber(inhaber);
}
public void setPin(int pin) throws
RemoteException,
FalscheAngabeException {
kterminal.setPin(pin);
}
public void einzahlen(double betrag) throws
RemoteException,
InhaberNoetigException,
KeinKontoException {
kterminal.einzahlen(betrag);
}
4
Herunterladen