Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2260 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [EJB] primary key generée par un trigger, non retournée ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[EJB] primary key generée par un trigger, non retournée ?

n°890547
the real m​oins moins
Posté le 04-11-2004 à 19:44:29  profilanswer
 

Plop,
 
Bon, gros problème ici: (mais peut etre trivial, j'espere)... Je crée un entity bean...
ZobLocal zob = home.create(null, blah, truc, machin);
 
le null, c'est un des champs de la pk composée. Sur la bd (oracle), y'a un trigger en "BEFORE INSERT" qui fait un truc du genre  

Citation :


IF:NEW.champbidule IS NULL THEN  
 SELECT blah.NEXTVAL INTO aBidule FROM dual;
 :NEW.bidule =: aBidule;
END IF;


et d'autres trucs apres..
 
Manque de pot, quand apres mon create je fais zob.getPrimaryKey() ou zob.getBidule(), je me retrouve avec un beau null pour le champ que le trigger à pourtant bien rempli au niveau de la base.
Une idée de ce que je peux faire?

mood
Publicité
Posté le 04-11-2004 à 19:44:29  profilanswer
 

n°890549
simogeo
j'ai jamais tué de chats, ...
Posté le 04-11-2004 à 19:45:24  profilanswer
 

[:cupra]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°890554
kadreg
profil: Utilisateur
Posté le 04-11-2004 à 19:49:04  profilanswer
 

Oui. C'est lié au système de synchro de données entre la base et ton EJB via le container (avec entre autre le dirty). Pour controler cela, c'est malheureusement très dépendant du serveur d'application. Tu utilise quoi ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°890557
chrisbk
-
Posté le 04-11-2004 à 19:49:19  profilanswer
 

the real moins moins a écrit :


Une idée de ce que je peux faire?


 
danser la carmagnole ?

n°890559
the real m​oins moins
Posté le 04-11-2004 à 19:49:44  profilanswer
 

kadreg a écrit :

Oui. C'est lié au système de synchro de données entre la base et ton EJB via le container (avec entre autre le dirty). Pour controler cela, c'est malheureusement très dépendant du serveur d'application. Tu utilise quoi ?

jboss

n°890601
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 04-11-2004 à 20:45:55  profilanswer
 

ça fait longtemps que t'y bosses ? :o


Message édité par Harkonnen le 04-11-2004 à 20:46:34

---------------
J'ai un string dans l'array (Paris Hilton)
n°890604
the real m​oins moins
Posté le 04-11-2004 à 20:48:08  profilanswer
 

mais arretez de pourrir mon topic [:sisicaivrai]

n°890608
chrisbk
-
Posté le 04-11-2004 à 20:51:27  profilanswer
 

Spour ton bien, un topic avec plein de reponses attire plus de monde [:icon7]

n°890610
kadreg
profil: Utilisateur
Posté le 04-11-2004 à 20:52:15  profilanswer
 

Harkonnen a écrit :

ça fait longtemps que t'y bosses ? :o


 
fortune :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°890613
nraynaud
lol
Posté le 04-11-2004 à 20:53:24  profilanswer
 

[:dawa]


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le 04-11-2004 à 20:53:24  profilanswer
 

n°890619
simogeo
j'ai jamais tué de chats, ...
Posté le 04-11-2004 à 20:55:36  profilanswer
 

the real moins moins a écrit :

mais arretez de pourrir mon topic [:sisicaivrai]


[:chapi]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°890692
darklord
You're welcome
Posté le 04-11-2004 à 21:56:25  profilanswer
 

[:blueflag]
intéressant ...


Message édité par darklord le 04-11-2004 à 21:56:34

---------------
Just because you feel good does not make you right
n°890739
julienv
Posté le 04-11-2004 à 22:23:30  profilanswer
 


 
fo utiliser les EntityCommand, j'explique :
 
quand une clef est generee par la DB il faut que le container la recupere.
dans ce cas la il faut utiliser une entity command qui va se charger de ca.
 
la commande va etre executee apres l'insertion et va avoir en param
lors de l execution la connection qui a fait l insert.
 
apres suivant la db, la clef est recuperee, ca peut etre un cast vers
un driver specifique ou alors l execution d'une requete speciale.
 
la ton cas a l'air exotique et je ne sais pas si une entity command pour
ca existe deja, autrement il y a pas mal d'entity command qui existe
(mysql/oracle/hsqldb/sybase/jdbc3/etc....)
 
julien

n°890770
the real m​oins moins
Posté le 04-11-2004 à 22:45:51  profilanswer
 

Salut,
 
J'ai tenté l'aventure entity-command, mais un peu au hasard, faute de doc (la notre doit dater de 3.2.2 je crois, et sur le web j'ai rien trouvé d'explicite) ... J'ai donc tenté de coller l'entity command oracle-sequence sur mon entity, mais manque de pot, ça n'a rien voulu savoir sous pretexte que ma pk est composée de plusieurs champs.
Et je n'ai toujours pas bien compris ce que c'est supposé faire... executer une commande, oui bien, mais, et après... ? je la recuperer ou/comment ma pk ?
 
En tous cas, si tu as un lien ou l'autre sous le coude, ça m'interesse :) merci !


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°890818
julienv
Posté le 04-11-2004 à 23:25:37  profilanswer
 

