Bonjour,
Je suis débutant en EJB, j'ai voulu tester l'exemple de Patrice Secheresse sur la création d'un EJB Module avec Netbeans 6 et Glassfish V2.
Je suis aller jusqu'au bout du tutoriel (test Junit) je n'ai pas eu de pb. J'ai donc voulu essayer d'appeler cette EJB Module à partir d'un projet "Web Application" utilisant Struts. Mais là ça ce complique un peu.
J'appelle dans une action Struts ma Bean Session Remote ( NewSession2Bean) qui est une façade et qui appelle une Bean Session Locale ( NewSessionLocal ) et lors du déploiement, Netbeans me sort cette erreur :
J'appelle ma Remote de cette façon dans mon action Struts:
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 Deploying application in domain failed; Error loading deployment descriptors for module [T_Web_managementPrototype] -- Cannot resolve reference Unresolved Ejb-Ref demo.ejb3.calculatrice.CalculatriceFacadeBean/calculatriceBean@jndi: @null@demo.ejb3.calculatrice.CalculatriceLocal@Session@null Deployment error: The module has not been deployed. See the server log for details. at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:163) at org.netbeans.modules.j2ee.ant.Deploy.execute(Deploy.java:104) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) at sun.reflect.GeneratedMethodAccessor406.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.Target.execute(Target.java:357) at org.apache.tools.ant.Target.performTasks(Target.java:385) at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329) at org.apache.tools.ant.Project.executeTarget(Project.java:1298) at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) at org.apache.tools.ant.Project.executeTargets(Project.java:1181) at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:277) at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:460) at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:151) Caused by: The module has not been deployed. at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:157) ... 16 more BUILD FAILED (total time: 2 seconds)
Pourtant je vois mon EJB avec les beans sous Glassfish. Quelqu'un aurait une solution ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 private CalculatriceFacadeRemote lookupCalculatriceFacadeBean() { try { Context c = new InitialContext(); return (CalculatriceFacadeRemote) c.lookup("java:comp/env/CalculatriceFacadeBean"); } catch (NamingException ne) { java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, "exception caught", ne); throw new RuntimeException(ne); } }
Ci joint le source de mes deux Session beans:
La session bean Remote
La session bean Locale
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 package demo.ejb3.calculatrice; import javax.ejb.EJB; import javax.ejb.Stateful; /** * * @author */ @Stateful public class CalculatriceFacadeBean implements CalculatriceFacadeRemote { @EJB private CalculatriceLocal calculatriceBean; int sousTotal; public int additionner(int x) { sousTotal = calculatriceBean.additionner(x, sousTotal); return sousTotal; } }
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 package demo.ejb3.calculatrice; import javax.ejb.Stateless; /** * * @author */ @Stateless public class CalculatriceBean implements CalculatriceLocal { public int additionner(int x, int y) { return x + y; } }
Le code de mon test JUnit dans mon EJB Modulen qui MARCHE
Merci d'avance pour votre aide.
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 /** * Test of additionner method, of class CalculatriceFacadeBean. */ @Test public void additionner() { System.out.println("additionner"); int x = 0; int expResult = 0; InitialContext ctx; try { ctx = new InitialContext(); Object ref = ctx.lookup(CalculatriceFacadeRemote.class.getName()); CalculatriceFacadeRemote calc = (CalculatriceFacadeRemote) PortableRemoteObject.narrow(ref, CalculatriceFacadeRemote.class); // Première addition + 0 = 0 int result = calc.additionner(x); assertEquals(expResult, result); // Deuxième + 2 = 2, le bean a en mémoire le précédent résultat qui est 0 x = 2; expResult = 2; result = calc.additionner(x); // Troisième + 2 = 4, le bean a en mémoire le précédent résultat qui est 2 expResult = 4; result = calc.additionner(x); assertEquals(expResult, result); } catch (NamingException ex) { fail(ex.getMessage()); } }
Partager