Bonjour, alors voila je viens évoquer un sujet récurrent je pense mais malgré des recherches je n'ai pas trouvé de réponses résolvant mon problème. Ce problème le voici, je développe une application de gestion de contact dans le cadre d'un projet pour ma formation, donc pour commencer je veux développer un EJB utilisant la BD intégrer à JBoss pour faire ma couche de persistance.

Donc voici mon interface :
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
package project.services;
 
import java.util.List;
 
import bean.Person;
 
public interface IPersonDAO {
 
	public Person add(Person p);
 
	public void delete(Person p);
 
	public Person update(Person p);
 
	public Person get(String id);
 
	public List<Person> list();
 
}
et son implémentation :
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
package project.impl;
 
import java.util.List;
 
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
 
import project.services.IPersonDAO;
import bean.Person;
 
@Remote(value = IPersonDAO.class)
@Stateless(name = "personDao", description = "DAO of bean person")
public class PersonDAO implements IPersonDAO {
 
	@PersistenceContext(unitName = "persistenceUnit")
	EntityManager em;
 
	@Override
	public void delete(Person p) {
		em.getTransaction().begin();
		em.remove(p);
		em.getTransaction().commit();
	}
 
	@Override
	public Person get(String id) {
		// TODO Auto-generated method stub
		return null;
	}
 
	@Override
	public List<Person> list() {
		em.getTransaction().begin();
		Query q = em.createQuery("FROM Person");
		em.getTransaction().commit();
		return q.getResultList();
	}
 
	@Override
	public Person add(Person p) {
		em.getTransaction().begin();
		em.persist(p);
		em.getTransaction().commit();
		return p;
	}
 
	@Override
	public Person update(Person p) {
                //TODO
		return null;
	}
}
J'essaye donc d'appeler cet eJB pour le tester via du code Java de base que voici :
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 main.test;
 
import javax.naming.NamingException;
 
public class Main {
 
	/**
         * @param args
         */
	public static void main(String[] args) {
		TestDAO t;
		try {
			t = new TestDAO();
			t.testPerson();
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 
	}
 
}
et donc la classe TestDAO.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
package main.test;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
 
import project.services.IPersonDAO;
import bean.Person;
 
public class TestDAO {
 
	final Context initial;
 
	public TestDAO() throws NamingException {
		initial = new InitialContext();
	}
 
	public void testPerson() {
		Object o;
		try {
			o = initial.lookup("personDao/remote");
			 IPersonDAO pDAO = (IPersonDAO) o;
			 Person p = new Person("Dupont", "Michel", "DUPONT SA", "0202020202",
			 "toto@dupont.fr");
			 pDAO.add(p);
 
			 System.out.println(pDAO.list());
 
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
 
}
Le problème que j'ai est le suivant, je n'arrive pas à récupérer mon objet du côté de mon client et j'ai l'erreur suivante :

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
javax.naming.NameNotFoundException: personDao 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:396)
	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:728)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:688)
	at javax.naming.InitialContext.lookup(Unknown Source)
	at main.test.TestDAO.testPerson(TestDAO.java:21)
	at main.test.Main.main(Main.java:14)
Je ne comprends pas pourquoi cela ne marche pas. Si quelqu'un à une idée je suis disponible pour toute question pour clarifier les choses.

Merci de votre aide.

lorizio49