package cz.cvut.fel.restauracefel.sklad_service; import cz.cvut.fel.restauracefel.library.service.ConfigParser; import java.io.FileNotFoundException; import java.rmi.NotBoundException; import java.rmi.RMISecurityManager; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; /** * Trida reprezentujici servisni facadu na klientske strane. Tato trida slouzi * k navazovani spojeni se serverem. * * @author Jarda */ public class ServiceFacade { private static IServiceFacadeStorage facade = null; /** * Soukromy konstruktor tridy ServiceFacade */ private ServiceFacade() { } /** * Tato metoda slozi k ziskani reference na serverovou fasadu. Klient pote * muze volat metody deklarovane ve vzdalenem rozhrani (jak na serveru tak * na klientu) a definovane na serveru. * Server se pokusi pripojit k primarnimu serveru a pokud to selze, tak se * zkousi pripojit k serveru sekundarnimu. * * @return vzdalene rozhrani * @throws java.rmi.RemoteException * @throws java.io.FileNotFoundException * @throws java.rmi.NotBoundException */ public static IServiceFacadeStorage getInstance() throws RemoteException, FileNotFoundException, NotBoundException { if (facade == null) { ConfigParser config = null; config = new ConfigParser(); if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } String name = "ServiceFacadeStorage"; facade = null; Registry reg = null; try { reg = LocateRegistry.getRegistry(config.getPrimaryServerIP(), 1099); facade = (IServiceFacadeStorage) reg.lookup(name); } catch (Exception e){ try { reg = LocateRegistry.getRegistry(config.getSecondaryServerIP(), 1099); facade = (IServiceFacadeStorage) reg.lookup(name); } catch (Exception ex){ facade = null; throw new RemoteException(); } } } return facade; } }