Bonjour à tous,

j'ai un petit soucis avec un module DAO...
J'ai un module EJB, prévu pour être déployé sur un EAP6, qui refuse d'injecter son entity manager, sans que je comprenne pourquoi...

Le persistence.xml me semble être complet :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
	xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
	<persistence-unit name="test">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>jdbc/arquillian</jta-data-source>
		<class>org.javacrea.gestioncontacts.pu.Contact</class>
		<properties>
			<property name="hibernate.hbm2ddl.auto" value="create-drop" />
			<property name="hibernate.show_sql" value="true" />
		</properties>
	</persistence-unit>
</persistence>
La classe de test qui vérifie la PU :

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
@RunWith(Arquillian.class)
public class TestPU {
 
	@Deployment
	public static JavaArchive createDeployment() {
		return ShrinkWrap
				.create(JavaArchive.class)
				.addPackage(Contact.class.getPackage())
				.addAsResource(EmptyAsset.INSTANCE, "beans.xml")
				.addAsResource("test-persistence.xml",
						"META-INF/persistence.xml")
				.addAsResource("test-ds.xml");
	}
 
	private static Map<String, String> datas = new HashMap<String, String>();
 
	@PersistenceContext
	EntityManager em;
 
	@Inject
	UserTransaction utx;
 
	@Before
	public void preparePersistenceTest() throws Exception {
		if(em==null){
			System.out.println("Entity Manager non injecté!");
		}
		datas.put("François", "Delalleau");
		datas.put("Yann", "Leroy");
		clearData();
		insertData();
		startTransaction();
	}
 
	public void clearData() throws Exception {
		utx.begin();
		em.joinTransaction();
		System.out.println("Dumping old records...");
		em.createQuery("delete from Game").executeUpdate();
		utx.commit();
	}
 
	public void insertData() throws Exception {
		utx.begin();
		em.joinTransaction();
		System.out.println("Inserting records...");
		for (String prenom : datas.keySet()) {
			Contact contact = new Contact("Monsieur", prenom, datas.get(prenom));
			em.persist(contact);
		}
		utx.commit();
		// clear the persistence context (first-level cache)
		em.clear();
	}
 
	public void startTransaction() throws Exception {
		utx.begin();
		em.joinTransaction();
	}
 
	@SuppressWarnings("unchecked")
	@Test
	public void retrouverLesDeux(){
		String query = "Select c from Contact c order by c.id";
		List<Contact> result = em.createQuery(query).getResultList();
		assertContainsLesDeux(result);
	}
 
 
 
	public void assertContainsLesDeux(List<Contact> result) {
		Assert.assertEquals(datas.size(), result);
		Map<String, String> resultContent = new HashMap<String, String>();
		for(Contact contact : result){
		resultContent.put(contact.getPrenom(), contact.getNom());
		}
		Assert.assertEquals(resultContent, datas);
	}
 
	@After
	public void commitTransaction() throws Exception {
	    utx.commit();
	}
 
}
Ma console m'indique bien que l'EntityManager n'est pas injecté, et j'ai un nullpointer dès que j'appel l'une de ses méthode... J'ai essayé d'injecter d'autre choses, notamment l'EJB de DAO lui-même. Il s'injecte, mais j'ai aussi un nullpointeur dès que j'appel une méthode...

Si quelqu'un a une idée...