Bonjour
J'ai besoin de votre aide svp
Ca fait plusieurs jours que j'essaie de créer ma première application j2ee ejb3
Mais je n'arrive pas à deployer mon stateless (je ne le vois pas dans JNDIview)
J'ai installé mysql et Jboss 4.0.5 GA (avec le jar)
Voici le code de mon application
AddUserServler.java
UserBean.java
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 package servlet; import java.io.IOException; import java.io.*; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServlet; import javax.naming.InitialContext; import javax.naming.Context; import java.util.Properties; import java.util.*; import ejb.User; import ejb.UserBean; import ejb.UserLocal; public class AddUserServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // get parameters UserLocal userLocal;int i=0; RequestDispatcher rd = null; try{ final Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); env.put(Context.PROVIDER_URL, "localhost:1099"); Context ctx = new InitialContext(env); userLocal = (UserLocal)ctx.lookup("UserBean/local"); User user = new User(); user.setNom(request.getParameter("nom")); User newUser = userLocal.createUser(user); i=newUser.getId(); if(i > 0) { rd = request.getRequestDispatcher("userAdded.jsp"); } else { rd = request.getRequestDispatcher("userNotAdded.jsp"); } }catch(Exception e){rd = request.getRequestDispatcher("erreur.jsp");e.printStackTrace();} rd.forward(request, response); } }
UserLocal.java
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 package ejb; import javax.persistence.EntityManager; import javax.ejb.Stateless; import javax.persistence.PersistenceContext; @Stateless public class UserBean implements UserRemote, UserLocal{ @PersistenceContext (unitName = "UserDS") protected EntityManager em; public User createUser(User user){ em.persist(user); return user; } }
UserRemote.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 package ejb; import javax.ejb.Local; @Local public interface UserLocal{ User createUser(User user); }
User.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 package ejb; import javax.ejb.Remote; @Remote public interface UserRemote{ User createUser(User user); }
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 package ejb; import javax.persistence.Entity; import javax.persistence.Table; import javax.persistence.Id; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; @Entity @Table(name = "t_user") public class User{ @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; @Column(nullable = false, length = 45) private String nom; public User(){} public int getId(){ return id; } public String getNom(){ return nom; } public void setId(int id){ this.id = id; } public void setNom(String nom){ this.nom = nom; } }
User-ds.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 < xml version="1.0" encoding="UTF-8"?> <persistence version="1.0"> <persistence-unit name="UserDS"> <jta-data-source>java:/UserDS</jta-data-source> <properties> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> </properties> </persistence-unit> </persistence>
La structure de mon ear :
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 <?xml version="1.0" encoding="UTF-8"?> <!-- $Id: mysql-ds.xml 41016 2006-02-07 14:23:00Z acoliver $ --> <!-- Datasource config for MySQL using 3.0.9 available from: http://www.mysql.com/downloads/api-jdbc-stable.html --> <datasources> <local-tx-datasource> <jndi-name>UserDS</jndi-name> <connection-url>jdbc:mysql://localhost:3306/test1</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>root</user-name> <password>password</password> <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name> <!-- should only be used on drivers after 3.22.1 with "ping" support <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name> --> <!-- sql to call when connection is created <new-connection-sql>some arbitrary sql</new-connection-sql> --> <!-- sql to call on an existing pooled connection when it is obtained from pool - MySQLValidConnectionChecker is preferred for newer drivers <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql> --> <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) --> <metadata> <type-mapping>mySQL</type-mapping> </metadata> </local-tx-datasource> </datasources>
+-hellouser.ear
| +-lib
| | +-ejb.jar
| | +-ejb
| | | +-User.class
| | | +-UserBean.class
| | | +-UserLocal.class
| | | +-UserRemote.class
| | +-META-INF
| | | +-ejb-jar.xml
| +-helloear.war
| | +-WEB-INF
| | | +-classes
| | | | +-servlet
| | | | | +-AddUserServlet.class
| | | +-web.xml
| | +-*.jsp
| +-META-INF
| | +-application.xml
En fait, j'ai l'erreur a l'exécution :
javax.naming.NameNotFoundException: UserBean not Bound
Je ne vois même pas UserBean dans le JNDI View
Vous pouvez m'aider svp car je vais finir par m'arracher les cheveux
Merci de me lire
Partager