09. december 2004 - 21:41Der er
28 kommentarer og 1 løsning
eksisterende kode til rmi
Hej
Jeg har en kode, som jeg skal have til at køre client/server.
Jeg har en GUI og en databaseforbindelse, med 2 klasser under sig.
Hvad har jeg brug for af klasser for at det kan køre rmi?
Det jeg er interesseret i, er at få skitseret et klassediagram så jeg kan få et overblik over hvordan det hænger sammen. Gerne lavet ud fra de 4 klasser jeg allerede har.
Mit bud er: Gui > Controller (som lytter på guiknapperne) > server(min databaseforbindelse). Er der andet jeg har brug for?
ok. I forhold til din artikkel http://www.eksperten.dk/artikler/25 hvad er de forskellige klasser så? Jeg ser mange steder en KlasseImpl, KlasseServer, KlasseKlient, KlasseI, hvad indeholder de? Og har jeg brug for dem alle? Er det forkert at sige at min GUI er min klient? Eller er det min controller der er det? Er min databaseforbindelse min ServerImpl? Meningen med det er vel, at serveren tager sig af alt det den kan tage sig af og at der kun ligger referencer til metoder på klienten?
Jeg bliver helt i tvivl. Som jeg ser det er: Min databaseforbindelse = Server = din CalcImpl din Calc = Interface = den jeg mangler GUI eller controller = TestCalc
Jeg forsøger mig med denne linie i min DbServerImpl: -------------------------------------
public static void main(String[] args) { try { Naming.rebind("Forbindelse", new DbServerImpl()); } catch (RemoteException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } } ------------------------- men den vil ikke compile? Spørger om jeg vil ændre rebind til bind eller cast remote exception....
Jeg er lidt i tvivl om jeg blander tingene lidt sammen nu, men jeg har bla denne metode i DbServerImpl:
public Vector hentVarer() throws SQLException { Vector alle = new Vector(); ResultSet rs = stmt.executeQuery("select NAVN, PRIS from VARE"); while (rs.next()) { // brug kolonneindeks i stedet for kolonnenavn Vare v = new Vare( rs.getString(1), rs.getInt(2)); alle.addElement(v); } return alle; } ------------------- Den brokker sig lidt over at jeg throws SQLException her....hvordan hænger det sammen med at jeg throws RemoteException på metoden i min forbindelses klasse?
Hvis jeg fjerner throws SQLException fra metoden i DbServerImpl så lader det til at den er tilfreds. Er det overhovedet nødvendigt på den metode at throws SQLException? Hvad er det præcist der sker når jeg gør det, ved du det?
public void indsætVare(Vare v) throws SQLException throws RemoteException; public Vector hentVarer() throws SQLException throws RemoteException; }
Indtil videre har jeg ovenstående i min forbindelse. Giver det nogen mening at nr. 2 throws i første linie bliver markeret med rødt mens ingen af de andre gør det?
Stub og skeleton genereres af RMIC compileren. Du skal ikke selv skrive dem.
(i nyere Java versioner kan de vost endda genereres dynamisk på runtime)
Serialisering og deserialisering ordner stub og skeleton - du skal kun sikre dig at dine argumenter er serializable - du kan ikke sende et ResultSet med godt en ArrayList af et serialiazable objekt af ints og strings.
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.