From 04615562558ff4a3e23584b07577b3cc4e72cca3 Mon Sep 17 00:00:00 2001 From: Fernando Ferreira de Lima Filho <fferreiralf@ufrn.edu.br> Date: Sun, 17 Apr 2022 18:15:46 -0300 Subject: [PATCH] Balance impl --- banking/src/ufrn/imd/BankingServerApp.java | 6 ++ .../src/ufrn/imd/controller/Controller.java | 4 +- .../impl/BalanceControllerImpl.java | 94 ++++++++++++++++++- .../impl/DepositControllerImpl.java | 27 ++++-- banking/src/ufrn/imd/domain/Client.java | 3 +- .../src/ufrn/imd/service/BalanceService.java | 3 +- .../src/ufrn/imd/service/DepositService.java | 2 +- .../imd/service/impl/BalanceServiceImpl.java | 23 ++++- .../imd/service/impl/DepositServiceImpl.java | 6 +- banking/src/ufrn/imd/utils/Log.java | 2 +- banking/src/ufrn/imd/utils/NameSpace.java | 6 +- 11 files changed, 155 insertions(+), 21 deletions(-) diff --git a/banking/src/ufrn/imd/BankingServerApp.java b/banking/src/ufrn/imd/BankingServerApp.java index d02eeed..4fed739 100644 --- a/banking/src/ufrn/imd/BankingServerApp.java +++ b/banking/src/ufrn/imd/BankingServerApp.java @@ -1,8 +1,11 @@ package ufrn.imd; import ufrn.imd.controller.Controller; +import ufrn.imd.controller.impl.BalanceControllerImpl; import ufrn.imd.controller.impl.DepositControllerImpl; +import ufrn.imd.service.BalanceService; import ufrn.imd.service.DepositService; +import ufrn.imd.service.impl.BalanceServiceImpl; import ufrn.imd.service.impl.DepositServiceImpl; import java.net.MalformedURLException; @@ -13,7 +16,10 @@ public class BankingServerApp { public static void main(String[] args) throws RemoteException, MalformedURLException, AlreadyBoundException { DepositService depositService = new DepositServiceImpl(); + BalanceService balanceService = new BalanceServiceImpl(); + Controller depositController = new DepositControllerImpl(depositService); + Controller balanceController = new BalanceControllerImpl(balanceService); } diff --git a/banking/src/ufrn/imd/controller/Controller.java b/banking/src/ufrn/imd/controller/Controller.java index ebdc052..36dc9b4 100644 --- a/banking/src/ufrn/imd/controller/Controller.java +++ b/banking/src/ufrn/imd/controller/Controller.java @@ -1,10 +1,12 @@ package ufrn.imd.controller; -import ufrn.imd.message.Client; +import ufrn.imd.domain.Client; import java.rmi.Remote; import java.rmi.RemoteException; +import java.util.List; public interface Controller extends Remote { public void registerClient(Client client) throws RemoteException; + } diff --git a/banking/src/ufrn/imd/controller/impl/BalanceControllerImpl.java b/banking/src/ufrn/imd/controller/impl/BalanceControllerImpl.java index 74616ba..4dd0bb5 100644 --- a/banking/src/ufrn/imd/controller/impl/BalanceControllerImpl.java +++ b/banking/src/ufrn/imd/controller/impl/BalanceControllerImpl.java @@ -1,2 +1,94 @@ -package ufrn.imd.controller.impl;public class BalanceControllerImpl { +package ufrn.imd.controller.impl; + +import ufrn.imd.controller.Controller; +import ufrn.imd.domain.Client; +import ufrn.imd.service.BalanceService; +import ufrn.imd.service.DepositService; +import ufrn.imd.service.impl.BalanceServiceImpl; +import ufrn.imd.utils.Log; + +import java.net.MalformedURLException; +import java.rmi.AlreadyBoundException; +import java.rmi.Naming; +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.rmi.server.UnicastRemoteObject; +import java.util.ArrayList; +import java.util.List; + +import static ufrn.imd.utils.NameSpace.*; + +public class BalanceControllerImpl extends UnicastRemoteObject implements Controller { + + private volatile List<Client> clients = new ArrayList<>(); + + public BalanceControllerImpl(BalanceService service) throws RemoteException, MalformedURLException, AlreadyBoundException { + super(); + Log.info(BalanceServiceImpl.class, "Starting Deposit service!"); + + new Notify(service).start(); + + Log.info(BalanceServiceImpl.class, + String.format("Initializing server in %s", HOST_BALANCE_SERVICE)); + + LocateRegistry.createRegistry(PORT_BALANCE_SERVICE); + + Naming.bind(HOST_BALANCE_SERVICE, this); + } + + @Override + public void registerClient(Client client) throws RemoteException { + clients.add(client); + Log.info(BalanceService.class, "new client registred"); + Log.info(BalanceService.class, String.format("total users: %d", clients.size())); + } + + + + + private class Notify extends Thread{ + + private final BalanceService service; + + public Notify(BalanceService service) { + super(); + this.service = service; + } + public void run() { + + for(;;) { + if(clients.size() > 0) { + + Log.info( + BalanceService.class, + "notyfing the clients!" + ); + int i = 0; + for (Client client : clients) { + + try { + this.service.balance(client.getAccount()); + + } catch (RemoteException e) { + e.printStackTrace(); + } + } + try { + Thread.sleep(15 * 1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } else { + try { + Thread.sleep(15 * 1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + Log.info(BalanceService.class, "No there's clients!"); + } + + } + + } + } } diff --git a/banking/src/ufrn/imd/controller/impl/DepositControllerImpl.java b/banking/src/ufrn/imd/controller/impl/DepositControllerImpl.java index ef27d6e..34cccd4 100644 --- a/banking/src/ufrn/imd/controller/impl/DepositControllerImpl.java +++ b/banking/src/ufrn/imd/controller/impl/DepositControllerImpl.java @@ -1,8 +1,8 @@ package ufrn.imd.controller.impl; import ufrn.imd.controller.Controller; -import ufrn.imd.log.Log; -import ufrn.imd.message.Client; +import ufrn.imd.utils.Log; +import ufrn.imd.domain.Client; import ufrn.imd.service.DepositService; import java.net.MalformedURLException; @@ -14,21 +14,22 @@ import java.rmi.server.UnicastRemoteObject; import java.util.ArrayList; import java.util.List; -import static ufrn.imd.nameSpace.NameSpace.HOST_DEPOSIT_SERVICE; -import static ufrn.imd.nameSpace.NameSpace.PORT_DEPOSIT_SERVICE; +import static ufrn.imd.utils.NameSpace.HOST_DEPOSIT_SERVICE; +import static ufrn.imd.utils.NameSpace.PORT_DEPOSIT_SERVICE; public class DepositControllerImpl extends UnicastRemoteObject implements Controller { private volatile List<Client> clients = new ArrayList<>(); - public DepositControllerImpl(DepositService service) throws RemoteException, MalformedURLException, AlreadyBoundException { super(); Log.info(DepositControllerImpl.class, "Starting Deposit service!"); - new Notify(service).start(); + new Notify(service).start(); Log.info(DepositControllerImpl.class, String.format("Initializing server in %s", HOST_DEPOSIT_SERVICE)); + LocateRegistry.createRegistry(PORT_DEPOSIT_SERVICE); + Naming.bind(HOST_DEPOSIT_SERVICE, this); } @@ -40,6 +41,8 @@ public class DepositControllerImpl extends UnicastRemoteObject implements Contro } + + private class Notify extends Thread{ private final DepositService service; @@ -63,17 +66,25 @@ public class DepositControllerImpl extends UnicastRemoteObject implements Contro try { this.service.deposit(client.getBalance(), client.getAccount()); + } catch (RemoteException e) { e.printStackTrace(); } } - - try { Thread.sleep(15 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } + } else { + try { + Thread.sleep(15 * 1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + Log.info(DepositControllerImpl.class, "No there's clients!"); + + } } diff --git a/banking/src/ufrn/imd/domain/Client.java b/banking/src/ufrn/imd/domain/Client.java index 2243e6b..7419ef5 100644 --- a/banking/src/ufrn/imd/domain/Client.java +++ b/banking/src/ufrn/imd/domain/Client.java @@ -1,4 +1,4 @@ -package ufrn.imd.message; +package ufrn.imd.domain; import ufrn.imd.domain.Account; @@ -7,7 +7,6 @@ import java.util.Optional; public class Client implements Serializable { private static final long serialVersionUID = 1L; - private Account account; public Double getBalance() { return account.getBalance(); diff --git a/banking/src/ufrn/imd/service/BalanceService.java b/banking/src/ufrn/imd/service/BalanceService.java index 2d9315c..b82470c 100644 --- a/banking/src/ufrn/imd/service/BalanceService.java +++ b/banking/src/ufrn/imd/service/BalanceService.java @@ -4,8 +4,9 @@ import ufrn.imd.domain.Account; import java.rmi.Remote; import java.rmi.RemoteException; +import java.util.Optional; public interface BalanceService extends Remote { - public void balance(Account account) throws RemoteException; + public void balance(Optional<Account> account) throws RemoteException; } diff --git a/banking/src/ufrn/imd/service/DepositService.java b/banking/src/ufrn/imd/service/DepositService.java index f85f98f..aab39ac 100644 --- a/banking/src/ufrn/imd/service/DepositService.java +++ b/banking/src/ufrn/imd/service/DepositService.java @@ -8,6 +8,6 @@ import java.util.Optional; public interface DepositService extends Remote { - public void deposit(Double value, Optional<Account> account) throws RemoteException; + public void deposit(Double value, Optional<Account> account) throws RemoteException, RuntimeException; } diff --git a/banking/src/ufrn/imd/service/impl/BalanceServiceImpl.java b/banking/src/ufrn/imd/service/impl/BalanceServiceImpl.java index 07a0ac2..f550c9d 100644 --- a/banking/src/ufrn/imd/service/impl/BalanceServiceImpl.java +++ b/banking/src/ufrn/imd/service/impl/BalanceServiceImpl.java @@ -1,2 +1,23 @@ -package ufrn.imd.service.impl;public class BalanceService { +package ufrn.imd.service.impl; + +import ufrn.imd.domain.Account; + +import java.rmi.RemoteException; +import java.util.Optional; + +import ufrn.imd.service.*; +import ufrn.imd.utils.Log; + +public class BalanceServiceImpl implements BalanceService { + + + @Override + public void balance(Optional<Account> accOP) throws RemoteException { + Account account = accOP.orElseThrow(() -> new RuntimeException("Invalid account")); + Log.info( + BalanceServiceImpl.class, + String.format("Account Balance: R$ %f", account.getBalance()) + ); + + } } diff --git a/banking/src/ufrn/imd/service/impl/DepositServiceImpl.java b/banking/src/ufrn/imd/service/impl/DepositServiceImpl.java index 7dfa731..f7a1cb7 100644 --- a/banking/src/ufrn/imd/service/impl/DepositServiceImpl.java +++ b/banking/src/ufrn/imd/service/impl/DepositServiceImpl.java @@ -1,7 +1,7 @@ package ufrn.imd.service.impl; import ufrn.imd.domain.Account; -import ufrn.imd.log.Log; +import ufrn.imd.utils.Log; import ufrn.imd.service.DepositService; import java.rmi.RemoteException; @@ -15,11 +15,9 @@ public class DepositServiceImpl implements DepositService { public void deposit(Double value, Optional<Account> acOp) throws RemoteException, RuntimeException { Account account = acOp.orElseThrow(() -> new RuntimeException("Null User!")); - if(account.getBalance() < value) - throw new RuntimeException("There's no money!"); + if(account.getBalance() < value) throw new RuntimeException("There's no money!"); account.setBalance(account.getBalance() - value); Log.info(DepositServiceImpl.class, "deposit"); - } } diff --git a/banking/src/ufrn/imd/utils/Log.java b/banking/src/ufrn/imd/utils/Log.java index 673658f..38d3f87 100644 --- a/banking/src/ufrn/imd/utils/Log.java +++ b/banking/src/ufrn/imd/utils/Log.java @@ -1,4 +1,4 @@ -package ufrn.imd.utils.log; +package ufrn.imd.utils; public class Log { diff --git a/banking/src/ufrn/imd/utils/NameSpace.java b/banking/src/ufrn/imd/utils/NameSpace.java index ace96ee..bb5d525 100644 --- a/banking/src/ufrn/imd/utils/NameSpace.java +++ b/banking/src/ufrn/imd/utils/NameSpace.java @@ -1,7 +1,11 @@ -package ufrn.imd.utils.nameSpace; +package ufrn.imd.utils; public class NameSpace { + + public final static Integer PORT_BALANCE_SERVICE = 1908; public final static Integer PORT_DEPOSIT_SERVICE = 1907; public final static String HOST_DEPOSIT_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_DEPOSIT_SERVICE, "deposit"); + public final static String HOST_BALANCE_SERVICE = + String.format("rmi://127.0.0.1:%d/%s", PORT_BALANCE_SERVICE, "balance"); } -- GitLab