Avatar billede callisen Nybegynder
27. februar 2006 - 21:49 Der er 45 kommentarer og
1 løsning

Køre RMI app, Hjælp PLEASE Hjælp mig

Jeg har et kæmpe problem

Jeg skal lave et mindre RMI app, men jeg kan sku ikke få komme igennem det obligatoriste for at kunne gøre min app.

Jeg bruger et eksempel fra bogen "Professional Java jdk 5 edition"

Når jeg skriver følgende sker der noget men det virker som sagt ikke!!!

java -Djava.security.policy=C:\Lokal disk (E)\DiplomIT\RMItest_2\src\Policy myRMIServer

FEJL:
Exception in thread "main" java.lang.NoClassDefFoundError: disk

I bogen står der bare skal skrive:
start rmiregistry
Med så sker der ikke en skid, windows aner ikke hvad jeg mener

Her efter står der man skal skrive:
start rmid -j-Djava.security.policy=rmi.policy
Men der er jeg jo ikke engang kommet til :-(


Hjælp!!!!
Er der ikke nogen der har en lille script fil eller bare nogen der ved præcis hvordan jeg skal gøre?

NB bruger SDK 1.5, og skriver det i cmd i den sti hvor min policy fil ligger
Avatar billede simonvalter Praktikant
27. februar 2006 - 21:52 #1
mellemrum i stier er en dårlig ting ;)
prøv med -Djava.security.policy="C:\Lokal disk (E)\DiplomIT\RMItest_2\src\Policy"

eller flyt den til en sti uden mellemrum.
Avatar billede callisen Nybegynder
27. februar 2006 - 21:53 #2
Her er mine filer

---------- myRMIServer.jar ------------
grant {
    // Allow everything for now
    permission java.security.AllPermission;
};




---------- Register.java ---------------
import java.rmi.*;
import java.rmi.activation.*;
import java.util.Properties;

public class Register {
   
    /** Creates a new instance of Register */
    public Register() {
    }
   
    public static void main(String[] args) throws Exception {
       
        RMISecurityManager rmiMGR = new RMISecurityManager();
        System.setSecurityManager(rmiMGR);
        Properties pProperties = new Properties();
        pProperties.put("java.security.policy",
                "C:/Lokal disk (E)/DiplomIT/RMItest_2/src/policy");
        ActivationGroupDesc.CommandEnvironment actCommandEnv = null;
        ActivationGroupDesc actGroup = new ActivationGroupDesc(pProperties, actCommandEnv);
        ActivationGroupID actGroupID = ActivationGroup.getSystem().registerGroup(actGroup);
       
        String sFileLocations = "file:///C:" +
                "/Lokal disk (E)/DiplomIT/RMItest_2/src";
        /* Create the rest of the parameters that will be passed to the
        * ActivationGroupDesc constructor
        */
       
        MarshalledObject marshalledObj = null;
        ActivationDesc actDesc = new ActivationDesc(actGroupID, "TestActivationImpl",
                sFileLocations, marshalledObj);
       
        /* Register with rmid */
        TestRemoteInterface trInterface = (TestRemoteInterface)Activatable.register(actDesc);
       
        /* Bind the stub that we received with the RMI registry */
        Naming.rebind("TestActivationImpl", trInterface);
    }
   
}

----------------- TestClient.java ------------------
import java.rmi.*;

public class TestClient {
   
    /** Creates a new instance of TestClient */
    public TestClient() {
    }
   
    public static void main(String args[]) {
       
        String sURI = "rmi://127.0.0.1/TestActivationImpl";
       
        /*Get a securety manager */
        RMISecurityManager rmiSM = new RMISecurityManager();
        System.setSecurityManager(rmiSM);
       
        try{
            TestRemoteInterface testRI = (TestRemoteInterface)Naming.lookup(sURI);
           
            String sResponse = (String)testRI.rmiWelcome();
           
            System.out.println("Received the following response from " +
                    "activatable remote object: " + sResponse);
           
        }catch(Exception e){
            e.printStackTrace();
        }
    }
   
}

------------------ TestRemoteInterface.java --------------------
import java.rmi.*;

public interface TestRemoteInterface extends Remote{
   
    public String rmiWelcome() throws RemoteException;
}

--------------------- TestActivationImpl.java ------------------------
import java.rmi.*;
import java.rmi.activation.*;

public class TestActivationImpl extends Activatable implements TestRemoteInterface {
   
    /** Creates a new instance of TestActivationImpl */
    public TestActivationImpl(ActivationID activationID, MarshalledObject marshalledObj)
    throws RemoteException {
        // Register the object
        super(activationID, 0);
    }
   
