IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Glassfish et Payara Java Discussion :

(macosX,eclipse 3.4) classe JPA non trouvée pas un EJB


Sujet :

Glassfish et Payara Java

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut (macosX,eclipse 3.4) classe JPA non trouvée pas un EJB
    bonjour,

    mon problème est le suivant: j'ai un projet EJB qui contient 3 beans, et une classe client qui est en fait un formulaire SWT.
    j'ai aussi une projet EAR.

    les beans accèdent à des données JPA, situées dans un projet JPA.

    au départ, j'avais ajouté le projet entities (JPA) dans le java build path/projets, mais j'ai lu qqpart qu'il fallait l'ajouter en tant que JAR, ce que j'ai fait.

    -dans l'EAR, dans JavaEE Module dependencies, j'ai le projet EJB.
    - dans l'EJB, dans le java build path/libraries, j'ai le JAR du projet entities.

    voici l'erreur que j'obtiens lors du lancement du serveur (glassfish V2):

    Buildfile: /Users/oliviersaint-eve/Documents/plan_de_travail_eclipse/.metadata/.plugins/org.eclipse.jst.server.generic.core/serverdef/sunappsrv-ant.xml
    deploy.j2ee.ear:
    [jar] Building jar: /Users/oliviersaint-eve/Documents/plan_de_travail_eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/YAPS_cellophane_EAR.ear
    tools:
    deploy:
    [exec] CLI171 Échec de la commande deploy : Déploiement de l'application dans le domaine a échoué ; Erreur lors du chargement des descripteurs du déploiement pour le module [YAPS_cellophane_EAR] -- Fichier jar EJB [YAPS_cellophane_ejb.jar] non valide : Il ne contient aucun EJB.
    [exec] Remarque :
    [exec] 1. Un fichier JAR EJB valide requiert au moins une session, une entité (style 1.x/2.x) ou un bean géré par message.
    [exec] 2. Les beans entité EJB3+ (@Entity) sont des POJO. Insérez-les sous forme de JAR de bibliothèque.
    [exec] 3. Si le fichier JAR contient des EJB valides annotés avec des annotations de niveau composant EJB (@Stateless, @Stateful, @MessageDriven), consultez server.log pour savoir si le traitement des annotations s'est bien déroulé.

    BUILD FAILED
    /Users/oliviersaint-eve/Documents/plan_de_travail_eclipse/.metadata/.plugins/org.eclipse.jst.server.generic.core/serverdef/sunappsrv-ant.xml:225: The following error occurred while executing this line:
    /Users/oliviersaint-eve/Documents/plan_de_travail_eclipse/.metadata/.plugins/org.eclipse.jst.server.generic.core/serverdef/sunappsrv-ant.xml:78: exec returned: 1

    Total time: 2 seconds
    et voici ce que je trouve dans server.log:

    [#|2009-01-09T16:29:56.861+0100|SEVERE|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=15;_ThreadName=Thread-30;_RequestID=731f5b4f-7e59-4a6f-90db-cc303b7e9c55;|Class [ com/yaps/petstore/entity/catalog/Item ] not found. Error while loading [ class com.yaps.petstore.stateless.catalog.CatalogBean ]|#]

    [#|2009-01-09T16:29:56.862+0100|WARNING|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=15;_ThreadName=Thread-30;_RequestID=731f5b4f-7e59-4a6f-90db-cc303b7e9c55;|Error in annotation processing: java.lang.NoClassDefFoundError: com/yaps/petstore/entity/catalog/Item|#]

    [#|2009-01-09T16:29:56.894+0100|SEVERE|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=15;_ThreadName=Thread-30;_RequestID=731f5b4f-7e59-4a6f-90db-cc303b7e9c55;|Une exception s''est produite dans la phase J2EEC.java.lang.IllegalArgumentException: Fichier jar EJB [YAPS_cellophane_ejb.jar] non valide : Il ne contient aucun EJB.
    apparemment, il ne trouve pas la classe Item... pourtant elle a été codée, en voici le début:

    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
     
    package com.yaps.petstore.entity.catalog;
     
    import java.io.Serializable;
     
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.PrePersist;
    import javax.persistence.PreUpdate;
    import javax.persistence.Table;
     
    import com.yaps.petstore.exception.ValidationException;
     
    @Entity
    @Table(name="t_item")
    public class Item implements Serializable{
     
    	public Item() {
    		super();
    	}
     
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	private Long Id;
     
    	@Column(nullable=false, length=30)
    	private String name;
    savez-vous comment continuer?

    Question annexe: à propos des classes JPA, comment dois-je remplir une classe dont la clé est assignée automatiquement, je veux dire que dois-je mettre dans le champs Id: 0? null?

    merci,

    olivier.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Normalement ton EAR doit être constitué comme ceci bien que le projet entities soit déclaré comme bibliothèque du jar EJB :

    - EAR
    |-- JAR EJB (Module EJB)
    |-- JAR BIBLIOTHEQUE (La ou tu dois avoir ton Item)



    Ouvre le avec un logiciel de décompression (winrar...) et vérifie sa structure.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    bonjour, et merci pour ta réponse.

    je ne sais pas où trouver le fichier EAR: j'ai regardé dans le projet EAR (cf 1e photo) mais pas trace d'un fichier EAR. J'ai cherché les fichiers .ear mais je n'en ai trouvé aucun.

    la 2e photo montre le contenu du projet EAR dans le projet eclipse.

    comment génère-t' on l'EAR?

    olivier.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    une question: peut-être que il n'est autorisé qu'une classe JPA (une entity) par projet JPA?

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    j'ai trouvé le problème: il s'agissait du nom de l'unité de persistance qui n'était pas le même dans persistence.xml et dans l'EJB.

    ...mais il y a un autre problème: lorsque j'essaie de faire un lookup dans la classe client pour accéder à l'EJB, j'obtiens l'erreur suivante:

    javax.naming.NameNotFoundException
    voici le code du 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
     
    Properties props = new Properties();
            props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
            props.setProperty("java.naming.factory.initial",
                    "com.sun.enterprise.naming.SerialInitContextFactory");
            props.setProperty("java.naming.factory.url.pkgs",
                    "com.sun.enterprise.naming");
            props.setProperty("java.naming.factory.state",
                    "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
     
            props.setProperty("org.omg.CORBA.ORBInitialPort", "10037");
            InitialContext ctx;
            CatalogRemote ctg=null;
    		try {
    			ctx = new InitialContext(props);
    			Object ref = ctx.lookup("ejb/stateless/Catalog");
    			ctg = (CatalogRemote) PortableRemoteObject.narrow(ref, CatalogRemote.class);
     
    		} catch (NamingException e) {
    			// TODO Auto-generated catch block
    			System.out.println("message 0");
    			e.printStackTrace();
    		}
            System.out.println("étape 1 finie");
     
    		Category vers=new Category();
    		vers.setDescription("birds");
    		vers.setName("oiseaux");
    		ctg.createCategory(vers);
     
    		Category from=null;
    		from=ctg.findCategories().get(0);
    et voici le code de l'EJB:

    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
     
    package com.yaps.petstore.stateless.catalog;
     
    import java.util.List;
     
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;
     
    import com.yaps.petstore.entity.catalog.Category;
    import com.yaps.petstore.entity.catalog.Item;
    import com.yaps.petstore.entity.catalog.Product;
    import com.yaps.petstore.exception.ValidationException;
     
    @Stateless(name="CatalogSB",mappedName="ejb/stateless/Catalog")
    public class CatalogBean implements CatalogLocal, CatalogRemote {
     
    	@PersistenceContext(unitName="petstorePU")
    	private EntityManager em;
     
    	public Category findCategory(Long categoryId) {
    		(...)
    il devrait la trouver, la classe...

    olivier.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonsoir,

    CatalogRemote possède bien l'annotation @Remote ?

  7. #7
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    bonjour,

    oui, CatalogRemote possède cette annotation.


    olivier.

  8. #8
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    pfft, rien ne marche, j'arrive à effectuer une liaison avec un EJB simple, qui fait une addition, mais quand je veux ajouter les classes du projet "yaps", je tombe sur une javax.naming.nameNotFoundException, et je ne sais pas pourquoi cela ne marche pas.

    vous pouvez m'aider en testant ce projet (il n'est pas grand) et me dire si vous arrivez à le lancer, sous eclipse 3.4.

    il y a 2 jars: l'EAR (EJB+entities=entités JPA) et le client. ce client comporte 2 classes : une pour tester le bean d'addition(qui marche), l'autre pour tester le projet "yaps".

    merci peut-être à mad-math ().

    olivier.

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Essaye de faire de ton jar entity un module EJB... pour voir

  10. #10
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    résultat:

    CLI171 Échec de la commande deploy : Déploiement de l'application dans le domaine a échoué ; Erreur lors du chargement des descripteurs du déploiement pour le module [boinc] -- Fichier jar EJB [boinc_EJB_entities.jar] non valide : Il ne contient aucun EJB.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Personnellement je n'utilise pas les mappedname et je passe au lookup :

    ctx.lookup(CatalogRemote.class.getName())

  12. #12
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    bonjour mad-math(ieu?),

    j'ai essayé ta méthode, et j'obtiens:

    javax.naming.NameNotFoundException: test.CatalogRemote not found
    or il faut savoir que dans le répertoire ejbModule,j'ai :
    - la classe Main
    - le package "test" qui comprend les interfaces CatalogLocal, et CatalogRemote!

    et si dans la classe Main j'entre "Catalog" et que je demande l'autocomplétion, j'obtiens catalogRemote.

    bilan: il ne trouve pas CatalogRemote (à l'exécution) alors qu'il devrait.

    olivier.

  13. #13
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    et si ces 2 erreurs n'étaient pas la même : il ne trouve pas CatalogRemote et je croyais qu'il ne trouvait pas l'EJB!!

    je vais chercher.

  14. #14
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    regardez la photo: elle résume tout.

  15. #15
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Ton EAR est déployée sur le serveur ???

  16. #16
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    oui, l'état de l'EAR dans la fenêtre server est synchronized, et la ligne "morille_ear" contient l'item "morille_EJB".

  17. #17
    Membre émérite
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Points : 2 777
    Points
    2 777
    Par défaut
    Si c'est "test.CatalogRemote" que tu cherches à joindre, vérifie que "asadmin list-jndi-entries" te liste bien ce nom précis avant de lancer le client.

Discussions similaires

  1. EClassNotFound Classe TButton non trouvée
    Par James_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/07/2009, 15h07
  2. Class 'Zend_Db_Table' non trouvée
    Par yveslens dans le forum Zend_Db
    Réponses: 6
    Dernier message: 12/10/2007, 14h54
  3. [Zip] Classe ZipArchive non trouvée
    Par laetiheu dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 29/08/2007, 10h59
  4. Erreur : Classe TStoredProc non trouvée
    Par Sunchaser dans le forum C++Builder
    Réponses: 1
    Dernier message: 24/11/2006, 00h03
  5. Tomcat et classe personnel non trouvée.
    Par swirtel dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 15/02/2005, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo