Bonjour,
Je développe une petite appli de gestion de stock et je suis bloqué sur un problème de communication client / server.
- J'utilise Eclipse java EE + glassfishV3 + hibernate + une bdd postgresql.
- J'ai généré mes EJB avec netbeans.
- J'utilise le modèle MVP.
- J'ai 3 projets, l'EAR, les EJB, et le WEB project.
Je ne sais pas trop quoi préciser de plus.
J'ai pas mal cherché sur le net, mais je trouve vraiment pas grand chose concernant ce problème, et sur gwt en général, malgré la relative fréquence du problème.
Si vous avez une idée, merci d'avance.
L'exception depuis les logs du server glassfish
mon web.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 GRAVE: WebModule[/Gestion Stock]Exception while dispatching incoming RPC call java.lang.NullPointerException at com.sun.enterprise.web.logger.LoggerBase.write(LoggerBase.java:215) at com.sun.enterprise.web.logger.LoggerBase.log(LoggerBase.java:172) at com.sun.enterprise.web.logger.IASLogger.log(IASLogger.java:52) at org.apache.catalina.core.ApplicationContext.log(ApplicationContext.java:874) at org.apache.catalina.core.ApplicationContextFacade.log(ApplicationContextFacade.java:331) at javax.servlet.GenericServlet.log(GenericServlet.java:291) at com.google.gwt.user.server.rpc.RemoteServiceServlet.loadSerializationPolicy(RemoteServiceServlet.java:74) at com.google.gwt.user.server.rpc.RemoteServiceServlet.doGetSerializationPolicy(RemoteServiceServlet.java:251) at com.google.gwt.user.server.rpc.RemoteServiceServlet.getSerializationPolicy(RemoteServiceServlet.java:139) at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.prepareToRead(ServerSerializationStreamReader.java:445) at com.google.gwt.user.server.rpc.RPC.decodeRequest(RPC.java:236) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:186) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) at com.sun.grizzly.ContextTask.run(ContextTask.java:69) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) at java.lang.Thread.run(Thread.java:619)
Mon service
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 <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Gestion Stock</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- Servlets --> <!-- Login --> <servlet> <servlet-name>loginServiceServlet</servlet-name> <servlet-class>fr.pp.stock.server.rpc.LoginServiceImpl</servlet-class> </servlet> <servlet-mapping> <servlet-name>loginServiceServlet</servlet-name> <url-pattern>/fr.pp.stock.Stock/loginService</url-pattern> </servlet-mapping> </web-app>
mon 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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 package fr.pp.stock.server.rpc; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import fr.pp.stock.client.service.LoginService; import fr.pp.stock.ejb.local.OperateurFacadeLocal; import fr.pp.stock.model.Operateur; import fr.pp.stock.server.AuthentifiedSessions; import fr.pp.stock.server.BCrypt; import fr.pp.stock.server.EJBManager; import fr.pp.stock.shared.OperateurGWT; public class LoginServiceImpl extends RemoteServiceServlet implements LoginService { private static final long serialVersionUID = 1321515280468337072L; public OperateurGWT validateUser(String login, String password) { OperateurGWT authentifiedUser = null; OperateurFacadeLocal operateurs = EJBManager.getInstance().getOperateursBean(); Operateur u = operateurs.findByLogin(login); /* Vérification du login et mot de passe */ if ((u != null) && (BCrypt.checkpw(password, u.getPassword()))) { authentifiedUser = new OperateurGWT(); authentifiedUser.setLogin(u.getLogin()); authentifiedUser.setNom(u.getNom()); authentifiedUser.setPrenom(u.getPrenom()); /* Ajout d'une session authentifiée */ AuthentifiedSessions.getInstance().addSession(getSession(), u); } return authentifiedUser; } }
Et enfin l'EjbManager
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 package fr.pp.stock.model; import java.io.Serializable; import java.util.Set; import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.Table; /** * * @author ... */ @Entity @Table(name = "operateur", catalog = "gestionstock", schema = "public") @NamedQueries({ @NamedQuery(name = "Operateur.findAll", query = "SELECT o FROM Operateur o"), @NamedQuery(name = "Operateur.findByIdoperateur", query = "SELECT o FROM Operateur o WHERE o.idoperateur = :idoperateur"), @NamedQuery(name = "Operateur.findByNom", query = "SELECT o FROM Operateur o WHERE o.nom = :nom"), @NamedQuery(name = "Operateur.findByPrenom", query = "SELECT o FROM Operateur o WHERE o.prenom = :prenom"), @NamedQuery(name = "Operateur.findByLogin", query = "SELECT o FROM Operateur o WHERE o.login = :login"), @NamedQuery(name = "Operateur.findByPassword", query = "SELECT o FROM Operateur o WHERE o.password = :password"), @NamedQuery(name = "Operateur.findByTelephone", query = "SELECT o FROM Operateur o WHERE o.telephone = :telephone"), @NamedQuery(name = "Operateur.findByEmail", query = "SELECT o FROM Operateur o WHERE o.email = :email")}) public class Operateur implements Serializable { private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @Column(name = "idoperateur", nullable = false) private Integer idoperateur; @Column(name = "nom", length = 2147483647) private String nom; @Column(name = "prenom", length = 2147483647) private String prenom; @Column(name = "login", length = 2147483647) private String login; @Column(name = "password", length = 2147483647) private String password; @Column(name = "telephone", length = 2147483647) private String telephone; @Column(name = "email", length = 2147483647) private String email; @OneToMany(mappedBy = "idoperateur", fetch = FetchType.EAGER) private Set<Mouvement> mouvementSet; public Operateur() { } public Operateur(Integer idoperateur) { this.idoperateur = idoperateur; } public Integer getIdoperateur() { return idoperateur; } public void setIdoperateur(Integer idoperateur) { this.idoperateur = idoperateur; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String getPrenom() { return prenom; } public void setPrenom(String prenom) { this.prenom = prenom; } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Set<Mouvement> getMouvementSet() { return mouvementSet; } public void setMouvementSet(Set<Mouvement> mouvementSet) { this.mouvementSet = mouvementSet; } @Override public int hashCode() { int hash = 0; hash += (idoperateur != null ? idoperateur.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Operateur)) { return false; } Operateur other = (Operateur) object; if ((this.idoperateur == null && other.idoperateur != null) || (this.idoperateur != null && !this.idoperateur.equals(other.idoperateur))) { return false; } return true; } @Override public String toString() { return "fr.pp.stock.model.Operateur[idoperateur=" + idoperateur + "]"; } }
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 package fr.pp.stock.server; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import fr.pp.stock.ejb.local.OperateurFacadeLocal; public class EJBManager { private final static EJBManager INSTANCE = new EJBManager(); private OperateurFacadeLocal operateurs; public static EJBManager getInstance() { return INSTANCE; } private EJBManager() { lookupBeans(); } private void lookupBeans() { try { Context context = new InitialContext(); operateurs = (OperateurFacadeLocal) context.lookup(OperateurFacadeLocal.JNDI_NAME); context.close(); } catch (NamingException e) { e.printStackTrace(); } } public OperateurFacadeLocal getOperateursBean() { return operateurs; } }
Partager