RMI - By reference problem
Hej Eksperter!Sidder her med et rmi problem.
Jeg har en klasse/remote interface PersonInterface som extends Remote, dette interface indeholer blot getter/setters for Person klassen. Person klassen implementerer så PersonInterface.
Derudover har jeg en PersonDAO som også extends Remote, denne klasse indeholder en opret, opdater og en slet metode, samt en udskrivPersonnavn() og en getPersoner() metode.
I min Server klasse implementerer jeg PersonDAO interfacet. I Server klassen opretter jeg også en ArrayList personer, et par personer og indsætter personerne i Arraylisten. Her implementeres så opret, opdater, slet og udskrivPersonnavn() metoderne. udskrivPersonnavn() metoden returnerer blot navnet på den første person i listen, altså personer.get(0).getNavn(). getPersoner() returnerer blot arraylisten personer. Så langt så godt :)
I min Client klasse opretter jeg også en ArrayList tmpPersoner. Denne liste smider jeg så personerne fra listen fra serveren ind i, altså tmpPersoner = stub.getPersoner()
And here comes the kicker!
Jeg vil nu påvise at person listen fra serveren er foregået "by reference" altså at tmpPersoner blot indeholder en reference til den oprindelige person liste på serveren. Derfor gør jeg følgende:
tmpPersoner.get(0).setNavn("Jens")
Hvis tmpPersoner var en ren kopi af person listen fra serveren, ville vi nu have ændret navnet på den første person lokalt på client siden, men da vi har gang i "by reference" skulle navnet i listen på serversiden også gerne blive ændret
Jeg kører derfor stub.udskrivPersonnavn()
Denne metode udskriver som bekendt det første navn fra listen på server siden, som nu gerne skulle være "Jens" (Lad os bare antage at navnet oprindeligt var "Karl")
Og nu til problemet: Når jeg kører min klient får jeg følgende fejl:
error unmarshalling return; nested exception is:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: rmi_byReference.Person
Det skal siges, at det samme eksempel virker fint "by copy" altså hvor der ændres i tmpPersoner på client siden og navnet i de to lister er forskellige...
Nogen der kan sige om jeg har overset noget... ?
Har prøvet på at forklare problemet så godt som muligt... :)
