Dobry vecer,
resim problem v domacim ukolu:
napsal jsem kod: [fragment]
public class Server {
Logger log = LoggerFactory.getLogger(this.getClass());
Registry registry;
int registryPort = 55554;
String stubName = "piskvornik";
int port = 55555;
String hostname = "localhost";
private PiskvornikServerInterface piskvornik;
PiskvornikServerInterface piskvornikStub;
public Server(String ipAddress, int serverPort) {
if (System.getSecurityManager() == null) {
log.debug("System.getSecurityManager() = null. Creating new
one.");
System.setSecurityManager(new RMISecurityManager());
// System.out.println("WWWW"+ System.getSecurityManager().);
}
System.setProperty("java.rmi.server.hostname", ipAddress);
registryPort = 55554;
stubName = "piskvornik";
port = serverPort;
try {
log.debug("Registry created at PORT " + registryPort);
piskvornik = new PiskvornikServer();
piskvornikStub = (PiskvornikServerInterface)
UnicastRemoteObject.exportObject(piskvornik, port, new RCSF(), new
RSSF(ipAddress));
registry = LocateRegistry.createRegistry(registryPort);
log.debug("stub piskvornik created");
registry.rebind(stubName, piskvornikStub);
log.debug(stubName + " binded into registry " + registry);
} catch (RemoteException ex) {
log.error(ex.getMessage());
}
}
}
Jde o RMI server, ktery vytvori RMIregistry a do nich chce zaregistrovat
object piskvornikStub.
Vyskytuje se mi anomalie pri spousteni programu:
pokud za
piskvornikStub = (PiskvornikServerInterface)
UnicastRemoteObject.exportObject(piskvornik, port, new RCSF(), new
nedam timeout
Program se normalne spusti a bezi ale neni vytvoren socket ktery by mohl
komunikovats klienty
pokud tento timeout nasimuluji napr vlozenim kodu
new Scanner(System.in).readline();
pak vse probehne v poradku.
Mam podezreni ze java neni schopna dostatecne rychle zainteragovat s
kernelem a vytvorit socket a nekde se to uvnitr JVM rozbije.
Tato anomalie se stane nekdy 1/10 nekdy 10/10 a uz si opravdu nevim
rady. pricemz spoustim aplikaci porad stejne z konzole, zadna zmena ....
Dekuji za vsechny rady.
Diky
PP
muj system::
p...@lenovo:~$ java -version
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03)
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02, mixed mode)
p...@lenovo:~$ cat /proc/version
Linux version 2.6.31-13-generic (bui...@yellow) (gcc version 4.4.1
(Ubuntu 4.4.1-4ubuntu7) ) #45-Ubuntu SMP Tue Oct 13 02:07:24 UTC 2009
p...@lenovo:~$
CPU Intel C2D
RCSF a RSSF jsou klasicke sockety
public class RSSF implements RMIServerSocketFactory, Serializable {
private static final long serialVersionUID = 91477001985329L;
String hostname;
public RSSF(String hostname) {
this.hostname = hostname;
}
@Override
public ServerSocket createServerSocket(int port) throws IOException {
return new ServerSocket(port, 0,
InetAddress.getByName(this.hostname));
}
}
--
Petr Prikryl
-----------------------
[email protected]
[email protected]
www.admin24.cz