Bonjour,

J'essaie de développer une application EJB 3.0

J'ai une entity Bean
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
package fr.hh.com.persistence;
 
import fr.hh.com.exception.ValidationException;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.FetchType;
import javax.persistence.OneToOne;
// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
 
// #[regen=yes,id=DCE.7244A99D-CC04-7321-54F4-AAA965922125]
 
// </editor-fold> 
 
@Entity
public class Utilisateurs extends PersonnePhysique implements java.io.Serializable{
 
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.4AA88341-4466-CACB-28D4-A1755B971FE9]
    // </editor-fold> 
    private String login;
 
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.E55BE869-A37F-7104-33EA-3486E8442E47]
    // </editor-fold> 
    private String mdp;
 
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.046C2A3F-4D0F-0343-CFED-6007DEE7D718]
    // </editor-fold> 
    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Role mRole;
 
    /********************************
     *******Constructor*************
     ********************************/
    public Utilisateurs(){
        super();
    }
    public Utilisateurs(String login, String mdp, Role role){
        super();
        setLogin(login);
        setMdp(mdp);
        setMRole(role);
    }
 
     /********************************
     *******Methode de verification***
     ********************************/
    @PrePersist
    @PreUpdate
    private void validateData() {
        if (login == null || "".equals(login))
            throw new ValidationException("Login  invalide");
        if (mdp == null || "".equals(mdp) || mdp.length()<6)
            throw new ValidationException("Mot de passe  invalide");
    }
 
    /********************************
     *******GETTER and SETTER********
     ********************************/
    public String getMdp() {
        return mdp;
    }
 
    public void setMdp(String mdp) {
        this.mdp = mdp;
    }
 
    public String getLogin() {
        return login;
    }
 
    public void setLogin(String login) {
        this.login = login;
    }
 
    public Role getMRole() {
        return mRole;
    }
 
    public void setMRole(Role mRole) {
        this.mRole = mRole;
    }
 }
Mon stateless
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
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
package fr.hh.com.session;
 
import fr.hh.com.exception.ValidationException;
import fr.hh.com.persistence.Role;
import fr.hh.com.persistence.Utilisateurs;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
 
/**
 *
 * @author Benjamin
 */
@Stateless(name = "user", mappedName = "ejb/stateless/User")
public class UtilisateursBean implements UtilisateursRemote {
 
    @PersistenceContext(unitName="HH-ejbPU")
 
    private EntityManager em;
 
    public Utilisateurs createUtilisateurs(Utilisateurs user, Role role) {
        if (user == null)
            throw new ValidationException("Utilisateur  est null");
 
        user.setMRole(role);
        em.persist(user);
 
        return user;
    }
 
    public Utilisateurs findUtilisateurs(Long idPersonne) {
        if (idPersonne == null)
            throw new ValidationException("id invalide");
 
        Utilisateurs user;
        user=em.find(Utilisateurs.class,idPersonne);
        return user;
    }
 
    public void deleteUtilisateurs(Utilisateurs user) {
        if (user == null)
            throw new ValidationException("Utilisateur  est null");
 
        // On supprime l'objet de la base de données
        em.remove(em.merge(user));
    }
 
    public Utilisateurs updateUtilisateurs(Utilisateurs user, Role role) {
       // On s'assure de la validité des paramètres
        if (user == null)
            throw new ValidationException("Utilisateur  est null"); 
      user.setMRole(role);
      // On modifie l'objet de la base de données
        em.merge(user);
        return user;
    }
 
    public List<Utilisateurs> findUtilisateurs() {
        Query query;
        List<Utilisateurs> user;
        // On modifie l'objet de la base de données
        query = em.createQuery("SELECT c FROM Utilisateurs c");
        user = query.getResultList();
        return user;
    }
}
Min interface Remote
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
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
package fr.hh.com.session;
 
import fr.hh.com.persistence.Role;
import fr.hh.com.persistence.Utilisateurs;
import java.util.List;
import javax.ejb.Remote;
 
/**
 *
 * @author Benjamin
 */
@Remote
public interface UtilisateursRemote {
    /* creation utilisateur*/
    Utilisateurs createUtilisateurs(Utilisateurs user, Role role);
    /*trouver un utilisateur*/
    Utilisateurs findUtilisateurs(Long idPersonne);
    /*delete utilisateur*/
    void deleteUtilisateurs(Utilisateurs user);
    /*update*/
    Utilisateurs updateUtilisateurs(Utilisateurs user, Role role) ;
 
    List<Utilisateurs> findUtilisateurs() ;
}
Mon service Locator
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
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.hh.com.locator;
 
import fr.hh.com.exception.ServiceLocatorException;
import java.util.HashMap;
import java.util.Map;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.naming.Context;
import javax.naming.InitialContext;
 
/**
 *
 * @author Benjamin
 */
public class ServiceLocator {
 
    private final String cname = this.getClass().getName();
    private Context initalContext;
    private Map<String, Object> cache;
    // ======================================
    // =             Singleton              =
    // ======================================
    private static final ServiceLocator instance = new ServiceLocator();
 
    public static ServiceLocator getInstance() {
        return instance;
    }
 
    private ServiceLocator() throws ServiceLocatorException {
        try {
            initalContext = new InitialContext();
            cache = new HashMap<String, Object>();
        } catch (Exception e) {
            throw new ServiceLocatorException(e);
        }
    }
 
