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());
}
}
}