voila le timing :
 
execute ejbCreate()
insert statetement dans la BD
recupere la PK par l entity command (execute par le moteur CMP)
positionne la PK sur l instance de l'ejb
execute ejbPostCreate()
 
apres dans ton code tu fait :
 
ejb = home.create();
pk = ejb.getPrimaryKey();
 
apres pour l entity command, je vais te chch une doc qui explique ca

n°890821
julienv
Posté le 04-11-2004 à 23:26:16  profilanswer
 

ya la doc complete en ligne sur jboss.org en etant member plus (une registration suffit, c'est pas mechant)

n°890825
the real m​oins moins
Posté le 04-11-2004 à 23:27:34  profilanswer
 

julienv a écrit :

voila le timing :
 
execute ejbCreate()
insert statetement dans la BD
recupere la PK par l entity command (execute par le moteur CMP)
positionne la PK sur l instance de l'ejb
execute ejbPostCreate()
 
apres dans ton code tu fait :
 
ejb = home.create();
pk = ejb.getPrimaryKey();
 
apres pour l entity command, je vais te chch une doc qui explique ca

ha ok, c'etait cette partie qui me manquait, et en survolant les sources de JDBCOracleEntityCommand (un truc du genre), ça m'a pas sauté aux yeux ... pas toujours évidentes à suivre les sources de jboss :p


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°890832
julienv
Posté le 04-11-2004 à 23:33:30  profilanswer
 

en fait c est une feature qui est vendo specifique et non couverte par la spec (bien que prevue)

n°890834
the real m​oins moins
Posté le 04-11-2004 à 23:36:12  profilanswer
 

ouaip.. je viens de voir..
 
bordel, j'ai un compte sur jboss.org , je retrouve pas mon pass, et c'est ce soir que le webmail du boulot tombe en rade bien évidemment [:kiki]
 
 
sinon, je viens de voir le planning des formations jboss [:cupra]
(c cher :sweat:)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°890835
nraynaud
lol
Posté le 04-11-2004 à 23:37:26  profilanswer
 

heu on est dans du Jboss ou toujours dans la norme là ?
 
parce que générer "l'api de table" (exemple ici : http://nraynaud.com.free.fr/designer/ ) ça n'a rien d'exceptionnel, je serais étonné qu'il faille rentrer dans les particularités du serveur pour exploiter ça.
 
edit : j'étais en train de taper quand julienv a répondu


Message édité par nraynaud le 04-11-2004 à 23:38:15

---------------
trainoo.com, c'est fini
n°890836
julienv
Posté le 04-11-2004 à 23:37:44  profilanswer
 

viens a paris en decembre :-)

n°890845
the real m​oins moins
Posté le 04-11-2004 à 23:45:41  profilanswer
 

julienv a écrit :

viens a paris en decembre :-)

tu m'offres une place? :p


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°890848
julienv
Posté le 04-11-2004 à 23:47:03  profilanswer
 

malheureusement je ne peux pas

n°890853
the real m​oins moins
Posté le 04-11-2004 à 23:52:04  profilanswer
 

j'imagine :/
 
bon, j'ai encore deux questions:
- Tu sais pourquoi JDBCOracleCreateCommand refusait de fonctionner avec ma clé composée? Si oui, est-ce qu'en implementant moi-meme mon EntityCommand, je pourrai faire ça?
- La doc que j'ai trouvée, je l'avais déjà en imprimée, j'esperais trouver qques details quant à l'implementation d'une commande custom :/


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°890854
chrisbk
-
Posté le 04-11-2004 à 23:53:26  profilanswer
 

on va t'envoyer le gros bebert t'expliquer ca et on va voir si tu peux toujours pas

n°890856
julienv
Posté le 04-11-2004 à 23:54:31  profilanswer
 

blah.NEXTVAL c est une sequence ?

n°890860
nraynaud
lol
Posté le 04-11-2004 à 23:56:54  profilanswer
 

blah est une séquence oui.


---------------
trainoo.com, c'est fini
n°890862
the real m​oins moins
Posté le 04-11-2004 à 23:58:37  profilanswer
 

je confirme


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°890864
julienv
Posté le 04-11-2004 à 23:59:30  profilanswer
 

en fait d'apres le code :
 
http://cvs.sourceforge.net/viewcvs [...] iew=markup
 
l entity command pour oracle utilise la sequence, il execute le truc et ensuite positionne le field avec la valeur

n°890869
the real m​oins moins
Posté le 05-11-2004 à 00:03:04  profilanswer
 

