Avatar billede oesterballe Nybegynder
05. maj 2004 - 13:55 Der er 7 kommentarer og
1 løsning

RMI problemmer

Jeg er igang med at kode en opgave hvor 2 servere(processer) skal kommunikere med hinanden. Jeg skal så simulere at når den ene server går ned kan den anden fortsætte. Dette skaber dog væsentlig delay da jeg ikke ved hvordan jeg skal indstille timeout.

java.rmi.ConnectException: Connection refused to host: 192.168.2.34; nested exception is:
    java.net.ConnectException: Connection timed out: connect

et andet og mere væsentligt problem er at når jeg så starter server 2 op igen, så kan jeg ikke få kontakt med den fra server et. jeg er nød til at genstarte begge servere for at får det til at køre igen. jeg bruger Naming.lookup til at forbinde server 1 til server 2. Når forbindelsen så ryger, og server 2 kommer op at køre igen hvordan forbinder jeg dem så igen?
Avatar billede arne_v Ekspert
05. maj 2004 - 14:06 #1
Hvis du vil registrere at den er gået ned hurtigere kan du lave en keep-alive
kald. Ingen kald => den er nede.

Kan du ikke lave et Naming lookup igen ?
Avatar billede oesterballe Nybegynder
05. maj 2004 - 15:04 #2
Hvis jeg laver et naming lookup på sever 2 igen, så får jeg stadig samme fejl når jeg kalder den fra server 1.

Jeg kalder nedenstående metode der tilsvare det kald jeg laver første gang jeg starter server 1.

public void relookup() throws RemoteException
{
  try
  {
      this.srv2if = (Server2Interface)
        Naming.lookup("rmi://localhost/Server2");
  }
  catch (Exception e){System.out.println("Fejl: " + e);}
}

mem det er som om den ikke connecter igen.
Avatar billede oesterballe Nybegynder
07. maj 2004 - 12:09 #3
hvordan laver jeg et keep-alive kald?
Avatar billede arne_v Ekspert
07. maj 2004 - 12:12 #4
Et keep alive kald er bare et kald som f.eks. opdatere en tid med nuværende tid.

Så kan noget kode sammenligne den tid med nuværense tid og hvis det er over
et bestemt interval, så er den anden død.
Avatar billede oesterballe Nybegynder
07. maj 2004 - 12:49 #5
jeg kalder en metode i min server 2 der returnerer true, det gør jeg for at checke at forbindelsen er oppe, men hvis den er nede, går der 20-30 sekunder før jeg får den fejlmelding du kan se øverst
Avatar billede oesterballe Nybegynder
07. maj 2004 - 12:55 #6
Jeg kalder en lookup metode (i klassen PF) der binder Server 2, når server 2 går ned og genstartes skal jeg kalde denne lookup igen. Problemet er at den funktion er holder øje med om forbindelsen er nede ligger i en anden klasse (Timer). Jeg kan ikke kalde lookup funktionen i klassen PF fra klassen Tímer, eller dvs. jeg ved ikke hvordan jeg skal gøre det, for hvis jeg opretter et nyt objekt af klassen PF, er det nye objekt ikke bundet til RMI registry'et. Jeg skal altså kalde funktionen i klassen PF unden at oprette et nyt objekt af klassen.
Det virker måske simpelt, men som du nok har gættet er jeg ikke en haj til java
Avatar billede oesterballe Nybegynder
08. maj 2004 - 13:30 #7
jeg har fundet en løsning, på direkte ovenstående problem, men har stadig problemmer med at mine rmikald bruger 20-30 sek. på at timeout hvis forbindelsen er nede istedet for at melde tilbage med det samme
Avatar billede oesterballe Nybegynder
02. januar 2005 - 03:14 #8
Den er løst nu
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