Avatar billede Tampico Praktikant
03. marts 2004 - 10:49 Der er 4 kommentarer og
1 løsning

Struktur gennem RMI

Hejsa !!!

Jeg har brug for lidt hjælp til min struktur jeg er ved at implementere over RMI.

Mit problem ligner lidt hen af det der fremgår af: http://www.eksperten.dk/spm/269910

Jeg har 2 delsystemer, som hver bliver repræsenteret af en klasse, henholdsvis LagerHandler og SalgsordreHandler. Disse to handlers skal så gå gennem et fælles interface, nemlig ServerInterface. Jeg har derfor læst mig frem til at en af løsningerne på dette problem er ved at oprette en abstract klasse (Handler) mellem interfacet og mine to handlers som så extender den abstracte klasse i stedet for interfacet.

Dette har jeg så forsøgt mig på, men da jeg så vil køre min server i min main-klasse (Server), er jeg lidt i tvivl om hvilken klasse jeg skal forbinde op til ??

Jeg ville umildbart mene det ville være den abstracte klasse, men det ser ud til at være forkert ?

Jeg har kørt problemfrit med min LagerHandler indtil nu, og da var koden i min main følgende:

import java.rmi.Naming;

public class Server
{
  public static void main(String[] arg) throws Exception
  {
    ServerInterface k = new LagerHandler();   
    Naming.rebind("rmi://localhost/tjeneste", k);   
    System.out.println("Serveren kører\n\n");
  }
}


Jeg er kørt lidt fast i problemstillingen, så hvad gør jeg nu ???
Avatar billede arne_v Ekspert
03. marts 2004 - 12:12 #1
Jeg tror at det skal designes anderledes.

Ikke:
  2 classes extends abstract base class implements interface
fordi du binder en instans.

Men:
  2 classes implements interface
  1 class implements interface
og du binder den sidste, client lookup og call den sidste. Den sidste
dispatcher så til den rigtige af de 2 første.
Avatar billede Tampico Praktikant
03. marts 2004 - 13:01 #2
Okeeey...jeg har prøvet mig lidt frem med den metode, men jeg synes ikke helt jeg kan få det til at fungere.
Jeg har lige lagt den kode jeg bruger hertil, så hvor er det dét går galt?

Jeg skulle jo gerne have et enkelt instans og koble op med hvor alle metoderne indgår, men da Handler er abstract er dette tilsyneladende ikke muligt ???



public interface ServerInterface extends java.rmi.Remote
{
  public String Hello1() throws java.rmi.RemoteException;
  public String Hello2() throws java.rmi.RemoteException;
}


public abstract class Handler extends UnicastRemoteObject implements ServerInterface
{
  public String Hello1() {return "1"; }
  public String Hello2() {return "2"; }
}


public class LagerHandler extends UnicastRemoteObject implements ServerInterface
{
  public String Hello1()
  {   
    return "Hello 1";
  }
}


public class SalgsordreHandler extends UnicastRemoteObject implements ServerInterface {
{
  public String Hello2()
  {   
    return "Hello 2";
  }
}


public class Server
{
  public static void main(String[] arg) throws Exception
  {
    ServerInterface k = new Handler();
    Naming.rebind("rmi://localhost/tjeneste", k);
    System.out.println("Serveren kører\n\n");
  }
}


Når jeg så afvikler serveren, kører jeg følgende dosprompt:

c:\programmer\sdk\bin\rmic Kildekode.Forretningsmodel.Handler
start c:\programmer\sdk\bin\rmiregistry
start c:\programmer\sdk\bin\java Kildekode.Forretningsmodel.Server
Avatar billede arne_v Ekspert
03. marts 2004 - 13:34 #3
Prøv med noget a la:

public class LagerHandler
{
  public String Hello1()
  {   
    return "Hello 1";
  }
}

public class SalgsordreHandler
{
  public String Hello2()
  {   
    return "Hello 2";
  }
}

public interface ServerInterface extends java.rmi.Remote
{
  public String Hello1() throws java.rmi.RemoteException;
  public String Hello2() throws java.rmi.RemoteException;
}

public class Handler extends UnicastRemoteObject implements ServerInterface
{
  private LagerHandler lh = new LagerHandler();
  privare SalgsordreHandler sh = new SalgsordreHandler();
  public String Hello1() { return lh.Hello1(); }
  public String Hello2() { return sh.Hello2(); }
}
Avatar billede arne_v Ekspert
03. marts 2004 - 13:36 #4
Pointen er at du skal binde en instans (og dermed en ikke abstrakt klasse).
Avatar billede arne_v Ekspert
06. marts 2004 - 15:53 #5
OK ?
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