Test d'intégration EJB 3.1, JPA 2, Weblogic 12.1.2, No EJBContainer provider available
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 :
Code:
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;
}
} |
et voici le fichier persistence.xml utilisé pour le teste:
Code:
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> |
Je dispose également d'un fichier beans.xml vide.
Voici la classe de test:
Code:
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);
} |
pour le embedded EJB container j'ai ajouté le jar weblogic.jar au classpath de l'application.
Après exécution j'obtiens l'erreur suivante :
Code:
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> |
Merci de votre aide.