ha ouais d'accord
http://cvs.sourceforge.net/viewcvs [...] iew=markup
il builde le INSERT INTO à la barbare directement là dedans quoi ... (c'est quoi ce truc qui comment par "{call" ??
 
.. et vu le code, mtnt je comprend pourquoi ça voulait pas fonctionner sur ma pk composée.
champbidule, qui est setté par le trigger, est un des 2 champs de la pk composée... dans mon home.create, je passe une valeur nulle pour ce champ, une valeur valide pour l'autre champ de la pk, et des valeurs quelconques pour les autres champs ...
 
 
... donc utiliser ça reviendrait à bypasser le trigger - et on sera donc content que ce trigger fasse un if machin null avant d'aller lui aussi pecher une valeur sur la sequence..


Message édité par the real moins moins le 05-11-2004 à 00:06:02

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°890871
julienv
Posté le 05-11-2004 à 00:06:46  profilanswer
 

rien ne t empeche de faire ta commande :-), le principe est la.

n°890872
nraynaud
lol
Posté le 05-11-2004 à 00:07:14  profilanswer
 

julienv a écrit :

en fait d'apres le code :
 
http://cvs.sourceforge.net/viewcvs [...] iew=markup
 
l entity command pour oracle utilise la sequence, il execute le truc et ensuite positionne le field avec la valeur

Code :
  1. sql.append(sequence+".NEXTVAL, " );


http://www.allojunior.org/english/images/ssdossiers/Sport/rules_history/arbitre.jpg
 
par contre, tu peux pas laisser le trigger faire son boulot et juste faire le " RETURNING " pour éviter d'avoir des références à séquence qui se baladent partout ?
 
 
moins moins > il est bien "for each row" ton trigger ?


---------------
trainoo.com, c'est fini
n°890874
the real m​oins moins
Posté le 05-11-2004 à 00:11:19  profilanswer
 

explique le carton jaune stp?
et pour l'histoire du returning, bah aucune idée; et oui si je me souviens bien il est en for each row ce trigger (ça veut dire quoi ? )


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°890879
nraynaud
lol
Posté le 05-11-2004 à 00:19:50  profilanswer
 

y'a une concaténation dans le append.
(bon et y'a aussi le pb de produire du SQL bien formé avec des manipulations de Strings parce que là on est au niveau du PHP et je subodore même que le nom de la séquence est tiré d'un fichier XML externe)
 
le for each row, ça veut dire qu'il concerne chaque ligne de l'évènement, sinon, c'est tout le statement, donc si dans le statement, t'as 40 lignes, ça va pêter (il y a donc 12 triggers possible sur une table : insert/delete/update, before/after et row/statement).


---------------
trainoo.com, c'est fini
n°890885
the real m​oins moins
Posté le 05-11-2004 à 00:25:59  profilanswer
 

nraynaud a écrit :

y'a une concaténation dans le append.


ha, ce n'est que ça :p
 

nraynaud a écrit :

(bon et y'a aussi le pb de produire du SQL bien formé avec des manipulations de Strings parce que là on est au niveau du PHP et je subodore même que le nom de la séquence est tiré d'un fichier XML externe)


en meme temps, y'a largement assez d'indirections comme ça dans le code de jboss... et puis comme ici on fait de l'sql non standard, ça me parait relativement ok. deux unit tests et emballé, c'est pesé.
(sinon oui, le nom de la sequence viens du descripteur du bean en fait)
ça ne m'explique pas ce qu'est ce "{call" dans l'sql là :heink:
(je lis dans la doc de CallableStatement que c'est fait pour appeler des procédure stockées, y'a peut etre un lien? genre {call INSERT machin ça simule une P.S.?
 

nraynaud a écrit :


le for each row, ça veut dire qu'il concerne chaque ligne de l'évènement, sinon, c'est tout le statement, donc si dans le statement, t'as 40 lignes, ça va pêter (il y a donc 12 triggers possible sur une table : insert/delete/update, before/after et row/statement).


:jap:


Message édité par the real moins moins le 05-11-2004 à 00:26:46

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°890893
nraynaud
lol
Posté le 05-11-2004 à 00:36:46  profilanswer
 

the real moins moins a écrit :

{call INSERT machin ça simule une P.S.?

à tous les coups oui, mais ça doit être une extension du driver jdbc oracle (là je suis pas sur mon mac et la spec jdbc est dedans, donc as de vérif ce soir).
 
mais je suis pas *du tout* pour faire passer du code par jdbc, je suis pour les apis de tables, comme j'ai montré plus haut.


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [EJB] primary key generée par un trigger, non retournée ?

 

Sujets relatifs
intégrité référentielle (trigger) qui marche pasJAVA, J2EE Servlet EJB JSP
Appel distant d'un EJB via un lookup JNDI - Besoin de précisions[eclipse][Jonas] Create and export all EJB JAR files to Jonas
J2EE : Comment gérer les cas limites d'une EJB sans JTA ?Jboss coté client, plugin ou ejb pour charger dans un navigateur
PROGRESS V9 - Trigger[résolu] Page générée en x.y secondes : comment faire ?
trigger insert entre deux serveursJDBC PostGreSQL, insertions de PL/PGSQL trigger et fonction marche pas
Plus de sujets relatifs à : [EJB] primary key generée par un trigger, non retournée ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR