bonjour, je dois réaliser un site web en J2EE dans le cadre de mes études.
J'ai choisit d'utiliser Seam-gen afin de me créer un projet eclipse qui me permet d'utiliser le framework JBosse Seam avec JSF, EJB3 et la persistence avec JPA.
J'utilise une base de donnée MySQL 5.0.
J'ai réussi à créer le projet sans difficulté. Lorsque que je lance le serveur JBoss, aucun problème, mon projet fonctionne puisque je peux voir une page de présentation sur le navigateur.
http://localhost:8080/reference/home.seam
Lorsque je décide de développer mon site je rencontre des erreurs de config (enfin je pense) dont je suis incapable de résoudre.
J'ai commence par créer le login :
avec l'entity utilisateur
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 package session; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.log.Log; import org.jboss.seam.security.Identity; @Name("authenticator") @Stateless public class Authenticator implements Iauthenticator { @SuppressWarnings("unused") @PersistenceContext(unitName="reference") protected EntityManager em; @Logger Log log; @In Identity identity; public boolean authenticate() {System.out.println("je suis dans la methode authenticator"); log.info("authenticating #0", identity.getUsername()); /* List results = em.createQuery("select u from utilisateur u where u.username=#{identity.username} and u.password=#{identity.password}") .getResultList(); if ( results.size()==0 ) { return false; } else { user = (Utilisateur) results.get(0); return true; }*/ identity.addRole("admin"); return true; } }
et voici la page JSF
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 package entity; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Column; import org.hibernate.validator.Length; import org.hibernate.validator.Pattern; import org.jboss.seam.annotations.Name; import com.sun.istack.internal.NotNull; @Entity @Name("user") @Table(name = "UTILISATEUR") public class Utilisateur implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String iduser; private String password; private String role; public Utilisateur() { super(); } public Utilisateur(String id, String pass, String role){ super(); this.setIduser(id); this.setPassword(pass); this.setRole(role); } @Id @Length(min=4, max=15) @Pattern(regex="^\\w*$", message="not a valid username") @Column(name="iduser") public String getIduser() { return this.iduser; } public void setIduser(String iduser) { this.iduser = iduser; } @NotNull @Length(min=5, max=15) @Column(name="PASSWORD") public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } @NotNull @Column(name="ROLE") public String getRole() { return this.role; } public void setRole(String role) { this.role = role; } }
Code xml : 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 <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ice="http://www.icesoft.com/icefaces/component" template="layout/template.xhtml"> <ui:define name="body"> <h:messages styleClass="message"/> <ice:form id="loginFormId"> <ice:panelGroup id="loginPanelGroupId" styleClass="formBorderHighlight"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="iceDatTblColHdr2"> <ice:outputText id="loginTextId" value="Login"/> </td> </tr> </table> <p>Please login using any username and password</p> <div class="dialog"> <h:panelGrid id="loginPanelGridId" columns="2" rowClasses="prop" columnClasses="name,value"> <h:outputLabel for="username">Username</h:outputLabel> <h:inputText id="username" value="#{identity.username}"/> <h:outputLabel for="password">Password</h:outputLabel> <h:inputSecret id="password" value="#{identity.password}"/> <h:outputLabel for="rememberMe">Remember me</h:outputLabel> <h:selectBooleanCheckbox id="rememberMe" value="#{identity.rememberMe}"/> </h:panelGrid> </div> </ice:panelGroup> <div class="actionButtons"> <h:commandButton id="loginButtonId" value="Login" action="#{identity.login}"/> </div> </ice:form> </ui:define> </ui:composition>
Voici alors les messages d'erreurs que j'obtiens lorsque je veux déployer le projet ::
je ne vois pas trop le problème. Je n'ai pas touché les fichiers de configuration (Web.xml ....) puisque tout est bien configuré en utilisant seam-gen (mais bon biensur rien n'est sur...).ObjectName: jboss.j2ee:jar=jboss-seam.jar,name=TimerServiceDispatcher,service=EJ
B3
State: FAILED
Reason: java.lang.NullPointerException
ObjectName: jboss.j2ee:ear=reference.ear,jar=jboss-seam.jar,name=TimerServiceDis
patcher,service=EJB3
State: FAILED
Reason: java.lang.NullPointerException
ObjectName: jboss.j2ee:ear=reference.ear,jar=reference.jar,name=Authenticator,se
rvice=EJB3
State: FAILED
Reason: java.lang.NullPointerException
I Depend On:
persistence.units:ear=reference.ear,jar=reference.jar,unitName=reference
--- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---
ObjectName: jboss.jca:service=DataSourceBinding,name=DefaultDS
State: NOTYETINSTALLED
Depends On Me:
jboss.ejb:service=EJBTimerService,persistencePolicy=database
jboss:service=KeyGeneratorFactory,type=HiLo
jboss.mq:service=StateManager
jboss.mq:service=PersistenceManager
ObjectName: jboss.j2ee:ear=reference.ear,jar=jboss-seam.jar,name=TimerServiceDis
patcher,service=EJB3
State: FAILED
Reason: java.lang.NullPointerException
ObjectName: jboss.j2ee:ear=reference.ear,jar=reference.jar,name=Authenticator,se
rvice=EJB3
State: FAILED
Reason: java.lang.NullPointerException
I Depend On:
persistence.units:ear=reference.ear,jar=reference.jar,unitName=reference
ObjectName: jboss.j2ee:jar=jboss-seam.jar,name=TimerServiceDispatcher,service=EJ
B3
State: FAILED
Reason: java.lang.NullPointerException
WEB.XML ::
Code xml : 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 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- Seam (using Icefaces) generated project--> <!-- listeners required for this application --> <listener> <listener-class>org.jboss.seam.servlet.SeamListener</listener-class> </listener> <listener> <listener-class>com.icesoft.faces.util.event.servlet.ContextEventRepeater</listener-class> </listener> <!-- filters --> <filter> <filter-name>Seam Filter</filter-name> <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class> </filter> <filter-mapping> <filter-name>Seam Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <context-param> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>server</param-value> </context-param> <!-- Facelets development mode (disable in production) --> <context-param> <param-name>facelets.DEVELOPMENT</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>javax.faces.DEFAULT_SUFFIX</param-name> <param-value>.xhtml</param-value> </context-param> <context-param> <param-name>com.icesoft.faces.actionURLSuffix</param-name> <param-value>.seam</param-value> </context-param> <context-param> <param-name>com.icesoft.faces.synchronousUpdate</param-name> <param-value>false</param-value> </context-param> <context-param> <param-name>com.icesoft.faces.doJSFStateManagement</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>org.icesoft.examples.serverClock</param-name> <param-value>false</param-value> </context-param> <context-param> <param-name>com.icesoft.faces.standardRequestScope</param-name> <param-value>true</param-value> </context-param> <!-- servlets --> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>Seam Resource Servlet</servlet-name> <servlet-class>org.jboss.seam.servlet.ResourceServlet</servlet-class> </servlet> <servlet> <servlet-name>Persistent Faces Servlet</servlet-name> <servlet-class>com.icesoft.faces.webapp.xmlhttp.PersistentFacesServlet</servlet-class> <load-on-startup> 1 </load-on-startup> </servlet> <servlet> <servlet-name>Blocking Servlet</servlet-name> <servlet-class>com.icesoft.faces.webapp.xmlhttp.BlockingServlet</servlet-class> <load-on-startup> 1 </load-on-startup> </servlet> <!-- servlet mappings --> <servlet-mapping> <servlet-name>Persistent Faces Servlet</servlet-name> <url-pattern>*.seam</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Persistent Faces Servlet</servlet-name> <url-pattern>/xmlhttp/*</url-pattern> </servlet-mapping> <!-- Blocking Servlet Mapping --> <servlet-mapping> <servlet-name>Blocking Servlet</servlet-name> <url-pattern>/block/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Seam Resource Servlet</servlet-name> <url-pattern>/seam/resource/*</url-pattern> </servlet-mapping> <security-constraint> <display-name>Restrict raw XHTML Documents</display-name> <web-resource-collection> <web-resource-name>XHTML</web-resource-name> <url-pattern>*.xhtml</url-pattern> </web-resource-collection> <auth-constraint> <role-name>NONE</role-name> </auth-constraint> </security-constraint> </web-app>
persistence.xml ::
Code xml : 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 <?xml version="1.0" encoding="UTF-8"?> <!-- Persistence deployment descriptor for dev profile --> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="reference"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:/referenceDatasource</jta-data-source> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="jboss.entity.manager.factory.jndi.name" value="java:/referenceEntityManagerFactory"/> </properties> </persistence-unit> </persistence>
Partager