[RMI-java] waar gaat het mis

Pagina: 1
Acties:

  • foaly
  • Registratie: Juni 2005
  • Laatst online: 15-11-2025
Om persistentie te kunnen gebruiken in mijn java applet heb ik besloten RMI te gebruiken....
Maar nu werkt mn RMI oplossing niet en ik kan niet zien waarom niet...

dit is mn code mn "RMI server"

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import java.rmi.*;
import java.rmi.server.*;
import java.io.*;
import java.rmi.registry.*;
import java.util.*;

public class VectorInputServer extends UnicastRemoteObject implements VectorInput {
    private String filename;
    private Vector oudeZoek = new Vector();

    public VectorInputServer() throws RemoteException
    {
        super();
    }

    public void setFileName(String filename)
    {
        this.filename = filename;
    }

    public Vector readVector(ZoekOpdracht o) throws IOException, ClassNotFoundException
    {
         try{
            
            FileInputStream istream = new FileInputStream("zoekopdrachten.tmp");
            ObjectInputStream q = new ObjectInputStream(istream);
            oudeZoek = (Vector)q.readObject();
                    
            }catch (Exception ex){System.out.print("fout lezen"+ex.getMessage()); throw new IOException();}
            
            Vector oudeZoek2 = new Vector();
            oudeZoek2 = oudeZoek;
            oudeZoek2.addElement(o);
            try{
            FileOutputStream ostream = new FileOutputStream("zoekopdrachten.tmp");
            ObjectOutputStream p = new ObjectOutputStream(ostream);
            p.writeObject(oudeZoek2);
            p.flush();
            ostream.close();
            
                    
            }catch(Exception ex){System.out.print("fout schrijven"+ex.getMessage());throw new IOException();}
        

      return oudeZoek;
    }

    public static void main(String[] args) throws Exception
    {
        // creëer en start een registry server
        Registry reg = LocateRegistry.createRegistry(1099);

        VectorInputServer ais = new VectorInputServer();
        Naming.rebind("VectorInput", ais);

        System.out.println("VectorInputServer gestart");
    }
}


een interface om hem te interfacen

code:
1
2
3
4
5
6
7
8
9
import java.rmi.*;
import java.io.*;
import java.util.*;

public interface VectorInput extends Remote
{
    void setFileName(String filename) throws RemoteException;
    Vector readVector(ZoekOpdracht o) throws RemoteException, IOException, ClassNotFoundException;
}


en het stukje code waar ik hem aanroep

code:
1
2
3
4
5
6
try{
    VectorInputServer vis = new VectorInputServer();
    zochtenOok = new Vector(vis.readVector(o));
    }catch(Exception e){
       System.out.println("eerste try faalt");
    }


Kan iemand mij vertellen hoe ik kan zien waar het misgaat? want de system.out.prints komen niet in mn java console....
alvast bedankt

  • Sammy
  • Registratie: Maart 2000
  • Laatst online: 03-05 10:41
Ik neem aan dat de laatste code snippet in je applet staat? Daar gaat het mis, je wil nl. een instantie van je remote object hebben (in dit geval VectorInput). Dus niet de server instantiëren, dan ben je niet meer remote bezig... Een instantie van VectorInput kun je bv. krijgen door hem in je server in de RMIRegistry te zetten en in je applet deze instantie op te vragen uit de registry. Hier is denk ik voldoende voorbeeldcode voor te vinden, succes.

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-04 03:55

Nick_S

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

Hier een beetje voorbeeld code:

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
31
package examples.hello;

import java.applet.Applet;
import java.awt.Graphics;
import java.rmi.Naming;
import java.rmi.RemoteException;

public class HelloApplet extends Applet { 

    String message = "blank"; 
         
    // "obj" is the identifier that we'll use to refer 
    // to the remote object that implements the "Hello" 
    // interface 
    Hello obj = null; 

    public void init() { 
        try { 
            obj = (Hello)Naming.lookup("//" + 
                getCodeBase().getHost() + "/HelloServer"); 
            message = obj.sayHello(); 
        } catch (Exception e) { 
            System.out.println("HelloApplet exception: " + e.getMessage()); 
            e.printStackTrace(); 
        } 
    } 

    public void paint(Graphics g) { 
        g.drawString(message, 25, 50); 
    } 
}


Dit komt van: http://java.sun.com/j2se/...ide/rmi/getstart.doc.html.

Mochten er nog specifiekere vragen zijn, vraag maar!

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


  • foaly
  • Registratie: Juni 2005
  • Laatst online: 15-11-2025
Nou van dat aanbad maak ik graag gebruik nick_S :)
Okee ik heb het gevoel dat ik dichterbij kom...
ik heb de code in de applet veranderd in:

code:
1
2
3
4
5
6
7
8
9
try{
    VectorInput vi=null;
    vi = (VectorInput)Naming.lookup("//" +  
            getCodeBase().getHost() +"/VectorInputServer");
    //VectorInputServer vis = new VectorInputServer();
    zochtenOok = vi.readVector(o);
    }catch(Exception e){
        invoer.setText("het gaat hier mis!"+e.getMessage()+" "+e.getLocalizedMessage());
    }


hij probeert nu contact te maken met der server maar dan krijg ik de melding:

Connection refused to host: www.ai.rug.nl; nested exception is:
java.net.ConnectException: Connection timed out: connect Connection refused to host: www.ai.rug.nl;
nested exception is:
java.net.ConnectException: Connection timed out: connect

komt dit omdat mn server de RMI niet toe staat of moet ik de VectorInputServer starten ofzo? of is het nog iets anders?

edit: het schoot me te binnen dat de VectorInputServer moet draaien op de server. Op de server draait inmiddels VectorInputServer maar ik krijg nog steeds de zelfde foutmelding...

[ Voor 12% gewijzigd door foaly op 05-07-2005 13:10 ]


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-04 03:55

Nick_S

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

Dit komt waarschijnlijk omdat je rmiregistry niet gestart hebt en je object daar niet hebt geregistreerd. Probeer eerst de sample, die in dat linkje uit m'n vorige post staat eens aan de praat te krijgen. Daar staat ook uitgelegd hoe je je RMI stubs maakt en je server start.

Je krijgt zogezegd twee programma's:

Je server, deze instantieert je object en geregistreerd hem bij RMIregistry.

Je client, deze haalt de instantie uit RMIregistry en voert hier operaties op uit.

Hopelijk is het weer iets duidelijker.

[edit]
Hier misschien een activity diagram waar je misschien wat aan hebt.

http://vip.cs.utsa.edu/cl...JavaRMIInvocationNew1.gif

[ Voor 16% gewijzigd door Nick_S op 05-07-2005 13:18 ]

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


  • foaly
  • Registratie: Juni 2005
  • Laatst online: 15-11-2025
Hmm dit was wel wat ingewikkelder dan ik dacht :)
heb geprobeerd het voorbeeld op java.sun te draaien maar als ik het commando:

java -Djava.rmi.server.codebase=http://myhost/~myusrname/myclasses/ -Djava.security.policy=$HOME/mysrc/policy examples.hello.HelloImpl

uitvoer krijg ik: HelloImpl err: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:10
99 connect,resolve)

ligt dit nou aan mij of aan de server waarop ik het draai??

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-04 03:55

Nick_S

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

Waarschijnlijk heb je je policy file nog niet aangemaakt?

Sla dit in een bestand 'policy' op:
code:
1
2
3
4
grant {
    // Allow everything for now
    permission java.security.AllPermission;
};

En gebruik het pad naar dit bestand in je aanroep:
java -Djava.rmi.server.codebase=http://myhost/~myusrname/myclasses/ -Djava.security.policy=pad/naar/policy/file examples.hello.HelloImpl

[edit]

Dit staat ook wel in de tutorial.
In order to run this code on your system, you'll need to change the location of the policy file to be the location of the directory on your system, where you've installed the example source code.
Maar ik geef toe, RMI is niet het meest makkelijk...

[ Voor 34% gewijzigd door Nick_S op 05-07-2005 14:22 ]

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


  • foaly
  • Registratie: Juni 2005
  • Laatst online: 15-11-2025
ik had een policy file...
naja het wil maar niet werken...
ik bedenk wel wat anders...

  • quistnet
  • Registratie: Januari 2001
  • Laatst online: 18-09-2020
heb je wel rmiregistry gestart?
nja domme vraag

[ Voor 28% gewijzigd door quistnet op 06-07-2005 14:52 ]


  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 21-04 15:56
Firewall issue misschien?
Pagina: 1