07. maj 2003 - 09:13Der er
12 kommentarer og 1 løsning
Send object via RMI
Hej!
Jeg skal sende et object fra en klient til en server via RMI. Jeg har kigget lidt på tingene og fundet ud af at man skal serialize sine objecter for at kunne sende dem. Jeg har også fundet ud af at man kan sende objecter vha. en ObjectOutputStream og modtage vha. en ObjectInputStream. Men for at oprette en sådan ObjectOutputStream skal jeg bruge en OutputStream altså noget fra en socket.
Findes der en anden måde at sende objecter via RMI eller kan man fikse det med ObjectOutputStream?
Jeg ved godt at man laver lookup og kan så kalde metoder på objektet som lå det lokalt. Det er ikke det jeg vil :) Jeg vil gerne sendet et objekt til serveren som så skal stoppe objektet ned i en database. Altså
klient skal sende object til server server stopper objektet ned i database
hvad mener du med "Du vil på server siden eksplicit serialisere og gemme det serialiserede i en database ?"
Jeg vil sende et objekt fra klienten til serveren og serveren skal så gemme objektet i en db :) Det er sikkert det samme du mener, men vil bare lige være sikker :)
Det konverterer mellem et vilkårligt objekt og en printable streng.
Hvis du godt kan bruge noget binært så kan du nøjes med:
private byte[] String encode(Object o) throws Exception { ByteArrayOutputStream ba = new ByteArrayOutputStream(1000); ObjectOutputStream oba = new ObjectOutputStream(ba); oba.writeObject(o); return ba.toByteArray(); } private static Object decode(byte[] b) throws Exception { ByteArrayInputStream ba = new ByteArrayInputStream(b); ObjectInputStream oba = new ObjectInputStream(ba); return oba.readObject(); }
Servern står med et objekt der skal gemmes i databasen. Det kommer rent faktisk fra klienten via RMI, men det er "liggyldigt" - serveren skal bare gemme et objekt og derfor skal du have det serialiseret, så du kan putte det ned i databasen.
det vil altså sige at jeg serialiserer objektet og laver en metode der hedder gem(Object o) som så ligger i server interfacet? Eller skal jeg i gang med noget med en ObjectOutputStream og input ?
RMI compileren generere noget kod etil både client (kaldet stub) og server (kaldet skeleton).
Den genererede stub kode laver en serialisering og skeleton laver en deserialisering så din implementations kode på server side bliver kaldt med det samme objekt som din client kode kaldte med.
Det er hele pointen i RMI at man ikke skal bekymre sig om alle de trivielle ting såsom serialisering/deserialisering.
Eksplicit serialisering er noget man skal bruge hvis man bruger sockets - elle rhvis man vil skrive det serialiserede til en fil eller en database til senere brug.
Synes godt om
Ny brugerNybegynder
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.