Bonsoir,

J'ai repris un tutoriel de débutant pour faire ma premier mini appli en EJB3. J'ai ces classes là :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
package com.business;
 
import javax.ejb.Local;
import javax.ejb.Remote;
 
 
@Remote
public interface PremierEJB3 {
		   public String ditBonjour(String aQui);
		}

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.business;
 
import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;
 
@Stateless
public class PremierEJB3Bean implements PremierEJB3 {
	@EJB private PremierEJB3 premierEJBLocal;
 
	public String ditBonjour(String aQui) {
	      return "Bonjour " + aQui + " !!!";
	   }
}
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
package com.jp;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
 
import com.business.PremierEJB3;
 
public class ClientPremierEJB3 {
	public static void main(String[] args) {
	      try {
 
	         Context context = new InitialContext();
	         PremierEJB3 beanRemote =   (PremierEJB3)context.lookup("PremierEJB3Bean/Remote");
	         System.out.println(beanRemote.ditBonjour("ClientPremierEJB3"));
	      } catch (NamingException e) {
	         e.printStackTrace();
	      }
	   }
}
En Remote, ça marche bien.
Mais dès que j'annote l'interface par @Local, ça ne fonctionne pas.
J'ai essayé d'appeler mon session bean comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
PremierEJB3 beanRemote =   (PremierEJB3)context.lookup("PremierEJB3Bean/Local");
erreur :
javax.naming.NameNotFoundException: Local not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java:771)
at org.jnp.server.NamingServer.getBinding(NamingServer.java:779)
at org.jnp.server.NamingServer.getObject(NamingServer.java:785)
at org.jnp.server.NamingServer.lookup(NamingServer.java:443)
at org.jnp.server.NamingServer.lookup(NamingServer.java:399)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:726)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:686)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.jp.ClientPremierEJB3.main(ClientPremierEJB3.java:17)
puis comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
(PremierEJB3)context.lookup("PremierEJB3Bean");
erreur :
Exception in thread "main" java.lang.ClassCastException: org.jnp.interfaces.NamingContext cannot be cast to com.business.PremierEJB3
at com.jp.ClientPremierEJB3.main(ClientPremierEJB3.java:17)
Comment appeler un session bean en Local?
Merci pour vos réponses.