[ samilen @ 09.05.2005. 18:43 ] @
| Uradio sam aplikaciju za polaganje nekog ispita na fakultetu. Radi se o nekim narudžbenicama... sve to uglavnom radi. Ali ne lezi vraže :) dodatni zahtev je da jednu komponentu (onu koja radi sa bazom - <database mapper>) distribuiram i pozivam preko RMI-a. Tu nastaju problemi koje otklanjam postepeno i sporo, a hitno bi trebao da završim. Pitanja za sve koju mogu da mi pomognu su sledeća:
1. Da li uvek moram pri startovanju da kucam opciju
-Djava.security.policy=dozvole.policy, ili to nekako mogu da ubacim u kod, ili u manifest *.jar fajlova unutar kojih će i sve ostalo biti smešteno (jedan za klijenta:logika i GUI, a jedan za server:DB Mapper+baza)
2. Mogu li nekako preko RMI-a da prosledim exceptione koje baca konstruktor objekta sa servera, ka klijentu. To mi je važno jer su moji exceptioni ispisani u JOptionPane i bilo bi dobro da ih user vidi.
imajte u vidu da je sve dopušteno jer fajl sa dozvolama(dozvole.policy) izgleda ovako:Code: grant {
permission java.security.AllPermission;
};
Čini mi se da je ovo sa tekstualnim fajlom koji ima grant blok i/ili opcijama koje se prosleđuju ka VM vrlo neelegantno urađeno u javi, pa pretpostavljam da postoji i neki elegantniji način. |
[ anon156554 @ 10.04.2008. 18:15 ] @
Pokusavam da pod ubuntu linuxom kreiram jednostavnu RMI app.
Sve je odradjeno, sa serverske strane Interface::Remote, Objekat implements Interface extends UnicastRemoteObject, pokrenut RMIregistry na serveru, postavljeni class fajlovi na apache web server, koje treba da downloaduje klijent.
Odradjen klijent, koji u main metodi setuje security manager, zatim preko naming klase poziva stub objekat....
Kada pozovem
java -Djava.security.policy=klijent.policy KlijentskiProgram, izbacuje:
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
java.net.ConnectException: Connection refused
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at java.rmi.Naming.rebind(Naming.java:160)
at SP.main(SP.java:19)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
... 6 more
Nije mi jasno odakle u stack trace-u ono
Connection refused to host: 127.0.1.1????
Treba localhost da bude, a ne ova dva keca...
A, kada se ne desi ta greska, onda se pri pokretanju klijentskog programa javlja:
KP.java:25: cannot access SOInt
bad class file: ./SOInt.class
illegal start of class file
Please remove or make sure it appears in the correct subdirectory of the classpath.
SOInt ob = (SOInt) Naming.lookup(adresaServera + "SO");
^
1 error
[Ovu poruku je menjao odalinjo dana 10.04.2008. u 19:31 GMT+1]
[ bags @ 10.04.2008. 18:32 ] @
Otvori /etc/hosts pa promjeni 127.0.1.1 u 127.0.0.1 ako si koristio koristio hard-coded adresu na serveru.
[ anon156554 @ 10.04.2008. 19:22 ] @
Da, editovao sam taj fajl, pisalo je
localhost 127.0.0.1
odalinjo@desktop 127.0.1.1
Prepravio sam ga, ali i dalje izbacuje:
KP.java:25: cannot access SOInt
bad class file: ./SOInt.class
illegal start of class file
Please remove or make sure it appears in the correct subdirectory of the classpath.
SOInt ob = (SOInt) Naming.lookup(adresaServera + "SO");
^
1 error
Nije mi jasno kakav bad class fajl pominje.
[ bags @ 10.04.2008. 19:40 ] @
Jesi li dao privilegije na fajlove i na klijentu i na serveru:
Code:
grant codeBase "file:/home/ann/src/" {
permission java.security.AllPermission;
};
Moze li postovati kako ti izgleda ova adresaServera ?
[ anon156554 @ 10.04.2008. 19:46 ] @
kod mene klijent.policy ima oblik
grant{
permission java.security.AllPermission;
};
bez ovog codebase atributa.
Serverski program startujem sa java -Djava.rmi.codebase=http://127.0.0.1/Download ServerProgram
[ anon156554 @ 10.04.2008. 19:57 ] @
Jel policy datoteka treba da se prosledi na citanje i klijentskom i serverskom programu?
Mislio sam da je to neophodno samo klijentu?
[ bags @ 10.04.2008. 20:54 ] @
Trebalo bi i na serveru.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.