Bonjour,
Voilà je dois développer une application et j'ai un gros problème que je ne comprend pas. J'aimerai via un EJB Session récuperer un EJB entité mais mon programme me lance à chaque fois une exception. Et je ne comprend pas d'où ca vient car en plus dans mon cours j'ai exactement le même type d'exemple.
Mon client:
Mon EJB Session:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 // On établit la connexion à l'EJB SessionEJBTraitementLabo try { context = getInitialContext("OC4J"); // OC4J ou J2EE Object objref = context.lookup("SessionEJBTraitementLabo"); // Récupération de l'interface locale intLoc = (SessionEJBTraitementLaboHome)PortableRemoteObject.narrow(objref, SessionEJBTraitementLaboHome.class); // Convertit le champ texte du labo en numéro String tfNumlaboTemp = tfNumLabo.getText(); int NumLabo = Integer.parseInt(tfNumlaboTemp); // Récupération de l'interface distante de l'EJB Session (grâce à l'interface locale) intDist = intLoc.create(tfLogin.getText(), tfPass.getText(), "Administratif", NumLabo); } catch(NamingException Erreur) { JOptionPane.showMessageDialog(null, Erreur, "Serveur pas trouvé (mauvais nom ?)", JOptionPane.ERROR_MESSAGE); return; } catch(Exception Erreur) { JOptionPane.showMessageDialog(null, Erreur, "Erreur lors de la connexion au serveur", JOptionPane.ERROR_MESSAGE); return; } // Si pas d'exception, Recherche try { JOptionPane.showMessageDialog(null, "Recherche des prescritions", "Debug", JOptionPane.ERROR_MESSAGE); // Efface tout le vecteur VPrescription.clear(); JOptionPane.showMessageDialog(null, "Vecteur vidé", "Debug", JOptionPane.ERROR_MESSAGE); // Vérifie que l'utilisateur existe bien et retourne les prescriptions non encore validés VPrescription.addAll(intDist.getPrescriptionNonValide()); JOptionPane.showMessageDialog(null, "getPrescriptionNonValide effectué", "Debug", JOptionPane.ERROR_MESSAGE); } catch(Throwable Erreur) { JOptionPane.showMessageDialog(null, Erreur, "Erreur sur le serveur !", JOptionPane.ERROR_MESSAGE); }
Mon EJB entité
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 // Méthode qui renvoit les prescriptions associées à un labo public Vector getPrescriptionNonValide() throws Exception { System.out.println("< SessionEJBTraitementLaboBean: getPrescriptionNonValide >"); // Vérifie l'identité du client try { EntityEJBPersonnel e; // Appel l'EJB entité Personnel pour vérifier si le client existe bien e = getEJBEntityPersonnel(); } catch(Exception Erreur) { throw new Exception("Erreur appel getEJBEntity dans getPrescriptionNonValide :: " + Erreur.getMessage()); } } // Méthode privée pour récupérer l'EJB entité EntityEJBTraitementLabo private EntityEJBPersonnel getEJBEntityPersonnel() throws Exception { System.out.println("< SessionEJBTraitementLaboBean: getEJBEntityPersonnel >"); try { // Cree le context de nom JNDI Context context = getInitialContext("OC4J"); // Retrouve l'objet associé au nom JNDI Object objref = context.lookup("EntityEJBPersonnel"); // Récupère l'interface locale EntityEJBPersonnelHome home = (EntityEJBPersonnelHome)PortableRemoteObject.narrow(objref, EntityEJBPersonnelHome.class); System.out.println("<DEBUG> SessionEJBTraitementLaboBean: getEJBEntityPersonnel :: A recupéré l'interface locale (Personnel)"); // Construit une clé primaire EntityEJBPersonnelPK key = new EntityEJBPersonnelPK(Login, Pass, AdminOrLabo, ID_LABO); // PLANTE ICI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // --> return (EntityEJBPersonnel)home.findByPrimaryKey(key); // PLANTE ICI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! } catch(NamingException Erreur) { System.out.println("!! SessionEJBTraitementLaboBean: getEJBEntityPersonnel :: NamingException !!"); throw new Exception("Personnel non trouvé ! " + Erreur.getMessage()); } catch(Exception Erreur) { // LANCE CETTE EXCEPTION A CHAQUE FOIS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! System.out.println("!! SessionEJBTraitementLaboBean: getEJBEntityPersonnel :: Exception !!"); throw new Exception("Exception dans getEJBEntityPersonnel :: " + Erreur.getMessage()); } }
L'interface Home de mon ejb entité:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 // Méthode de recherche de l'interface Home public EntityEJBPrescriptionPK ejbFindByPrimaryKey(EntityEJBPrescriptionPK key) throws FinderException { System.out.println("< EntityEJBPrescription: ejbFindByPrimaryKey >"); String RequeteSQL = "SELECT * FROM Prescription WHERE ID_PRE = ?"; ResultSet Resultat; try { PreparedStatement Requete = Connexion.prepareStatement(RequeteSQL); Requete.setInt(1, key.getPrescriptionID_PRE()); Resultat = Requete.executeQuery(); if(Resultat.next()) { this.ID_PRE = key.getPrescriptionID_PRE(); this.ID_MED = Resultat.getInt("ID_MED"); this.ID_PAT = Resultat.getInt("ID_PAT"); this.ID_LABO = Resultat.getInt("ID_LABO"); this.Libelle = Resultat.getString("Libelle"); this.NbrAnalyse = Resultat.getInt("NbrAnalyse"); this.Valide = Resultat.getInt("Valide"); } else { Connexion.close(); throw new NoSuchEntityException("Serveur: " + key.getPrescriptionID_PRE() + " introuvable !>"); } } catch(SQLException Erreur) { throw new FinderException("ejbFindByPrimaryKey : " + Erreur.getMessage()); } catch(EJBException Erreur) { System.out.println("!! EntityEJBPrescription: Connexion BD KO !!"); throw new FinderException("Connexion BD KO " + Erreur.getMessage()); } System.out.println("EntityEJBPrescription: ejbFindByPrimaryKey a trouvé :: " + key.getPrescriptionID_PRE()); return key; }
Aidez moi svp car je ne comprend pas du tout pq ca déconne car tous les exemples du même type que j'ai trouvé fonctionne de cette manière. Je n'ai aucune erreur de compilation et j'ai validé mes EJB et il n'y a aucune erreur non plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public interface EntityEJBPersonnelHome extends EJBHome { EntityEJBPersonnel create(String Login, String Pass, String AdminOrLabo, int ID_LABO, String Nom, String Prenom) throws RemoteException, CreateException; EntityEJBPersonnel findByPrimaryKey(EntityEJBPersonnelPK primaryKey) throws RemoteException, FinderException; }
Je développe avec JDeveloper 10g et je déplois avec OC4J
Si qqun est motivé pour que je lui passe le code pour qu'il test avec un autre environement ca serait cool. Je serai fixé si c'est une erreur de code ou si c'est OC4J qui déconne
Merci d'avance !
Partager