Avatar billede _carsten Nybegynder
12. februar 2003 - 21:24 Der er 16 kommentarer og
1 løsning

Server og database - RMI/Socket

Hvilken løsning er den bedste, har en database på server
som klienter skal tilgå via en RMI eller socket løsning ?

Men jeg har ikke rigtig fod på hverken RMI eller socket,
men tror dog det forholder sig som nedenstående.

1. RMI 'måske' er langsommere en sockets.

2. Via sockets, kan sendes/hentes objekter.

3. Med sockets er der nok også lidt mere kodearbejde i
  begge ender

Jeg har søgt her på Eksperten uden lige at finde svaret.

Er der nogen her på Eksperten, som kan be-/ afkræfte
ovenstående, alternativt komme med et løsningsforslag ?

Carsten
Avatar billede arne_v Ekspert
12. februar 2003 - 21:36 #1
RMI er naturligvis lidt langsommere end sockets, da de bygger
ovenpå sockets.

Du kan godt sende objekter over sockets.

Men med sockets skal du selv kode det at få alle objekter sendt/læst
mens det med RMI er ligeså let som et almindeligt metode kald.
Avatar billede arne_v Ekspert
12. februar 2003 - 21:37 #2
Et potentielt alternativ hvis sikkerhed tillader det er direkte JDBC.
Avatar billede arne_v Ekspert
12. februar 2003 - 21:38 #3
Både RMI og sockets et 3 tier:
  client---RMI eller socket---server---JDBC---database

Direkte JDBC er 2 tier:
  client---JDBC---database
Avatar billede arne_v Ekspert
12. februar 2003 - 21:39 #4
Fordelen ved RMI over sockets er størst hvis der er mange
forskellige kald med mange argumenter.
Avatar billede _carsten Nybegynder
12. februar 2003 - 21:44 #5
Okay..

Nogle klienter connecter via LAN andre via router, for det dig til at foretrække den ene frem for den anden ?

Jeg synes nemlig det ser lidt bøvlet ud at få sat serveren op til RMI,
for at sige det lige ud: Jeg aner ikke hvad og hvordan, samt hvad der skal installeres på server.
Avatar billede arne_v Ekspert
12. februar 2003 - 21:48 #6
Hvis du med router mener ude fra internet gennem en router
som evt. også fungerer som firewall, så vil jeg sige at:
  - direkte JDBC nok ikke er godt
  - RMI er stadig muligt men sockets er langt det nemmeste
    at få lukket op for
Avatar billede arne_v Ekspert
12. februar 2003 - 21:49 #7
Det er ikke så svært at med RMI.

Jeg kan godt poste et lille eksempel, hvis du er interesseret.
Avatar billede _carsten Nybegynder
12. februar 2003 - 21:50 #8
Det er virksomhedens eget routernet
Avatar billede _carsten Nybegynder
12. februar 2003 - 21:51 #9
>Det er ikke så svært at med RMI.

>Jeg kan godt poste et lille eksempel, hvis du er interesseret.

JEG ER MEGET INTERESSERET !!
Avatar billede arne_v Ekspert
12. februar 2003 - 21:55 #10
Hvis det er virksomhedens interne routere som kun laver routing,
så skulle de gerne være transparente i forhold til både RMI,
sockets og JDBC.
Avatar billede arne_v Ekspert
12. februar 2003 - 21:57 #11
Eksempel (ready to run on Win32):

Test.java
---------

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

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

TestImpl.java
-------------

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
-------------

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();
      }
  }
}

Test.bat
--------

javac *.java
rmic TestImpl
start rmiregistry
start java TestImpl
pause
java TestTest
Avatar billede arne_v Ekspert
12. februar 2003 - 21:59 #12
Test.java = RMI interface
TestImpl.java = RMI implementation + server main program
TestTest.java = client
Test.bat:
  oversæt java
  run RMI Compiler til at generere stub og skeleton kode
  start RMI Registry (som client og server bruger til at finde hinanden)
  start server
  kør client
Avatar billede _carsten Nybegynder
12. februar 2003 - 22:02 #13
Du var lige ved at få mig over sockets........

Er der nok med JRE på server, for køre RMI ??
(hvis du orker mere)
Avatar billede arne_v Ekspert
12. februar 2003 - 22:05 #14
javac og rmic kræver JDK.

Men java og rmiregistry skule være i JRE.

Så du bør kunne udvikle på en PC med JDK og deploye
på en server med JRE.
Avatar billede _carsten Nybegynder
12. februar 2003 - 22:10 #15
Du er bare kanon til det her !!

Du brugte et ord jeg ikke lige er med på:  'deploye'
Avatar billede _carsten Nybegynder
12. februar 2003 - 22:13 #16
Jeg har fundet ud af betydning af 'deploye'

Tusind - Tusind - Tusind - Tusind tak for hjælpen.

Jeg arbejder videre herfra
Der er point på vej!!

Carsten
Avatar billede arne_v Ekspert
12. februar 2003 - 22:16 #17
deploye er sådan et udtryk der er på mode i visse kredse.

Bare oversæt det med køre.

Altså:

Så du bør kunne udvikle på en PC med JDK og køre
på en server med JRE.
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