Toplink et persistence

seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009 - 16 juil. 2009 à 04:01
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 17 juil. 2009 à 07:50
je suis entrain de developper une application jee (ejb3) pour inserer des données dans une base de donées
pour se faire j'ai utilisé my sql comme db et toplink comme une ORM
lors de l'execution de la classe VolFacade responsable des actions de persistence de l'entityBean Vol

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package ejb;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceUnit;
import javax.transaction.UserTransaction;

/**
*
* @author Administrateur
*/
@Stateless
public class VolFacade implements VolFacadeLocal {

@Resource
private UserTransaction utx = null;
@PersistenceUnit(unitName = "OACA-ejbPU")
private EntityManagerFactory emf = null;

private static final String JPA_UNIT_NAME = "OACA-ejbPU";
private EntityManager entityManager=null;
long n=0;
public EntityManager getEntityManager() {
if (entityManager == null) {
entityManager = Persistence.createEntityManagerFactory(JPA_UNIT_NAME).createEntityManager();
}
return entityManager;
}

public void create(long n) throws Exception {

try {
Vol voll = new Vol(n);
voll.setDepart("dddddd");
voll.setDestination("fgfdd");

entityManager = getEntityManager();

entityManager.persist(voll);

utx.commit();
} finally {
if (entityManager != null) {
entityManager.close();
}
}
}
public static void main(String[] args){
try {

VolFacade vf = new VolFacade();
vf.create(5);
} catch (Exception ex) {
Logger.getLogger(VolFacade.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

mais a l'excution voici l'erreur qui apparait

javax.persistence.PersistenceException: Exception [TOPLINK-7060] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.ValidationException
Exception Description: Cannot acquire data source [voldb].
Internal Exception: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:239)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:93)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:126)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:120)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:91)
at ejb.VolFacade.getEntityManager(VolFacade.java:35)
at ejb.VolFacade.create(VolFacade.java:47)
at ejb.VolFacade.main(VolFacade.java:62)
Caused by: Exception [TOPLINK-7060] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.ValidationException
Exception Description: Cannot acquire data source [voldb].
Internal Exception: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at oracle.toplink.essentials.exceptions.ValidationException.cannotAcquireDataSource(ValidationException.java:373)
at oracle.toplink.essentials.jndi.JNDIConnector.connect(JNDIConnector.java:135)
at oracle.toplink.essentials.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:184)
at oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:582)
at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:280)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:229)
... 7 more
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:385)
at javax.naming.InitialContext.lookup(InitialContext.java:396)
at oracle.toplink.essentials.jndi.JNDIConnector.connect(JNDIConnector.java:129)
... 11 more

je vois pourquoi il ne detecte pas la base de données dbvol malgré que je l'ai configuré lors de la creation de l'unité de persistence
voici mon fichier persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>


oracle.toplink.essentials.PersistenceProvider


<jta-data-source>voldb</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>










quelqu'un peut m'aider je suis coincé il ya 3 jours et je trouve pas de solution
et il ne me reste plus de temps
merci d'avance

8 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
16 juil. 2009 à 08:00
Salut,

Est-ce que tu as crée une datasource au niveau de ton serveur d'application J2EE qui s'appelle voldb ? Car apparement, l'erreur vient de là.

Il faut toujours lire les messages d'erreurs affichés et les comprendre, sinon forcément, tu perds du temps...
Cannot acquire data source [voldb]
______________________________________
DarK Sidious
0
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009
16 juil. 2009 à 15:57
j'ai su l'erreur d'ou elle vient mais j'ai pas pu la corriger.
excusez moi je suis nouveau dans le domaine de jee.
Concernant la creation d'une data source au niveau de serveur d'application est ce que c'est depuis la page web d'administration ou depuis l'ide

merci d'avande pour l'aide
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
16 juil. 2009 à 16:04
Salut,

Tu utilise quoi comme serveur d'application ?

Normalement ca se fait à partir de l'interface d'administration, mais pour certains (JBoss par exemple), ca consiste à créer un fichier xml et le mettre dans le dossier de configuration du serveur.
______________________________________
DarK Sidious
0
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009
16 juil. 2009 à 16:09
j'utilise glass fish v2 et il possede une interface d'administration je vais voir labas esperons que ca marche
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
16 juil. 2009 à 16:28
Salut,

Alors avec glass fish ca se passe bien dans l'interface d'administration, et de mémoire, il me semble qu'il est relativement simple de créer un datasource avec glassfish (de toute façon tout est simple (trop ?) avec glassfish tellement il se contente du minimum de connaissance).
______________________________________
DarK Sidious
0
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009
16 juil. 2009 à 18:59
j'ai crée la data source au niveau de glass fish mais rien de nouveau la meme erreur persiste
0
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009
17 juil. 2009 à 00:02
j'ai pas trouvé une autre maniere pour specifier ma data source
je l'ai specifié dans le fichier de persistence.xml et au niveau de serveur d'application(depuis la console admin) mais la meme erreur persiste
est ce qu'il ya une autre configuration que je le faire pour que la data source soit detectée
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 juil. 2009 à 07:50
Salut,

Non non, c'est tout ce qu'il y a à paramètrer pour une data source : au niveau serveur tu lui indique quelle base de données utiliser (avec quel connector : ne pas oublier de mettre le connector dans les bibliothèques de ton serveur d'application !), et au niveau de ton application web, tu créer le fichier persistence.xml (qui doit se trouver à la racine de ton classpath) indiquant quel datasource du serveur d'application utiliser, et quel nom le mappe avec JNDI.

Vérifie bien que le nom de ton datasource que tu viens de créer correspond exactement au nom que tu as entré dans ton fichier persistence.xml. N'oublie pas de redémarrer ton serveur d'application, d'enlever l'ancienne version de ton application web, et de la redéployer à la place.
______________________________________
DarK Sidious
0
Rejoignez-nous