    /* Now you need to implement the remote interfaces here!
    */
    public String rmiWelcome() throws RemoteException {
        return (String)"Welcome to activatable RMI";
    }
}
Avatar billede arne_v Ekspert
27. februar 2006 - 21:54 #3
jeg er helt enig med hensyn til mellemrum i dir og brug af ""

med hensyn til rmiregistry saa har du den hvis du har installeret SDK/JDK

men er java's bin dir i PATH ?
Avatar billede callisen Nybegynder
27. februar 2006 - 21:55 #4
cool nu sker der noget, men hvad skal man så vælge?
Avatar billede callisen Nybegynder
27. februar 2006 - 21:56 #5
nej skal den være det?
Avatar billede callisen Nybegynder
27. februar 2006 - 22:04 #6
OK det går frem af

jeg skrev følgende

start "C:\Programmer\Java\jdk1.5.0_05\bin\rmiregistry"
java -Djava.security.policy="C:\Lokal disk (E)\DiplomIT\RMItest_2\src\Policy"

Herefter startede der noget op i baggrund :-)

Men når jeg starter server får jeg følgende fejl :-(


Exception in thread "main" java.rmi.activation.ActivationException: unable to obtain ActivationSystem; nested exception is:
        java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1098 connect,resolve)
        at java.rmi.activation.ActivationGroup.getSystem(ActivationGroup.java:453)
Avatar billede callisen Nybegynder
27. februar 2006 - 22:05 #7
lydder fejlen bekendt?
Hvad betydder den ?
Avatar billede arne_v Ekspert
27. februar 2006 - 22:07 #8
ja ellers skal der angives fuld sti til rmiregistry
Avatar billede arne_v Ekspert
27. februar 2006 - 22:12 #9
server er vist ikke startet med en policy fil !
Avatar billede callisen Nybegynder
27. februar 2006 - 22:18 #10
Hvad er det jeg gør forkert, jeg er helt på bar bund.
Jeg aner virkelig ikke hvorfor det ikke virker.

Jeg troede at jeg gav en fuld sti til rmiregistry når jeg skrev
start "C:\Programmer\Java\jdk1.5.0_05\bin\rmiregistry"
Jeg troede også at den blev modtaget, den gav hvert fald ikke nogen fejl (blankt linje skift)

skal jeg stå et andet sted i roden end hvor min app ligger,
eller gør jeg noget i den forkerte rækkefølge?
Avatar billede arne_v Ekspert
27. februar 2006 - 22:32 #11
start "C:\Programmer\Java\jdk1.5.0_05\bin\rmiregistry"

skulle gerne give en sort box hvor der ikke sker noget i

fejlen ser ud som om at det program der bliver startet startes uden policy fil
Avatar billede arne_v Ekspert
27. februar 2006 - 22:37 #12
har du laest mine RMI artikler ?
Avatar billede callisen Nybegynder
27. februar 2006 - 22:38 #13
det gør den også :-)

bagefter skriver følgende
java -Djava.security.policy="C:\Lokal disk (E)\DiplomIT\RMItest_2\src\Policy"

svar:
Usage: java [-option] class [args...]
.....
.....


så prøver jeg at køre programmet men får følgende fejl
--------------

Exception in thread "main" java.rmi.activation.ActivationException: unable to obtain ActivationSystem; nested exception is:
        java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1098 connect,resolve)
        at java.rmi.activation.ActivationGroup.getSystem(ActivationGroup.java:453)
        at Register.main(Register.java:33)
Caused by: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1098 connect,resolve)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
        at java.security.AccessController.checkPermission(AccessController.java:427)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
        at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
        at java.net.Socket.connect(Socket.java:501)
        at java.net.Socket.connect(Socket.java:457)
        at java.net.Socket.<init>(Socket.java:365)
        at java.net.Socket.<init>(Socket.java:178)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:569)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
        at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:306)
        at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
        at java.rmi.Naming.lookup(Naming.java:84)
        at java.rmi.activation.ActivationGroup.getSystem(ActivationGroup.java:449)
Avatar billede callisen Nybegynder
27. februar 2006 - 22:41 #14
jeg burde nok skrive

start "C:\Programmer\Java\jdk1.5.0_05\bin\rmiregistry"
java -Djava.security.policy="C:\Lokal disk (E)\DiplomIT\RMItest_2\src\Policy\myRMIServer.jar"

