package elte.java2_utikalauz5.rmi; import java.rmi.Naming; import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; import java.rmi.RMISecurityManager; import java.util.Hashtable; import java.util.Enumeration; import java.lang.Thread; import java.net.InetAddress; /** Ez a {@code TranzakcioManager} osztály konstruktorának tekinthető. A létrehozott tranzakciókezelőkhöz egy-egy szöveges azonosítót rendel. Használatakor ne feledjünk el a következő jogokat megadni!
grant signedBy "utikalauz" { permission java.security.AllPermission; };@link.forrásfájl {@docRoot}/../data/rmi/src TranzakcioManagerFactory.java @link.letöltés {@docRoot}/../data/rmi TranzakcioManager.jar @since Java 2 Útikalauz programozóknak */ public class TranzakcioManagerFactory extends UnicastRemoteObject implements TranzakcioManagerFactoryInterface { /** Verziószám. */ private final static long serialVersionUID = 15L; private static Object mutex = new Object(); // kölcsönös kizáráshoz private static String ip_cimem; public TranzakcioManagerFactory() throws RemoteException { super(); // Távoli (konstruktor) objektum exportálasa } // Egy új tranzakciókezelő ("koordinator") létrehozása public TranzakcioManagerInterface Ujtranzakcio() throws java.rmi.RemoteException { synchronized(mutex) { // tranzakciók kölcsönösen kizárva long most=System.currentTimeMillis(); // az óra állása while (System.currentTimeMillis() <= most) { try { // legalább 1 ezredmásodperc eltelik ... Thread.currentThread().sleep(1); } catch (Exception e) { } } most=System.currentTimeMillis(); // az óra új állása String tid=(new Long(most)).toString()+"_"+ip_cimem; System.out.println("Tranzakció TID:"+tid); // Visszaadjuk az új tranzakciókezelőt return new TranzakcioManager(tid); } } // A főprogramja példányosít egy tranzakciókezelőt és // bejegyzi a registrybe. public static void main(String args[]) { System.setSecurityManager(new RMISecurityManager()); try { ip_cimem=(InetAddress.getLocalHost()).getHostAddress(); TranzakcioManagerFactory tf = new TranzakcioManagerFactory(); Naming.rebind("RMI_tranzakciok",tf); // bejegyzése System.out.println("Tranzakciómanager factory fut!"); } catch (Exception e) { System.out.println("Tranzakciómanager f. NEM FUT!"+e.getMessage()); } } }