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

Java EE Discussion :

NullPointerException lors d'appel persist


Sujet :

Java EE

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Points : 53
    Points
    53
    Par défaut NullPointerException lors d'appel persist
    Bonsoir à tous,

    désolé je vous innonde de mes questions...mais je n'ai rien trouvé à ce sujet non plus...

    j'ai donc un EJB Entity déployé sous JBoss 4.0.5 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    21:00:52,140 INFO  [SchemaUpdate] fetching database metadata
    21:00:52,140 INFO  [SchemaUpdate] updating schema
    21:00:52,187 INFO  [TableMetadata] table found: PRJ.keepalivemodule
    21:00:52,187 INFO  [TableMetadata] columns: [modulename, period, retry, kareceived, end, katotal, id]
    21:00:52,187 INFO  [TableMetadata] foreign keys: []
    21:00:52,187 INFO  [TableMetadata] indexes: [primary]
    21:00:52,187 INFO  [SchemaUpdate] schema update complete
    21:00:52,187 INFO  [NamingHelper] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory,java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
    21:00:52,187 INFO  [JmxKernelAbstraction] installing MBean: jboss.j2ee:ear=PRJServer.ear,jar=PRJJ2EEEJB.jar,name=LoginModuleBean,service=EJB3
    with dependencies:
    21:00:52,187 INFO  [JmxKernelAbstraction]       persistence.units:ear=PRJServer.ear,jar=PRJJ2EEEJB.jar,unitName=KeepAliveModule
    le fichier persistence.xml associé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <persistence version="1.0">
       <persistence-unit name="KeepAliveModule">
           <jta-data-source>java:/MySqlDS</jta-data-source>
           <provider>org.hibernate.ejb.HibernatePersistence</provider>
           <class>com.prj.entities.KeepAliveModule</class>
           <properties>
                <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
                <property name="hibernate.hbm2ddl.auto" value="update"/>
           </properties>
       </persistence-unit>
    </persistence>
    voici la classe:
    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
     
    @Entity
    @Table(name="KeepAliveModule")
    public class KeepAliveModule implements Serializable  {
     
    	@Id
    	@GeneratedValue(strategy = GenerationType.AUTO)
    	private int id;
    	public int getId(){return this.id;}
     
    	private String moduleName;
    	private int period;
    	private int end;
    	private int KAReceived;
    	private int KATotal;
    	private int retry;
            ....
    Et voici la méthode de mon EJB Session:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	public void add(KeepAliveModule module){
    		try{
    		module.display();
    		em.persist(module);
    		}catch(Exception e){log.error("Error while adding KA: "+e.toString());}
    	}
    lors de l'exécution, j'ai une exception lors de l'appel à persist():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.NullPointerException
    Pouvez vous m'aider ?
    Je vous remercie.

    Tiamat.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Peux-tu poster les classes (complètes) KeepAliveModule et KeepAliveModuleFacade ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Points : 53
    Points
    53
    Par défaut
    bien sur, les voicis:

    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
    54
     
    @Entity
    @Table(name="KeepAliveModule")
    public class KeepAliveModule implements Serializable  {
     
    	private static final long serialVersionUID = 1L;
    	private static final Logger log = Logger.getLogger("EJB");
    	@Id
    	@GeneratedValue(strategy = GenerationType.AUTO)
    	private int id;
    	public int getId(){return this.id;}
     
    	private String moduleName;
    	private int period;
    	private int end;
    	private int KAReceived;
    	private int KATotal;
    	private int retry;
     
     
     
    	public KeepAliveModule(){
    		super();
    	}
     
    	public KeepAliveModule(String ModuleName, int period){
     
    		this.moduleName = ModuleName;
    		this.period = period;
    		this.end = 0;
    		this.KAReceived = 0;
    		this.KATotal = 0;
    		this.retry = 3;
    	}
     
     
    	public String getModuleName(){return this.moduleName;}
    	public int getPeriod(){return this.period;}
    	public int getEnd(){return this.end;}
    	public int getKAReceived(){return this.KAReceived;}
    	public int getKATotal(){return this.KATotal;}
    	public int getRetry(){return this.retry;}
     
    	public void setId(int id){this.id = id;}
    	public void setModuleName(String moduleName){this.moduleName = moduleName;}
    	public void setPeriod(int period){this.period = period;}
    	public void setEnd(int end){this.end = end;}
    	public void setKAReceived(int KAReceived){this.KAReceived = KAReceived;}
    	public void setKATotal(int KATotal){this.KATotal = KATotal;}
    	public void setRetry(int retry){this.retry = retry;}
     
    	public void display(){
    		log.info("KA for :"+moduleName+" Period:"+period+" End:"+end+" KAReceived:"+KAReceived+" KATotal:"+KATotal+" Retry:"+retry);
    	}
    par contre je n'ai pas de Facade.
    est ce que cela est obligatoire ?

    Merci de ton aide.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Ce n'est pas une classe correcte, les annotations se placent au niveau des getter... (ci-joint un exemple)
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
     
    package hibernate.objects;
     
    // Generated 16 oct. 2007 11:07:56 by Hibernate Tools 3.1.0.beta5
    import java.util.Date;
    import java.util.HashSet;
    import java.util.Set;
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
     
    /**
     * Personne generated by hbm2java
     */
    @Entity
    @Table(name = "personne", catalog = "test", uniqueConstraints = {})
    public class Personne implements java.io.Serializable
    {
        // Fields    
        private int idPersonne;
        private Personne personne;
        private String nom;
        private String prenom;
        private String sexe;
        private Date crtDate;
        private byte age;
        private Set<Personne> personnes = new HashSet<Personne>(0);
     
        // Constructors
        /** default constructor */
        public Personne()
        {
        }
     
        /** minimal constructor */
        public Personne(int idPersonne, byte age)
        {
            this.idPersonne = idPersonne;
            this.age = age;
        }
     
        /** full constructor */
        public Personne(int idPersonne, Personne personne, String nom, String prenom, String sexe, Date crtDate, byte age,
                Set<Personne> personnes)
        {
            this.idPersonne = idPersonne;
            this.personne = personne;
            this.nom = nom;
            this.prenom = prenom;
            this.sexe = sexe;
            this.crtDate = crtDate;
            this.age = age;
            this.personnes = personnes;
        }
     
        // Property accessors
        @Id
        @Column(name = "idPersonne", unique = true, nullable = false, insertable = true, updatable = true)
        public int getIdPersonne()
        {
            return this.idPersonne;
        }
     
        public void setIdPersonne(int idPersonne)
        {
            this.idPersonne = idPersonne;
        }
     
        @ManyToOne(cascade = {}, fetch = FetchType.LAZY)
        @JoinColumn(name = "idParent", unique = false, nullable = true, insertable = true, updatable = true)
        public Personne getPersonne()
        {
            return this.personne;
        }
     
        public void setPersonne(Personne personne)
        {
            this.personne = personne;
        }
     
        @Column(name = "Nom", unique = false, nullable = true, insertable = true, updatable = true, length = 45)
        public String getNom()
        {
            return this.nom;
        }
     
        public void setNom(String nom)
        {
            this.nom = nom;
        }
     
        @Column(name = "Prenom", unique = false, nullable = true, insertable = true, updatable = true, length = 45)
        public String getPrenom()
        {
            return this.prenom;
        }
     
        public void setPrenom(String prenom)
        {
            this.prenom = prenom;
        }
     
        @Column(name = "Sexe", unique = false, nullable = true, insertable = true, updatable = true, length = 1)
        public String getSexe()
        {
            return this.sexe;
        }
     
        public void setSexe(String sexe)
        {
            this.sexe = sexe;
        }
     
        @Column(name = "crtDate", unique = false, nullable = true, insertable = true, updatable = true, length = 19)
        public Date getCrtDate()
        {
            return this.crtDate;
        }
     
        public void setCrtDate(Date crtDate)
        {
            this.crtDate = crtDate;
        }
     
        @Column(name = "age", unique = false, nullable = false, insertable = true, updatable = true, precision = 2, scale = 0)
        public byte getAge()
        {
            return this.age;
        }
     
        public void setAge(byte age)
        {
            this.age = age;
        }
     
        @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "personne")
        public Set<Personne> getPersonnes()
        {
            return this.personnes;
        }
     
        public void setPersonnes(Set<Personne> personnes)
        {
            this.personnes = personnes;
        }
    }
    Tu n'utilises pas un outil pour générer ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Est-ce que ton "em" est à null ?
    Est-ce qu'il est bien injecté par annotation ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Points : 53
    Points
    53
    Par défaut
    non je n'utilise pas d'outil pour générer...
    WTP le fait ?

    et pour répondre à fr1man, mon em est bien annoté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	@PersistenceContext(name="KeepAliveModule")
    	EntityManager em;
    je reprend mes annotations sur les getters et je reviens vers vous.
    Merci.

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tiamat Voir le message
    par contre je n'ai pas de Facade.
    est ce que cela est obligatoire ?
    J'avais oublié celle là...

    Oui, il faudrait une facade (elle peut avoir un autre nom) pour les méthodes d'extraction / persistence et le référencement de l'entity manager.
    Mais bon, ça n'est pas obligatoire... tu pourrais le faire par une classe applicative aussi (c'est pas très propre, au mon sens)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Points : 53
    Points
    53
    Par défaut
    oui j'ai bien un EJB Session qui gère les méthodes d'extraction/persistence cf post précédent (méthode add).

    voici la déclaration 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
     
     
    public class KeepAliveBean extends Thread implements IKeepAlive {
     
    	@PersistenceContext(name="KeepAliveModule")
    	EntityManager em;
    	KeepAliveModule KA = null;
     
     
    	public void run(){
     
    		start();
    	}
     
    	public void add(KeepAliveModule module){
    		try{
    		module.display();
    		em.persist(module);
    		}catch(Exception e){log.error("Error while adding KA: "+e.toString());}
    	}
    par contre fr1man, j'ai bien changé mes annotations de la déclaration de mon EJB entity mais j'ai toujours nullpointerException:

    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
     
    	@Id
    	@GeneratedValue(strategy = GenerationType.AUTO)
    	@Column(name = "id", unique = true, nullable = false, insertable = true, updatable = true)
    	public int getId(){return this.id;}
     
    	@Column(name = "moduleName", unique = false, nullable = true, insertable = true, updatable = true, length = 45)
    	public String getModuleName(){return this.moduleName;}
     
    	@Column(name = "period", unique = false, nullable = true, insertable = true, updatable = true)
    	public int getPeriod(){return this.period;}
     
    	@Column(name = "end", unique = false, nullable = true, insertable = true, updatable = true)
    	public int getEnd(){return this.end;}
     
    	@Column(name = "KAReceived", unique = false, nullable = true, insertable = true, updatable = true)
    	public int getKAReceived(){return this.KAReceived;}
     
    	@Column(name = "KATotal", unique = false, nullable = true, insertable = true, updatable = true)
    	public int getKATotal(){return this.KATotal;}
     
    	@Column(name = "Retry", unique = false, nullable = true, insertable = true, updatable = true)
    	public int getRetry(){return this.retry;}

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Points : 53
    Points
    53
    Par défaut
    Vous utilisez quel outil pour générer les annotations ?

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Moi, je n'utilise pas d'outil de génération.

    Ce ne serait pas pas plutôt comme ça qu'on déclare le persitenceContext:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @PersistenceContext(unitName="KeepAliveModule")

  11. #11
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Ce n'est pas une classe correcte, les annotations se placent au niveau des getter...
    Tu peux aussi les placer au niveau des attributs.
    Je crois qu'il y a une différence entre les deux mais je ne me souviens plus.

  12. #12
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Ce ne serait pas pas plutôt comme ça qu'on déclare le persitenceContext:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @PersistenceContext(unitName="KeepAliveModule")
    Il me semble également, manque de bol, je n'ai pas mon pc sous la main et là, je n'ai pas le temps d'installer tout les éléments...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    T'embete pas, j'ai un exemple sous la main qui fonctionne comme ça, donc ça coute rien d'essayer.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Points : 53
    Points
    53
    Par défaut
    J'ai essayé avec unitName, le résultat est le même...
    NullPointer Exception.

    Le pire c'est que je n'ai aucune erreur ailleurs, donc super difficile pour débugger...

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Points : 53
    Points
    53
    Par défaut
    Bon j'ai vraiment un probleme dans ma conf....

    j'ai réécrit un EJB Entity et une facade, pour épurer tout probleme ailleurs:

    Entity
    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
    @Entity
    @Table(name="TestEntity")
    public class TestEntity {
     
    	int id;
    	String Value;
     
    	@Id
    	@GeneratedValue(strategy = GenerationType.AUTO)
    	@Column(name = "id", unique = true, nullable = false, insertable = true, updatable = true)
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
     
    	@Column(name = "value", unique = false, nullable = true, insertable = true, updatable = true, length = 45)
    	public String getValue() {
    		return Value;
    	}
    	public void setValue(String value) {
    		Value = value;
    	}
     
    	public TestEntity(String value){
    		this.Value = value;
    		this.id=0;
    	}
     
    	public void display(){
    		System.out.println("Test Entity ID: "+id+", Value: "+Value);
    	}
    }
    La Facade
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class TestEntityFacade {
     
    	@PersistenceUnit(unitName="TestEntity")
    	EntityManager em;
     
    	public void add(TestEntity entity){
    	try{
    		entity.display();
    		em.persist(entity);
    	}catch(Exception e){System.out.println(e.toString());}
    	}
    Le persistence.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
       </persistence-unit>
          <persistence-unit name="TestEntity">
           <jta-data-source>java:/MySqlDS</jta-data-source>
           <provider>org.hibernate.ejb.HibernatePersistence</provider>
           <class>com.mib.entities.TestEntity</class>
           <properties>
                <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
                <property name="hibernate.hbm2ddl.auto" value="update"/>
           </properties>
       </persistence-unit>
    Et l'appel depuis mon EJB (c'est pas beau, c'est pour tester ;-) )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    TestEntity test = new TestEntity("TOTO");
    		TestEntityFacade facade = new TestEntityFacade();
        		facade.add(test);
    En redémarrant JBoss, ma table TestEntity est bien créée, pas d'erreur dans les logs de JBoss, mais en démarrant mon EJB, j'ai un
    NullPointerException
    qui apparait...
    Je comprend pas ou est mon erreur...
    Vous voyez un truc qui cloche ?

    Merci de votre aide.

  16. #16
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    J'ai peut-être raté un truc, mais tu ne peux pas faire d'injection dans n'importe quelle classe, en l'occurence dans ta classe Facade.

  17. #17
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Pour récupérer un EJB, on ne fait pas new NomClasse(...),
    il faut passer par un initialContext et lookup (ou alors utiliser l'annotation @EJB)... et de préférence récupérer l'interface

    Si tu fais un System.out.println( facade ), je pense que le nullPointer vient de là, peux-tu tester ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Points : 53
    Points
    53
    Par défaut
    enfin...
    ça tourne !
    J'appelle bien depuis mon EJB principal un autre EJB (interface Local) et cet EJB manipule bien l'EJB Entity.

    J'avoue j'ai pas trop compris pourquoi ça ne fonctionnait pas, mais ça m'a permi de reprendre un peu l'archi et d'approfondir les EJB CMP !

    Merci à vous deux.
    Tiamat.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Points : 53
    Points
    53
    Par défaut
    Ouaip ça tourne mais j'ai une contrainte forte...

    En fait mon EJB qui accède aux données est également un Thread...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Stateless
    public class KeepAliveBean extends Thread implements IKeepAlive
    et le probleme c'est que dès que j'appelle la commande start() de l'EJB pour initier le Thread et rendre la main au process, j'obtiens une erreur:

    javax.persistence.TransactionRequiredException: EntityManager must be access within a transaction
    Et là je bloque...
    Au niveau Archi, un EJB peut être lancé comme un Thread ?

  20. #20
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    A vrai dire, j'en sais rien... mais j'aurais fait un EJB simple que j'aurais appelé dans l'objet Thread personnellement...

    Je te laisse chercher si c'est envisageable (un EJB Thread)

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. NullPointerException lors d'un appel à un DAO.
    Par Seb1492 dans le forum Hibernate
    Réponses: 0
    Dernier message: 02/08/2010, 18h54
  2. Réponses: 0
    Dernier message: 28/05/2009, 18h15
  3. Réponses: 6
    Dernier message: 16/04/2009, 16h30
  4. NullPointerException lors du persist
    Par Baptiste Wicht dans le forum JPA
    Réponses: 4
    Dernier message: 13/05/2008, 14h57
  5. Réponses: 0
    Dernier message: 26/12/2007, 17h28

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