Bonjour,
J'essaie de développer une application EJB 3.0
J'ai une entity Bean
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
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; } }
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
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; } }
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 /* * 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 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
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; } }
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
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; } }
Comment je peux faire dans mon main pour tester la creation d'un utilisateurs??
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>
J'ai tenté ca :
J'obtiens une erreur suivante.
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(); } } }
Je travailles sous Netbeans avec GlasshFish, Mysql.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)
Pourriez vous me dire comment faire ou me guider? Merci d avance.
Partager