    /* @param jndiName JNDI name of the EJB that we are looking for
     * @return the EJB Home corresponding to the homeName
     * @throws ServiceLocatorException thrown if lookup problems
     */
    public Object getRemoteInterface(String jndiName) throws ServiceLocatorException {
        String methodName = "getRemoteInterface";
 
        Object remoteInterface = getRemoteObject(jndiName);
        return remoteInterface;
    }
 
    private synchronized Object getRemoteObject(String jndiName) throws ServiceLocatorException {
        String methodName = "getObject";
 
 
        Object remoteObject = cache.get(jndiName);
        if (remoteObject == null) {
            try {
                remoteObject = initalContext.lookup(jndiName);
                cache.put(jndiName, remoteObject);
            } catch (Exception e) {
                throw new ServiceLocatorException(e);
            }
        }
        return remoteObject;
    }
 
    public ConnectionFactory getConnectionFactory(String connFactoryName) throws ServiceLocatorException {
        String methodName = "getConnectionFactory";
 
        ConnectionFactory factory = (ConnectionFactory) getRemoteObject(connFactoryName);
        return factory;
    }
 
    public Destination getDestination(String destinationName) {
        String methodName = "getDestination";
 
        Destination destination = (Destination) getRemoteObject(destinationName);
        return destination;
    }
 
}
Mon Business delegate
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
package fr.hh.com.delegate;
 
 
import fr.hh.com.locator.ServiceLocator;
import fr.hh.com.persistence.Role;
import fr.hh.com.persistence.Utilisateurs;
import fr.hh.com.session.UtilisateursRemote;
import fr.hh.com.session.UtilisateursRemote;
import fr.hh.com.session.UtilisateursRemote;
import fr.hh.com.session.UtilisateursRemote;
import java.util.List;
 
/**
 * This class follows the Delegate design pattern. It's a one to one method
 * with the CustomerBean class. Each method delegates the call to the
 * CustomerBean class
 */
public final class UtilisateursDelegate {
 
 
 
    public static Utilisateurs createUtilisateurs(Utilisateurs user, Role role) {
        return getUtilisateursRemote().createUtilisateurs(user, role);
    }
 
    public static Utilisateurs findUtilisateurs(Long idPersonne) {
        return getUtilisateursRemote().findUtilisateurs(idPersonne);
    }
 
    public static void deleteUtilisateurs(Utilisateurs user) {
        getUtilisateursRemote().deleteUtilisateurs(user);
    }
 
    public static Utilisateurs updateUtilisateurs(Utilisateurs user, Role role) {
        return getUtilisateursRemote().updateUtilisateurs(user,role);
    }
 
    public static List<Utilisateurs> findUtilisateurs() {
        return getUtilisateursRemote().findUtilisateurs();
    }
 
    // ======================================
    // =            Private methods         =
    // ======================================
    private static UtilisateursRemote getUtilisateursRemote() {
        UtilisateursRemote utilisateursRemote;
       utilisateursRemote = (UtilisateursRemote) ServiceLocator.getInstance().getRemoteInterface("ejb/stateless/User");
        return utilisateursRemote;
    }
}
Et mon fichier persistence xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="HH-ejbPU" transaction-type="RESOURCE_LOCAL">
<provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
<class>fr.hh.com.Utilisateurs</class>
<properties>
<property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/2h"/>
<property name="toplink.jdbc.user" value="root"/>
<property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="toplink.jdbc.password" value=""/>
<property name="toplink.ddl-generation" value="drop-and-create-tables"/>
</properties>
</persistence-unit>
</persistence>
Comment je peux faire dans mon main pour tester la creation d'un utilisateurs??
J'ai tenté ca :
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
 
import fr.hh.com.delegate.UtilisateursDelegate;
import fr.hh.com.persistence.Role;
 
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import fr.hh.com.persistence.Utilisateurs;
 
/**
 *
 * @author Benjamin
 */
public class Main {
  /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
 
        Utilisateurs user =new Utilisateurs("bcoudou","azerty",Role.getRole("Laboratoire"));
        try {
            user = UtilisateursDelegate.createUtilisateurs(user, user
                    .getMRole());
            System.out.println("ok");
 
        } catch (Exception exc) {
           // System.out.println(exc);
           exc.printStackTrace();
        }
    }
 
}
J'obtiens une erreur suivante.
init:
deps-jar:
compile-single:
run-main:
fr.hh.com.exception.ServiceLocatorException: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at fr.hh.com.locator.ServiceLocator.getRemoteObject(ServiceLocator.java:63)
at fr.hh.com.locator.ServiceLocator.getRemoteInterface(ServiceLocator.java:49)
at fr.hh.com.delegate.UtilisateursDelegate.getUtilisateursRemote(UtilisateursDelegate.java:47)
at fr.hh.com.delegate.UtilisateursDelegate.createUtilisateurs(UtilisateursDelegate.java:23)
at Main.main(Main.java:24)
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at fr.hh.com.locator.ServiceLocator.getRemoteObject(ServiceLocator.java:60)
... 4 more
BUILD SUCCESSFUL (total time: 0 seconds)
Je travailles sous Netbeans avec GlasshFish, Mysql.

Pourriez vous me dire comment faire ou me guider? Merci d avance.