[ sendai @ 22.03.2008. 21:03 ] @
Ovako napisao sam jednostavan RMI program koji uspjesno kompajliram, ali kad ga pokrenem baca mi AccessControlException.
rmiregistry je naravno pokrenut.
Iznimku mi baca pri registraciji objekta dakle kad pozovem 'Naming.bind()' metodu.
Pretpostavljam da je to do samog OS-a(mozda grijesim) pa me zanima sta treba da promjenim u postavkama ako je do toga.Koristim Windows XP Profesional SP2.
Ime mog kmpa u 'bind()' metodi je tacno napisano ovu liniju sam isto napisao
Code:
System.setSecurityManager(new RMISecurityManager()); 

Iznimka detaljnije izgleda ovako:
Code:
java.security.AccessControlException: access denied(java.net.SocketPermission imeKompa resolve)
at idt...

Pa ako netko zna.
[ anon156554 @ 23.03.2008. 09:31 ] @
trebalo bi da policytool-om (deo jdk-a) kreiras policy datoteku, koja ce da dozvoli potrebne privilegije.
....
grant {

permission java.net.SocketPermission "127.0.0.1:79-65535", "connect";



};


...
Obican ASCII fajl iz koga security manager cita privilegije.
[ sendai @ 23.03.2008. 17:02 ] @
Ok.To sam napravio i ne baca mi vise iznimku, morao sam navesti i "listen, resolve" pod actions.
Medjutim sada program nece da izadje.Nakon 'Naming.bind()' samo jos ima da ispise poruku i to je to ali on se ne zavrsava nakon ispisane poruke.
rmiregistry nisam pokrenuo iz programa sa linijom:
Code:
LocateRegistry.createRegistry(int port);

nego iz konzole sa naredbom
"start rmiregistry".
Da li mozda tako i treba da radi ili ne?
Predpostavljam da program treba da nastavi sa radom ako pozovem rmiregistry iz njega sa gore navedenom linijom.


[Ovu poruku je menjao sendai dana 23.03.2008. u 18:23 GMT+1]
[ anon156554 @ 23.03.2008. 17:10 ] @
LocateRegistry.createRegistry();
treba da postavis port rmi-ja kao parametar prethodne metode. Ne postoji non parametric metoda.
[ sendai @ 23.03.2008. 17:27 ] @
Naveo sam parametar u programu, gresku sam napravio kad sam pisao post.
Znas li zasto se ne zavrsava, ponavljam tu liniju nisam ni koristio, nego sam pozvao rmiregistry iz konzole?Otvori se u zasebnom prozoru.
[ anon156554 @ 23.03.2008. 18:30 ] @
LocateRegistry.createRegistry() = start rmiregistry
Nadam se da si ispostovao sva pravila, kako mora da izgleda remote interfejs(extends remote, klase bacaju remoteException..), zatim kako mora da izgleda Klasa koja implementira interfejs (implements TvojInterfejs,extends unicastRemoteObject...)
Moze da bude dosta toga u pitanju
[ sendai @ 23.03.2008. 19:04 ] @
Sve sam uradio kako treba, to je mali programcic za vjezbu.
Nema veze napravio sam zaseban thread koji slusa unos sa tipkovnice i ako String sadrzi u sebi "END" ili "end" prekida rad programa.
Pomogao si puno, nisam uopce znao za taj program policytool.
Hvala.
[ anon156554 @ 23.03.2008. 20:38 ] @
No problemo
[ Milunov_Mali @ 21.06.2008. 16:36 ] @
Imam isti problem, ne mogu da pokrenem RMI server. Isposhtovao sam sva pravila za RMI, a Policy fajl sam snimio u src direktorijum kao Server.policy (jel treba tako?), evo kako izgleda:

Code:


grant {
  permission java.net.SocketPermission "ice-comp", "listen, connect, resolve, accept";
};



Pokrenuo sam rmiregistry sa konzole. Evo kako izgleda main:

Code:

   try
        {
           
            if (System.getSecurityManager() == null) {

            System.setSecurityManager(new RMISecurityManager());

            }

            RMIImplementacija rmi=new RMIImplementacija();  
            Naming.rebind("RMIImplementacija", rmi);
            
            System.out.println(" Server ready.");
        }
        catch(Exception e)
        {
            System.out.println("Greska: "+e.toString());
        }


baca mi exception:

Code:

java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)



Program puca kod izvrsavanja - Naming.rebind("RMIImplementacija", rmi);

Jel treba jos nesto da se uradi sa Policy fajlom? Svaka pomoc je dobrodosla, Hvala unapred

p.s.Koristim NetBeans 6 i jdk 1.6
[ grizzly @ 21.06.2008. 20:34 ] @
to sto ti pokreces kao server nije ti u src direktorijumu nego tamo gde su .class fajlovi. Stavi server.policy tamo jer server ne moze da nadje taj policy fajl.
[ Milunov_Mali @ 22.06.2008. 00:22 ] @
Stavio sam policy fajl u folder sa .class fajlovima, ali ista greska se javlja. U stvari ista greska se javlja i bez pokrenutog rmiregistry.
[ grizzly @ 22.06.2008. 21:24 ] @
Meni RMI isto nije hteo raditi sa takvim policy fajlom, vec sam morao ukljuciti i code base, ovako

Citat:

grant codebase "file:C:\\MyHomeoSoftRMIServer\\-"{
permission java.security.AllPermission;
};
[ Milunov_Mali @ 22.06.2008. 23:29 ] @
Nista se ne desava, sta god uradio opet ista greska, poludecu. Evo kako izgleda policy fajl, a stavio sam ga u folder Server (tu je i RMIImplementacija_Stub.class) :

Code:

grant codeBase "file:D:\\NetBeansProjekti\\RMI\\Server\\-" {
  permission java.security.AllPermission;
};


u codebase sam napisao putanju do projekta.
Da li treba da dobijem neku poruku kad pokrenem rmiregistry?Otvori mi se prazna konzola

p.s.Izvini sto smaram, ali nikako da resim ovo, googlao sam podosta i uvek nailazio na iste odgovore

[ grizzly @ 23.06.2008. 23:06 ] @
Meni pricas, pa ja sam zbog te crtice izgubio 4 sata...