Gestion distance de comptes bancaires - solution
public interface Banque extends java.rmi.Remote {
public void creerCompte(String id,
double somme) throws java.rmi.RemoteException;
public void ajouter(String id, double somme) throws
java.rmi.RemoteException;
public void retirer(String id, double somme) throws
java.rmi.RemoteException;
public
Position position(String id) throws
java.rmi.RemoteException;
public void enregistrerNotification(String
id, BanqueNotification b, double minimum)
throws java.rmi.RemoteException;
public void enleverNotification(String
id) throws java.rmi.RemoteException;
}
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface BanqueNotification extends Remote {
public void notification(double valeur,
double mini) throws RemoteException;
}
import java.io.Serializable;
import java.util.Date;
public class Position implements Serializable {
private
double solde;
private
Date derniereOperation;
public
Position(double solde) {
this.solde
= solde; this.derniereOperation = new Date();
}
public Date getDerniereOperation()
{
return derniereOperation;
}
public void setDerniereOperation(Date
derniereOperation) {
this.derniereOperation = derniereOperation;
}
public double getSolde() {
return solde;
}
public void setSolde(double
solde) {
this.solde = solde;
}
public String toString() {
return "solde = "+solde+" date dernire op.
"+derniereOperation;
}
}
import java.net.MalformedURLException;
import java.rmi.*;
import java.rmi.server.*;
import java.util.*;
class Compte {
private Position position;
private BanqueNotification
notif;
private double notifMinimum;
public Compte(double somme) {
this.position = new Position(somme);
}
public Position getPosition() {
return position;
}
public void ajouter(double somme)
{
position.setSolde(position.getSolde()+somme);
position.setDerniereOperation(new Date());
}
public void retirer(double somme)
{
position.setSolde(position.getSolde()-somme);
position.setDerniereOperation(new
Date());
if (notif != null && position.getSolde() < notifMinimum)
{
try {
notif.notification(position.getSolde(), notifMinimum);
}
catch (RemoteException e) {
e.printStackTrace();
}
}
}
public void setNotification(BanqueNotification notif, double
mini) {
this.notif
= notif;
notifMinimum
= mini;
}
}
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
import java.util.Hashtable;
public class BanqueImpl extends UnicastRemoteObject implements
Banque {
Hashtable<String,Compte> comptes;
public BanqueImpl() throws RemoteException {
super();
comptes = new Hashtable<String,Compte>();
}
public void creerCompte(String
id, double somme) throws RemoteException
{
comptes.put(id,
new Compte(somme));
}
public void ajouter(String id,
double somme) throws RemoteException
{
Compte
cpt = comptes.get(id);
cpt.ajouter(somme);
}
public void retirer(String id,
double somme) throws RemoteException
{
Compte
cpt = comptes.get(id);
cpt.retirer(somme);
}
public Position position(String
id) throws RemoteException
{
Compte
cpt = comptes.get(id);
return cpt.getPosition();
}
public void enregistrerNotification(String
id, BanqueNotification b, double mini)
throws RemoteException
{
Compte
cpt = comptes.get(id);
cpt.setNotification(b, mini);
}
public void enleverNotification(String
id) throws RemoteException
{
Compte
cpt = comptes.get(id);
cpt.setNotification(null, 0);
}
public static void
main(String[] args) throws Exception
{
LocateRegistry.createRegistry(1099) ;
Naming.rebind("MaBanque", new BanqueImpl());
System.out.println("MaBanque est
enregistre");
}
}
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class BanqueNotificationImpl extends UnicastRemoteObject implements BanqueNotification {
private String id;
public BanqueNotificationImpl(String
id) throws RemoteException {
super() ;
this.id = id;
}
public void notification(double
valeur, double mini) throws RemoteException
{
System.out.println("Votre compte "+id+" est infrieur au mini :
"+mini+" solde : "+valeur);
}
}
import java.net.MalformedURLException;
import java.rmi.*;
public class BanqueClient {
public static
void main(String[] args) throws MalformedURLException, RemoteException, NotBoundException
{
Banque
proxy = (Banque) Naming.lookup("MaBanque");
proxy.creerCompte("Bob", 100);
BanqueNotificationImpl bni = new BanqueNotificationImpl("Bob");
proxy.enregistrerNotification("Bob", bni, 0);
proxy.ajouter("Bob",
100);
System.out.println("Position du compte de Bob : "+proxy.position("Bob"));
proxy.retirer("Bob",
300);
proxy.retirer("Bob",
100);
System.out.println("Position du compte de Bob : "+proxy.position("Bob"));
bni = null;
proxy.enleverNotification("Bob");
}
}