[Java]RMI krijg server niet gestart

Pagina: 1
Acties:

  • Linc
  • Registratie: December 2000
  • Laatst online: 19-02 12:07
Ik voer dit command uit:

java -Djava.security.manager HelloServer localhost:1077

en dan krijg ik deze foutmelding:

Hello Server failed: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1077 connect,resolve)

Die snap ik nog want ik heb waarschijnlijk geen rechten.

Dan voer ik dit command uit:

java -Djava.security.manager -Djava.security.policy=TestPolicy.policy HelloServer localhost:1077

en krijg deze fout melding

Hello Server failed: java.rmi.ServerException: RemoteException occurred in serve
r thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested excep
tion is:
java.lang.ClassNotFoundException: Hello_Stub (no security manager: RMI c
lass loader disabled)

dit is mijn policy-file:

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


en dit is de code van mijn HelloServer

Java:
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
import java.rmi.*;

public class HelloServer{

   public HelloServer(){
    
   }

/**
   * Server program for the "Hello, world!" example.
   * @param argv The command line arguments which are ignored.
   */
  public static void main (String[] argv) {
    try {
        /*if (System.getSecurityManager() == null) {

            System.setSecurityManager (new RMISecurityManager());


        }*/

      Naming.rebind ("//"+argv[0]+"/Hello", new Hello ("Hello, world!"));
      System.out.println ("Hello Server is ready at:"+argv[0]);
    } catch (Exception e) {
      System.out.println ("Hello Server failed: " + e);
    }
  }

  
}


Hoe komt dat hij niet kan binden aan de rmiregistry ??

Want ik snap niks van die vage foutmelding

http://www.slobmotorsport.nl - iRacing Profiel


Verwijderd

Altijd lastig dat RMI. Ik neem aan dat je de RMIRegistry al hebt draaien??

Ik weet niet wat er in de Hello.java file staat, die heb je vast ergens gedownload.

Er is waarschijnlijk nog een een java file bij waarin de interface staat waar de class "Hello" zich aan dient te houden. Die interface moet door de RMI-compiler worden gehaald (rmic) om stub en skeleton files aan te maken.

  • Linc
  • Registratie: December 2000
  • Laatst online: 19-02 12:07
Verwijderd schreef op 20 December 2002 @ 20:09:
Altijd lastig dat RMI. Ik neem aan dat je de RMIRegistry al hebt draaien??

Ik weet niet wat er in de Hello.java file staat, die heb je vast ergens gedownload.

Er is waarschijnlijk nog een een java file bij waarin de interface staat waar de class "Hello" zich aan dient te houden. Die interface moet door de RMI-compiler worden gehaald (rmic) om stub en skeleton files aan te maken.
ja als ik me eigen rmiregistry draai dan werkt het perfect, maar er draait al een rmiregistry op het systeem met port 1077 en daar wil ik me server eigenlijk aan binden en dat wil dus nie.

Kan dit nu niet of wel?

http://www.slobmotorsport.nl - iRacing Profiel


  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
rmi is niet zo lastig hoor, zelfs vrij simpel.

Je moet alleen wel je policy file laden in je applicatie. Dit kan je doen door de volgende regel toevoegen:

System.setProperty("java.security.policy", "c:\\policy.file");

Wat ook wel handig is om vanuit je applicatie een batch file aan te roepen (rmi.bat) die je RMI class compiled en het RMI registry start, dit vergeet je namelijk gemakkelijk zelf te doen, tenminste ik wel dan :)

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    try
    {
        // WinNT
        Runtime.getRuntime().exec( "cmd /c start rmi.bat" );
    }
    catch( Exception e )
    {
        try
        {
        // Win98
        Runtime.getRuntime().exec( "command /c start rmi.bat" );
        }
        catch( Exception ex )
        {
            System.out.println("Can`t start rmi.bat!");
        }
    }


Inhoud van rmi.bat

set PATH=%path%;c:\jdkdir\bin
rmic your.rmi.Class
call "rmiregistry.exe"

suk6 :)

[ Voor 121% gewijzigd door Stephan Oudmaijer op 23-12-2002 13:16 ]


Verwijderd

Tot zo ver dat ik weet hoef je die policy file niet in de applicatie te laden. Dat laden doe je via de commandline, zoals de topic starter in het tweede commandline aangaf.

Zoals Blackpete aangeeft, moet je eerst de applicatie door rmic sturen om stubs en skeletons te maken.

Wat ik niet snap is dat je de rmisecuritymanager uitzet, die mag je gewoon aanlaten hoor, het geeft iets meer veiligheid.

daarnaast mis ik nog een paar zaken om rmi goed te laten werken, zoals interface.


Maar sterkte ermee

  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
ja kan ook via commandline maar via de Main is toch simpeler of niet?
Pagina: 1