men det virker heller ikke :-(
Avatar billede arne_v Ekspert
27. februar 2006 - 22:46 #15
http://www.eksperten.dk/artikler/25
http://www.eksperten.dk/artikler/225

(de er lavet til en aeldre Java version, men saa meget er der heller ikke lavet om)
Avatar billede callisen Nybegynder
27. februar 2006 - 22:46 #16
ja jeg har læst den første af dine artikler men den hjalp mig ikke rigtig. derefter kiggede jeg på en gammel sag der lignede (du deltog også arne). Den hjalp en del, men jeg mangler lige det sidste.

Kan det have noget med den dtruktur mine mapper ligger i?
Bruger netbeans 5.0, og har lagt policy mappen det samme sted som mine java filer
Avatar billede arne_v Ekspert
27. februar 2006 - 22:47 #17
du skal baade angive en policy fil og den kode som skal koeres
Avatar billede arne_v Ekspert
27. februar 2006 - 22:47 #18
policy er en fil ikke en mappe
Avatar billede arne_v Ekspert
27. februar 2006 - 22:49 #19
kan du faa din kode til at virke uden security policy ?

det er tit en god ide at tage det trinvist
Avatar billede arne_v Ekspert
27. februar 2006 - 22:49 #20
uden security policy => ogsaa uden security manager
Avatar billede callisen Nybegynder
27. februar 2006 - 22:55 #21
Min security policy fil er det ikke

---- myRMIServer.jar ---

grant {
    // Allow everything for now
    permission java.security.AllPermission;
};

Problemet er at jeg skal helst ha' security policy filen til at virke :-(
Derfor har jeg ikke prøvet uden.

Prøver lige din gamle kode fra http://www.eksperten.dk/artikler/225
Avatar billede arne_v Ekspert
27. februar 2006 - 22:58 #22
indholdet er en policy fil indhold

du boer absolut ikke kalde filen for .jar
Avatar billede arne_v Ekspert
27. februar 2006 - 22:58 #23
java -classpath minapp.jar -DDjava.security.policy=minsikkerhed.policy MinKlasse
Avatar billede arne_v Ekspert
27. februar 2006 - 22:59 #24
ups - kun et D

java -classpath minapp.jar -Djava.security.policy=minsikkerhed.policy MinKlasse
Avatar billede arne_v Ekspert
27. februar 2006 - 22:59 #25
jeg mener at det er normalt at kalde sine policy filer for .policy
Avatar billede callisen Nybegynder
27. februar 2006 - 23:17 #26
det virker ikke
Prøver lige din den gamle
Avatar billede callisen Nybegynder
27. februar 2006 - 23:18 #27
I din den gamle hvor placer du din socket.policy

NB har du skrevet det hele i bat filerne?
Avatar billede arne_v Ekspert
27. februar 2006 - 23:24 #28
samme dir som applikationen

jeps - bat filerne er komplette
Avatar billede callisen Nybegynder
27. februar 2006 - 23:25 #29
altså som div pacages?

Får denne fejl når jeg kører server

Exception in thread "main" java.security.AccessControlException: access denied (java.lang.RuntimePermission setFactory)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
        at java.security.AccessController.checkPermission(AccessController.java:427)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
        at java.lang.SecurityManager.checkSetFactory(SecurityManager.java:1612)
Avatar billede callisen Nybegynder
27. februar 2006 - 23:26 #30
Sorry fik ikke det hele med

Exception in thread "main" java.security.AccessControlException: access denied (java.lang.RuntimePermission setFactory)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
        at java.security.AccessController.checkPermission(AccessController.java:427)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
        at java.lang.SecurityManager.checkSetFactory(SecurityManager.java:1612)
        at java.rmi.server.RMISocketFactory.setSocketFactory(RMISocketFactory.java:98)
        at test.server.MyServerMain.main(MyServerMain.java:31)
Avatar billede callisen Nybegynder
27. februar 2006 - 23:27 #31
Følgende linje i din kode

RMISocketFactory.setSocketFactory(new FixedPortRMISocketFactory());
Avatar billede callisen Nybegynder
27. februar 2006 - 23:41 #32
er du der arne?
Avatar billede callisen Nybegynder
27. februar 2006 - 23:48 #33
Hvis du gidder kigge på det tirsdag ville du gøre mig en stor tjeneste

Håber virkelig du har tid, så jeg kan få det op at køre
Avatar billede arne_v Ekspert
28. februar 2006 - 04:09 #34
saa er den jo gal med angivelsen af policy filen

kan du faa det simple eksempel i foerste artikel til at virke ?

saaledes at vi ved at det kun er security som driller

proev saa og post en dir paa directory traaet og en type af policy filen
og echo af kommandoerne
Avatar billede callisen Nybegynder
28. februar 2006 - 16:31 #35
Nej jeg har ikke fået noget til at virke

Arne kan jeg ikke sende et lille test program til dig
Som jeg har placeret i min rod (C:). Jeg tror det kun vil tage dig 2 min. at få den op at køre. Du skal nok få de points du mener du bør have?
Jeg skal bare have det til at virker på min maskine
Avatar billede callisen Nybegynder
28. februar 2006 - 16:40 #36
undskyld jeg vil meget gerne have det til at virke :-)
Avatar billede arne_v Ekspert
28. februar 2006 - 16:48 #37
vi kan da proeve

