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:
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 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
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());
    }
  }
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;
  }
L'interface Home de mon ejb entité:
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;
}
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.

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 !