Avatar billede thomaslp Nybegynder
28. juli 2003 - 21:40 Der er 14 kommentarer

er remote metoder synkroniseret

Hej,
Jeg har en webservice på en server. Når klienter kalder metoder på denne webservice, er disse metoder så automatisk synchronized som det er tilfældet ved Java RMI?
Avatar billede arne_v Ekspert
28. juli 2003 - 22:34 #1
Så vidt jeg ved er Java RMI remote methods ikke synchronized.

Der er heller ingen grund til det, da der creates et object for hver tråd,
og synchronized derfor ingen effekt vil have.

1 minuts læsning om .NET remoting har overbevist mig om at det er det
samme: ingen synkroniering men et objekt per tråd.
Avatar billede disco_keld Nybegynder
29. juli 2003 - 10:39 #2
>> Arne_V!!!

når du siger tråd, hvad mener du så?

mvh

DK
Avatar billede arne_v Ekspert
29. juli 2003 - 10:53 #3
En tråd - a thread hvis vi snakker engelsk.
Avatar billede jpvj Nybegynder
29. juli 2003 - 10:55 #4
arne_v> Så skulle det vist være afklaret :-)

Tror måske ikke at thomaslp er klar over hvad en thread er...
Avatar billede arne_v Ekspert
29. juli 2003 - 11:03 #5
Nu var det keld og ikke thomas der spurgte om tråd.

Men det er da muligt.

En tråd er et begreb som dækker over at et program kan køre forskellige
stykker kode logisk set parallelt.
Avatar billede thomaslp Nybegynder
29. juli 2003 - 13:13 #6
Jeg ved godt hvad en tråd/thread er....:)
Men jeg bliver noget forvirret over Arne_v's svar.
(nu snakker jeg Java RMI). Jeg tog fejl vedr. Java RMI's automatisk
synkronisering af remote metoder. Men hvis der laves et nyt
objekt pr. tråd vil det medføre at man ikke kan synkronisere.
Det vil da give et problem hvis f.eks. et remote objekt tilbyder
database adgang/opdatering - eller generelt et behov for at udføre kritiske sektioner.

Jeg mener dog heller ikke at der laves et nyt objekt pr. tråd. En server opretter jo et objekt med new operatoren, og efterfølgende kan klienter få en reference til dette objekt via Naming.Lookup (java).

http://my.execpc.com/~gopalan/java/rmi_internals.html
Avatar billede arne_v Ekspert
29. juli 2003 - 13:24 #7
Nej.

Du kan sagtens lave en manuel synkronisering.

Lad os forestille os en enkelt database connection og multiple
objekter i hver sin tråd.

Det hjælper ikke at lave:

synchronized void dosomething

i objekternes klasse da det jo netop er forskellige objekter.

Men hvis man inde i metoden laver:

synchronized(connection) {
  // brug connection
}

så er der jo fin synkronisering.

Pointen er:
1)  man skal selv synkronisere
2)  man skal sikre sig at alle tråde synkroniserer på samme objekt
Avatar billede arne_v Ekspert
29. juli 2003 - 13:33 #8
Men du har uden tvivl ret i at RMI bruger samme objekt
til alle trådene.

Fordi man kalder jo rebind med en instans ikke med et klasenavn.

Jeg må have tænkt på noget andet.
Avatar billede thomaslp Nybegynder
29. juli 2003 - 13:36 #9
Jeg forstår godt hvad du skriver. Men jeg er forvirret. Citat fra Deitel & Deitel "Advanced Java 2 Platform". "Once a Java object registers as being remotely accessible, a client can obtain a remote refrence to that object.....".

Når jeg i Java RMI laver Naming.lookup på serveren for at få en reference til det remote objekt jeg har registreret i rmiregistry, er det så ikke en referenve til dette objekt jeg får....altså ikke et objekt pr. tråd, men istedet et (og samme)objekt for alle tråde?
Avatar billede thomaslp Nybegynder
29. juli 2003 - 13:36 #10
hov....der krydsede vi vist hinanden :)
Avatar billede thomaslp Nybegynder
29. juli 2003 - 13:39 #11
og burde det så ikke kunne lade sig gøre at anvende:
synchronized void foo()
Avatar billede arne_v Ekspert
29. juli 2003 - 13:49 #12
En "remote reference" er jo en abstraktion. Man har en socket connection
til noget der har en referance.

Jo.
Avatar billede thomaslp Nybegynder
29. juli 2003 - 17:50 #13
okay.....jeg vi er vist ved at være enige :)
Men tilbage til synkroniseringen. Du foreslår at for manuelt at synkronisere.
Kan du uddybe det lidt. Hvor vil du placere denne connection til databasen? hvis vi ligger den i webservice filen vil der så ikke også være en connection pr. objekt? Jeg forstår ikke helt hvad du mener?
Avatar billede arne_v Ekspert
29. juli 2003 - 17:54 #14
Hvis N objekter/tråde skal dele 1 connection, så skal connection
jo enten bare være static eller bedre være en singleton. Og så kan man
synkronisere på objektet.

[lige netop for database connections vil man nok lave en connection
pool]
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