arne_v@mail.danbbs.dk

der kan sagtens gaa en del timer inden jeg har tid til at kigge paa det

jeg poster konklusionen her
Avatar billede callisen Nybegynder
28. februar 2006 - 18:10 #38
Cool sender den lige til dig, og du er mere end velkommen til at poste løsningen her
:-)

Jeg er meget taknemmlig over at du vil prøve :-)
Avatar billede callisen Nybegynder
02. marts 2006 - 00:01 #39
Har rettede fejlen og sendt en ny mail.
Jeg vil ikke hvorfor min compiler ikke opdagede det (havde ændret navnet på mit remote interface).
Avatar billede arne_v Ekspert
02. marts 2006 - 03:13 #40
nu virker det med gammeldags rmiregistry

mport java.rmi.*;
import java.rmi.server.*;

public class AS_activationImpl extends UnicastRemoteObject  implements AS_remoteInterface {
   
    private String sISBN = "1234"; // dette er er test
    private String sPrice_store = "200 kr amazon.com"; // dette er er test
   
    /** Creates a new instance of AS_activationImpl */
    public AS_activationImpl() throws RemoteException {
    }
   
    /* The implementation of the remote interface */
    public String getBestPrice(String isbn) throws RemoteException {
        // Here there will come some threading
        if( isbn.equals("1234") ){
            return sPrice_store;
        }else{
            return "Denne bog findes IKKE!";
        }
    }   
}

import java.rmi.*;

public class Register {
   
    /** Creates a new instance of Register */
    public Register() {
    }
   
    public static void main(String[] args) throws Exception {
       
        RMISecurityManager rmiMGR = new RMISecurityManager();
        System.setSecurityManager(rmiMGR);
       
        /* Bind the stub that we received with the RMI registry */
        Naming.rebind("AS_activationImpl", new AS_activationImpl());
    }   
}
Avatar billede arne_v Ekspert
02. marts 2006 - 03:15 #41
vindue 1:

C:\e\RMI_lab_v1\src>rmiregistry -J-cp -J.

vindue 2:

C:\e\RMI_lab_v1\src>java -cp . -Djava.security.policy=RMIServer.policy Register

vindue 3:

C:\e\RMI_lab_v1\src>java -cp . -Djava.security.policy=RMIServer.policy UserClient
From Server: 200 kr amazon.com

C:\e\RMI_lab_v1\src>java -cp . -Djava.security.policy=RMIServer.policy UserClient
From Server: 200 kr amazon.com
Avatar billede arne_v Ekspert
02. marts 2006 - 03:15 #42
hvis jeg skal have det til at virke med rmid skal jeg vist lige laese lidt om den
Avatar billede callisen Nybegynder
02. marts 2006 - 11:42 #43
ja nu virker det :-)

Jeg fandt ud af at jeg lavede en tumpe fejl, derfor skrev jeg følgende for at få resultatet med de ændringer du have lavet i klasserne.

vindue 1:
cd C:\RMI_lab_v1\build\classes
PATH =C:\Program Files\Java\jdk1.5.0_04\bin
rmiregistry

vindue 2:
cd C:\RMI_lab_v1\build\classes
PATH =C:\Program Files\Java\jdk1.5.0_04\bin
JAVA -cp . -Djava.security.policy=RMIServer.policy Register

vindue 3:
cd C:\RMI_lab_v1\build\classes
PATH =C:\Program Files\Java\jdk1.5.0_04\bin
JAVA -cp . -Djava.security.policy=RMIServer.policy UserClient


Hvis du kan finde ud af hvordan man rmid ville det være cool, jeg skal gerne give dig flere point for det :-)
Avatar billede callisen Nybegynder
13. marts 2006 - 09:12 #44
Arne skal du ikke have points for din hjælp?
Du behøver ikke at finde ud af det med rmid, jeg var bare nysgæring.
Det er jo efterhånden også noget tid siden, og jeg fik jo også løst mit problem :-)

Set er svar op så jeg ka' give dig nogle points :-)
Avatar billede arne_v Ekspert
14. marts 2006 - 05:28 #45
gerne

men jeg håber stadig at få tid til at kigge på activation, men tid er en knap ressource
Avatar billede callisen Nybegynder
14. marts 2006 - 16:21 #46
Du skal være velkommen, og hvis jeg ikke selv for kigget på det skal jeg gerne give dig lidt point det :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester