Avatar billede spooloff Nybegynder
04. november 2003 - 17:40 Der er 12 kommentarer og
1 løsning

Hvad er RMI stub + skel?

Skal igang med noget RMI for første gang og er derfor ikke helt klar på fremgangsmåden!

Det vi efterlyser er info om oprettelse og anvendelse af stub og skel.
Avatar billede erikjacobsen Ekspert
04. november 2003 - 17:41 #1
De oprettes af rmic (RMI Compiler) programmet på basis af de metoder der
skal kunne kaldes. I den nyeste RMI behøv's vist kun _stub.
Avatar billede aslan Nybegynder
04. november 2003 - 18:05 #2
Inden du skal arbejder klient og server med RMI starter du med at lave en interface i java. De metoder denne interface indeholder skal du så implementere på server siden. Klienten har så disse metoder til rådighed som den kan kalde på serveren. Men før de kan arbejde sammen skal du oprette stub(klient) og skel(server) via rmic ud fra interfacen. Alt netværks protocal styring osv bliver altså automatisk lavet for dig via rmic...
Avatar billede arne_v Ekspert
04. november 2003 - 18:22 #3
RMI bygger på Proxy pattern (GoF).

client kode--(java kald)--stub kode--(socket)--skeleton kode--(java kald)--server kode

Både stub og skeleton koden genereres.

Stub implementerer samme interface som  serveren.

Client kalder stub, stub serialiserer argumenter og skriver til socket,
skeleton læser fra socket deserialiserer argumenter og kalder server
koden. Og modsat ved kaldets afslutning.
Avatar billede arne_v Ekspert
04. november 2003 - 18:26 #4
Eksempel:

Test.java = interface

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Test extends Remote {
  public String test(String s) throws RemoteException;
}

TestImpl.java = server

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class TestImpl extends UnicastRemoteObject implements Test {
  public TestImpl() throws RemoteException {
  }
  public String test(String s) {
      return (s + s);
  }
  public static void main(String[] args) {
      try {
        Naming.rebind("test", new TestImpl());
      } catch (RemoteException e) {
        e.printStackTrace();
      } catch (MalformedURLException e) {
        e.printStackTrace();
      }
  }
}

TestTest.java = client

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class TestTest {
  public static void main(String[] args) {
      try {
        Test t = (Test) Naming.lookup("test");
        System.out.println(t.test("a"));
        System.out.println(t.test("bb"));
        System.out.println(t.test("ccc"));
      } catch (MalformedURLException e) {
        e.printStackTrace();
      } catch (RemoteException e) {
        e.printStackTrace();
      } catch (NotBoundException e) {
        e.printStackTrace();
      }
  }
}

build procedure

javac *.java
rmic TestImpl

3 x kør

rmiregistry
java TestImpl
java TestTest
Avatar billede spooloff Nybegynder
04. november 2003 - 18:45 #5
Får følgende fejl, hvad betyder det?!?

C:\>javac test.class
'JAVAC' is not recognized as an internal or external command,
operable program or batch file.
Avatar billede spooloff Nybegynder
04. november 2003 - 18:46 #6
Fejlen kommer kun ved compilering og rmic. Jeg kan sagtens køre med 'java test'.
Avatar billede arne_v Ekspert
04. november 2003 - 18:49 #7
Det lyder som den ikke kan finde javac kommandoen !

Har du installeret Java SDK ?

Har du path sat til dets bin directory ?
Avatar billede arne_v Ekspert
04. november 2003 - 18:50 #8
(det er iøvrigt javac test.java ikke javac test.class)
Avatar billede spooloff Nybegynder
04. november 2003 - 19:02 #9
He he, ok jeg var lige lidt hurtig da jeg skulle finde fejlen... Hvordan sætter jeg den path?
Har installeret j2sdk.1.4.2_02, så jeg burde have javac og rmic.
Avatar billede arne_v Ekspert
04. november 2003 - 19:09 #10
control panel
system
advanced
environment
tilføj til PATH
Avatar billede arne_v Ekspert
04. november 2003 - 19:22 #11
Ellers kan du jo også bare bruge fuld sti:

\j2sdk1.4.2_02\bin\javac test.java

(ret til efter hvor det ligger henne)
Avatar billede spooloff Nybegynder
04. november 2003 - 19:28 #12
Hey arne v

Du har fortjent point... kast lige et svar, så du kan få dem!
Avatar billede arne_v Ekspert
04. november 2003 - 19:58 #13
svar
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
Kategori
Kurser inden for grundlæggende programmering

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