Announcement

Collapse
No announcement yet.

RMI-Server

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • RMI-Server

    Hallo,
    Ich habe ein RMI –Plugin(net.genady.rmi_2.0.6) auf Eclipse installiert, damit ich RMI-Applikationen leicht entwickeln und ausführen kann. Nun um RMI-Applikationen ausführen zu können, muss ich einen java.rmi.server.codebase und eine java.security.policy Datei setzen. Könnte jemand mir bitte helfen eine security policy file,oder einen java.rmi.server.codebase zu erzeugen bzw zu erstellen?
    Im voraus vielen Dank.

  • #2
    Also java.rmi.server.codebase ist eine Umgebungsvariable und spezifiziert einen Server (üblicherweise einen Webserver), von dem man sich Class-Dateien laden kann, die nicht im CLASSPATH der JVM liegen, aber zur Laufzeit der RMI-Anwendung benötigt werden. Die kannst Du einfach mit dem Schalter
    Code:
    java -Djava.rmi.server.codebase=http://www.myserver.de/classes ....
    beim Starten Deiner Applikation angeben, oder per
    Code:
    System.getProperties().put("java.rmi.server.codebase","http://www.myserver.de/classes");
    programmatisch in Deiner Anwendung setzen. Danach benötigst Du eine Policy-Datei, die den Bezug solcher Classen in ihren Rechten beschränkt/befugt. Zu Testzwecken kann eine Datei so aussehen:
    Code:
    grant {
       permission java.security.AllPermission;
    };
    die nennst Du einfach security.policy (oder ganz nach Deinen Wünschen) und gibst sie beim Start des Programmes mit an
    Code:
    java -Djava.security.policy=security.policy ...
    Dann solltest Du in den Code dieses Programmes noch folgende Zeile hinzufügen:
    Code:
    System.setSecurityManager(new RMISecurityManager());
    damit überhaupt ein Security-Manager geladen wird, der diese Policy-Datei als Vorlage verwendet.

    Übrigens: Dieses Vorgehen ist eigentlich schon recht speziell. Solltest Du also noch Anfänger in diesem Bereich sein, hab ich eher das Gefühl, dass Du einen Fehler beim Verteilen der Anwendung gemacht hast und vergessen hast, die Stub-Klasse mit auszuliefern. Denn normalerweise ist die Stub-Klasse für den Client im CLASSPATH vorhanden und dieses Vorgehen wäre somit obsolet. Das Ganze benötigt man eigentlich nur in einem relativ komplexen Umfeld oder bei speziellen Wünschen, bei denen man diese Stub-Klassen einfach nicht mitliefern kann/darf/möchte. Der Nachteil dabei ist halt, dass man noch einen Webserver benötigt, von dem man sich diese Class-Dateien beziehen kann.

    HTH,
    Martin

    Comment


    • #3
      Vielen Dank für deine Hilfe

      Vielen Dank für deine Hilfe

      Comment


      • #4
        Wo schreibe ich denn diese Zeile :

        java -Djava.security.policy=security.policy ...

        hin? Wollte es in die Serverklasse schreiben, aber das geht wohl nicht so einfach.

        Comment


        • #5
          Originally posted by carsten1 View Post
          Wo schreibe ich denn diese Zeile :

          java -Djava.security.policy=security.policy ...

          hin? Wollte es in die Serverklasse schreiben, aber das geht wohl nicht so einfach.
          he he
          das ist ein Konsolenbefehl! Womit startest Du denn Dein Programm? Mit Eclipse? Wenn das so ist, musst Du unter der "run"-Verknüpfung diesen Parameter eintragen

          Comment


          • #6
            Danke für die schnelle Antwort!
            (ich arbeite mit eclipse)
            Kann es sein, dass man das "java" am anfang der Zeile weg lässt?
            Und nur: -Djava.security.policy=security.policy ...
            schreibt?

            Und hinten ran kommt doch noch der Name der Server Klasse. Muss man den Pfad da mit angeben?

            bei kommt folgende Fehlermeldung:

            java.lang.NoClassDefFoundError: ServerHello
            Exception in thread "main"

            Comment


            • #7
              Wenn Du mit Eclipse arbeitest:
              - auf "Run..." klicken
              - Aus der Liste links Dein Programm auswählen
              - dann trägst Du das "-Djava.security.policy=security.policy" unter 'Arguments' -> 'VM Arguments' ein. Das solltest dann sein..

              Comment


              • #8
                Nochmals danke!

                Ich hab es genau so gemacht.

                Wenn ich nun HelloServer starte kommt :

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

                Wegen dieser Fehlermeldung hatte ich ursprünglich überhaupt erst eine policy datei erstellt. Ich versteh es einfach nicht. Wenn man diese Exception googlet wird immer darauf hingewiesden, dass der SecurityManager nicht gesetzt wurde oder dass eine Policy Datei fehlt. Nun habe ich beides und krieg immer noch diese verdammte Exception.

                Comment


                • #9
                  was steht denn in deiner policy? Und wo liegt diese? Wo liegt Dein Programm? und welches Betriebssystem benutzt Du?

                  Comment


                  • #10
                    habs geschafft!

                    musste noch den absoluten Pfad mit angeben. Also so:

                    -Djava.security.policy="${workspace_loc}/Aufgabe1/policy/security.policy"

                    Muss man auch erst mal drauf kommen.
                    Und nochmals danke. Finds echt cool, wie engagiert manche Leute sind.

                    ciao

                    Comment


                    • #11

                      freut mich zu hören sowas... dein Glück war, dass ich mich auf Themen, in denen ich etwas schreibe, immer per Mail benachrichtigen lasse. Daher hab ich das so schnell mitbekommen, dass hier jemand etwas geschrieben hat!

                      Schönen Tag noch!

                      Comment

                      Working...
                      X