Jeg skal ikke lige kunne sige hvorfor det specielle metodekald ikke virker, men det er flere gange blevet opdaget at JavaSun ikke er helt fremadkompatibelt. Dvs. selvom det virkede i en tidligere version, er det absolut ikke sikkert at det virker i de nye versioner.
lidt nærmere forklaring: uden den nævnte linie i spørgsmålet kører det fint. med linien kan jeg stadig kompilere uden problemer, men får ved runtime en "java.security.AccessControlException" ???
Når du starter et java program har den et set af permissions, som beskriver hvad den må. En almindelig applikation må alt, mens f.eks. en applet er stærkt begrænset.
Inden en række metoder bliver kaldt, kontrolleres dette hos en security manager, som er installeret pr. default (Det gør den, som starter java programmet).
Når du skal køre RMI bør serveren ikke bare kunne udføre alt kode. For tænk nu hvis den får overført et serialiseret object med "format c:" inde i..!!
I gamle dage (1.2) var problemet ikke løst helt, men nu om dage, er det meget specifikt. Du starter op med at kalde System.setSecurityManager(new RMIServerSecurityManager()). Altså installerer en ny security manager. Denne manager gør at næsten ingenting kan lade sig gøre (Og derved ligner den jo en applets sandbox).
Faktisk kan den ikke engang køre rmi, fordi den ikke må accepte connections fra nogle porte over hovedet :-)
Altså skal du have defineret de muligheder, som din server må (Beskrive security policies) og fortælle dit program, at disse policies er gældende.
At beskrive policies gøres i formen, som jeg skriver ovenover. Ja, det ligner ikke javakode :-)
Det ovenstående linie gør er at tillade at en java.net.ServerSocket kan kalde accept metoden (hvis den bruger en port mellem 1024 og 65535), og iøvrigt tillade indgående connections fra denne accept metode.
I din java documentations bundle er der mere information om disse rettigheder.
Men for dit vedkommende...
Lav en fil (f.eks. server.policy), med det indhold, jeg beskriver (Husk alle semikoloner). Og når du starter din server: java -Djava.security.policy=server.policy org.tommer.rmi.Server
tak for den fine forklaring. det er netop en applet jeg har gang i, det mærkelige er bare at det virker med tidligere versioner af JDK. jeg vil lege lidt videre med problemet hej hej.
til logical. øv øv jeg ved sgu ikke hvad jeg gør forkert, selv mad en security fil kan jeg ikke få noget som helst til at virke :-( jeg har prøvet at få en short course opgave på sun hjemmeside til at køre det lykkedes heller ikke men hvorffor? link her: http://developer.java.sun.com/developer/onlineTraining/rmi/exercises/BootstrapExample/index.html hvis du har tid/overskud til at kigge på det kan du evt få flere point. hvis ikke så er det ok.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.