Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

probleme ejbCreate

1 réponse
Avatar
arnaud b35
salut à tous

je fais des tests cluster (3 machines) avec JBoss 3.2.3 + JVM sun 1.4.2
+ mysql 4.0.17 sous w2000

j'utilise un entity + un session bean
le session propose une méthode loadOrCreate() : le session fait un find
puis créer l'entity en cas de FinderException et le retourne

le client de test que j'utilise lance une centaine de loadOrCreate() en
multithread (c'est un cas d'utilisation réel de mon appli future)

le problème c'est que ce test provoque de nombreuses createException :
en effet il suffit que plusieurs find soit effectués en meme temps, mais
seul le premier qui crée fonctionne , les suivants plantent
(CreateException)


le contenu de la méthode loadOrCreate() est une section critique et donc
atomique dans mon cas.

la question est :

comment faire pour gérer une section critique en cluster du style

find
si(!find)
create
fsi

return

1 réponse

Avatar
Salut,

alors, normalement, ton entrity bean devrait etre cree avec une clef
primaire, donc, il faut qu'a un moment, tu utilises un findByPrimaryKey pour
savoir si ton objet existe ou non.
Ton serveur devrait soit retourner une instance deja existante, soir en
creer une et la retourner.

Normalement, findByPrimaryKEy est threadsafe donc l'appel de cette metode
devrait resoudre ton probleme. A prioris tous les entity bean doivent
implementer cette metode.

Dans notre code, nous procedons en deux etapes (parce que les objets sont
partages entre divers modules, donc, on doit s'assurer de l'integrite des
objets avant de les recuperer).

Etape 1:
- MyObjHome objHome=(MyObjHome)
javax.rmi.PortableRemoteObject.narrow(objet,classe) pour verifier qu'il n'y
a pas un gus qui a mis un objet avec un p'tit truc maison qui planterai
tout. MyObjHome est un inteface et l'objet specifie par 'objet' et classe
doit verifier le cast.

Etape 2:
- MyObj=objHome.findByPrimaryKey(clef) pour recuperer l'objet.

Certain encapsulent encore le resultat du findByPrimaryKey dans un narrow
aussi, mais je ne sais pas trop si c'est vraiment utile car si l'etape 1
verifie deja si ton objet peut colle avec l'interface, alors, pourquoi
verifier encore une fois si l'objet recupe colle avec la classe dont il est
issue.

Mais bon,

I hope it helps,
A+
T.