[JAVA] [RMI] RMI class loader disabled

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • battler
  • Registratie: November 2004
  • Laatst online: 30-06 15:11
Ik ben al een paar dagen bezig met een RMI classe. Op dit moment werkt het nog steeds niet en ik begin me af te vragen of ik wel goed bezig ben. De error volgens mij verantwoordelijk voor dit probleem is deze:
java.lang.ClassNotFoundException: ReceiveMethods (no security manager: RMI class loader disabled). Nu kan ik dus blijkbaar classes downloaden maar daarvoor moet ik een Class loader enablen.

Voorlopig heb ik gewoon zowel op de client als server locatie een interface staan. Maar volgens mij wilt hij beschikken over alle uit te voeren classes. Dit laatste heb ik uiteraard alleen aan de server kant staan.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
static public void main(String args[]) {
        ReceiveMethods rmiServer;
        Registry registry;
        String serverAddress = "145.24.159.188";
        String serverPort = "3333";
        String text = "testing";
        System.out.println("sending " + text + " to " + serverAddress + ":" + serverPort);
        try {
            // get the “registry”
               System.out.println("Maak registry code aan");
            registry = LocateRegistry.getRegistry(serverAddress,
                    (new Integer(serverPort)).intValue());
            // look up the remote object
            System.out.println("We gaan de registry opzoeken");
            rmiServer = (ReceiveMethods) (registry.lookup("Server"));
            // call the remote method
                System.out.println("We gaan de methode's uitvoeren");
            rmiServer.Links();
            rmiServer.Rechts();

        //2e methode

        } catch (RemoteException e) {
    System.out.println("RemoteException Failure 1:" );
            e.printStackTrace();

        } catch (NotBoundException e) {
            System.out.println("NotBoundException Failure 2:" );
            e.printStackTrace();
        }
    }


OUTPUT:
code:
1
2
3
4
5
run:
sending testing to 145.24.159.188:3333
Maak registry code aan
We gaan de registry opzoeken
RemoteException Failure 1:


Error:

java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: ReceiveMethods (no security manager: RMI class loader disabled)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at server.Client.main(Client.java:22)

Caused by: java.lang.ClassNotFoundException: ReceiveMethods (no security manager: RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:535)
at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1531)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1493)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
... 2 more

Lux.Architectuur | Van Dromen tot Wonen | www.Lux-a.nl


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 17-09 12:49

Nick_S

++?????++ Out of Cheese Error

Welke hiervan heb je al bekeken?

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • battler
  • Registratie: November 2004
  • Laatst online: 30-06 15:11
Een kleine stap verder; Als ik het goed begrijp is de Security Manager een file waarin rechten worden gedefineerd. Ik heb de volgen tutorial gevolgd; http://java.sun.com/developer/JDCTechTips/2001/tt0227.html.

Hierbij heb ik een bestand aangemaakt, in de zelfde folder als de client app.
SimpleRMI.policy
code:
1
2
3
4
5
6
 grant {
    permission java.net.SocketPermission" 
                        *:3333-", "accept, connect";
    permission java.io.FilePermission 
           "${/}/home/gebruiker/Desktop/Server/src/server${/}server${/}-", "read";
  };



En vervolgens in Netbeans aangegeven als startup command: -Djava.security.policy=client/SimpleRMI.policy.

Nog steeds het zelfde probleem. Doordat ik helemaal nieuw ben met RMI heb ik het gevoel dat ik door de bomen het bos niet meer zie.

[ Voor 17% gewijzigd door battler op 12-10-2009 18:31 ]

Lux.Architectuur | Van Dromen tot Wonen | www.Lux-a.nl


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 17-09 12:49

Nick_S

++?????++ Out of Cheese Error

Notice the use of ${/} instead of / or \. The policy expands ${/} to the correct path or folder delimiter on your host platform.
Nu heb je dus aan het begin twee '/' staan. Eigenlijk zou je elke '/' door ${/} moeten vervangen, maar dat is niet wat er hier fout gaat.

Weet je ook zeker dat dit het pad is waar je class files staan? Ik zie 'src' staan, maar weet niet zeker waar netbeans je classes neerzet. Eclipse doet dit bijvoorbeeld standaard in 'bin', terwijl maven het in 'target/classes' neer zet. Even controleren waar dus je class files staan.

Ook is volgens mij "server" je package. Deze staat nu dus ook twee keer in het pad.

Edit:
Als ik het goed begrijp is de Security Manager een file waarin rechten worden gedefineerd.
Klein beetje miereneuken, maar de SecurityManager is diegene die controleert of bepaalde acties wel/niet mogen. Dat bestand configureert de SecurityManager. Voor meer over policies, zie ook Trail: Security Features in Java SE.

[ Voor 23% gewijzigd door Nick_S op 12-10-2009 19:39 ]

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • battler
  • Registratie: November 2004
  • Laatst online: 30-06 15:11
Het volgende vraag ik mij af. Voor het aangeven van de dir. moet die absoluut of relatief zijn?

Ik heb nu de volgende policy gemaakt, als het goed is moet dit voldoende zijn.


code:
1
2
3
grant {  
     permission java.security.AllPermission "", "";  
 };


Dit staat opgeslagen in een bestand genaam SimpleRMI.policy wat weer in de dezelfde map staat als de class files.

Vervolgens nog een starup command mee gegeven; -Djava.security.policy=SimpleRMI.policy

Maar gewoon nog steeds dezelfde error. De data komt wel aan bij server (Wireshark). Alle policy's zijn client side, waarschijnlijk moet ik ook nog iets aangeven in de server maar ik heb geen idee wat.

Vervolgens heb ik ook de volgende code in erin gestopt:

code:
1
2
3
4
 if (System.getSecurityManager() == null)
        {
        System.setSecurityManager   (new RMISecurityManager());
        }


Wat resulteerd in de volgende error message:

code:
1
Exception in thread "main" java.security.AccessControlException: access denied (java.net.SocketPermission 145.24.159.188:6666 connect,resolve)

Op dit moment komt de data ook niet meer aan bij de Server.


Ik heb gisteren een boek besteld "Java Network programming" maar ook hierin staat niets over het policy verhaal, zelfs niet in het hoofdstuk RMI. Iemand die zijn licht erop kan schijnen :?

[ Voor 105% gewijzigd door battler op 13-10-2009 19:23 ]

Lux.Architectuur | Van Dromen tot Wonen | www.Lux-a.nl


Acties:
  • 0 Henk 'm!

  • battler
  • Registratie: November 2004
  • Laatst online: 30-06 15:11
Bump for new info ^^

Lux.Architectuur | Van Dromen tot Wonen | www.Lux-a.nl


Acties:
  • 0 Henk 'm!

  • Domdo
  • Registratie: Juni 2009
  • Laatst online: 30-06 20:29
Bind je je RMI-service wel op het juiste ip (dmv. java.rmi.server.hostname of iets vergelijkbaars)????

Acties:
  • 0 Henk 'm!

  • battler
  • Registratie: November 2004
  • Laatst online: 30-06 15:11
De data komt wel gewoon aan bij de server. Ook als de server niet aan staat krijg ik een error message "Connection Refused". Dus ik denk niet dat het daar fout gaat.

Lux.Architectuur | Van Dromen tot Wonen | www.Lux-a.nl

Pagina: 1