Bonjour tout le monde,
Je suis en traine de développer une petite application en utilisant EJB 3.1, JPA 2.0.
Le serveur est Weblogic 12.1.2, et je dispose d'une petite base de données Oracle.
Voici l'EJB à tester :
et voici le fichier persistence.xml utilisé pour le teste:
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 @Stateless public class DashboardEJB { private final Logger logger = Logger.getLogger(getClass()); @PersistenceContext(unitName="MyPersistenceUnit") private EntityManager entityManager; public List<Indicator> findIndicators() { TypedQuery<Indicator> allIndicators = entityManager.createNamedQuery("findAllIndicators", Indicator.class); return allIndicators.getResultList(); } public User updateUser(User user) { entityManager.merge(user); return user; } public User save(User user) { entityManager.persist(user); return user; } public User findUserById(String userId) { Query query = entityManager.createNamedQuery(User.FIND_USER_BY_ID); query.setParameter("userId", userId); User user = null; try{ user = (User) query.getSingleResult(); }catch(NoResultException nre){ getLogger().info("no result found"); return null; } return user; } public List<Abonnement> findAbonnementByUserId(String userId) { Query query = entityManager.createNamedQuery(Abonnement.FIND_BY_USER_ID); query.setParameter("userId", userId); List<Abonnement> abonnements = new ArrayList<Abonnement>(); try { abonnements = query.getResultList(); } catch (NoResultException nre) { getLogger().info("no result found"); return null; }catch(Exception exc){ getLogger().info("erreur !"); exc.printStackTrace(); return null; } return abonnements; } public Indicator findByLabel(String label) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Indicator> criteriaQuery = cb.createQuery(Indicator.class); Root<Indicator> ind = criteriaQuery.from(Indicator.class); criteriaQuery.where(cb.like(ind.<String> get("label"), cb.parameter(String.class, "label"))); TypedQuery<Indicator> tq = entityManager.createQuery(criteriaQuery); tq.setParameter("label", label); Indicator indicator = null; try{ indicator = tq.getSingleResult(); }catch(NoResultException nre){ getLogger().info("no result found"); } return indicator; } public DefaultDashboardModel findModel(int userPrefId) { TypedQuery<UserPreferences> query = entityManager.createNamedQuery("findUserPreferencesById", UserPreferences.class); query.setParameter("recipeId", userPrefId); UserPreferences userPref = null; DefaultDashboardModel model; try { userPref = (UserPreferences) query.getSingleResult(); model = userPref.getSerializableModel(); if (model == null) { model = new DefaultDashboardModel(); } } catch (NoResultException nre) { getLogger().info("no result found"); return new DefaultDashboardModel(); } return model; } public void updateAbonnement(Abonnement abonnement) { entityManager.merge(abonnement); } public void deleteAbonnement(Abonnement abonnement){ entityManager.remove(abonnement); } public Logger getLogger() { return logger; } }
Je dispose également d'un fichier beans.xml vide.
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 <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="MyPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <properties> <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/> <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@myhost:1521:MyPersistenceUnit"/> <property name="javax.persistence.jdbc.user" value="toto"/> <property name="javax.persistence.jdbc.password" value="tata"/> <property name="eclipselink.logging.level" value="FINEST"/> </properties> </persistence-unit> </persistence>
Voici la classe de test:
pour le embedded EJB container j'ai ajouté le jar weblogic.jar au classpath de l'application.
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 public class AbonnementDAOImplTest { @Inject private static DashboardEJB dashboardEJB; private static EJBContainer ejbC; private static Context ctx; public AbonnementDAOImplTest() { } @BeforeClass public static void initEntityManager() throws Exception { // initialisation environnement JNDI ejbC = javax.ejb.embeddable.EJBContainer.createEJBContainer(); ctx = ejbC.getContext(); // Properties properties = new Properties(); // properties.setProperty(EJBContainer.MODULES, "classes"); // // instanciation de l'EJB // dashboardEJB = (DashboardEJB) ctx.lookup("java:global/aggregatordashboard/DashboardEJB"); } @Before public void setUp()throws Exception { // instanciation de l'EJB //ctx.lookup("java:global/classes/GreeterBean"); dashboardEJB = (DashboardEJB) ctx.lookup("java:global/aggregatordashboard/DashboardEJB"); } @Test public void testFindAbonnementByUserId() { List<Abonnement> abonnemnts = dashboardEJB .findAbonnementByUserId("userID"); assertNotNull(abonnemnts.get(0).getUser().getUserId()); assertEquals("userID", abonnemnts.get(0).getUser().getUserId()); assertEquals("Kim", abonnemnts.get(0).getUser().getNom()); assertEquals("Kam", abonnemnts.get(0).getUser().getPrenom()); } @Test public void testUpdate() { List<Abonnement> abonnemnts = dashboardEJB .findAbonnementByUserId("userID"); Abonnement abnmt = abonnemnts.get(0); abnmt.setLastUpdateDate(new Date()); dashboardEJB.updateAbonnement(abnmt); } @Test public void testDelete() { Abonnement abnmt = dashboardEJB.findAbonnementByUserId("userID").get( 0); dashboardEJB.deleteAbonnement(abnmt); }
Après exécution j'obtiens l'erreur suivante :
Merci de votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <error message="No EJBContainer provider available: no provider names had been found." type="javax.ejb.EJBException">javax.ejb.EJBException: No EJBContainer provider available: no provider names had been found. at javax.ejb.embeddable.EJBContainer.reportError(EJBContainer.java:186) at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:121) at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:78) at fr.edf.sei.aggregator.dashboard.dao.test.AbonnementDAOImplTest.initEntityManager(AbonnementDAOImplTest.java:33) </error>
Partager