IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

[Configuration] Confg par programmation : manque le datasource


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Configuration] Confg par programmation : manque le datasource
    Bonjour,

    Nous avons une série de DAOS réalisés avec hibrenate pour une application Web. Je dois mettre ne place une application Swing pour les mêmes tables. Je voudrais donc réutiliser les daos Hibernate pour ne pas tu réécrire.

    L'outil que je dois ecrire vas recherche dans un fichier ".properties" les paramètres de connexions (serveur, utilisateur et mot de passe).
    J'ai écris une classe devant me servir à récupèrer la SessionFactory :
    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
    public HibernateUtil(Properties properties) {
    		String url = new StringBuilder("jdbc:postgresql://")
    			.append(properties.getProperty("db.host"))
    			.append(":").append(properties.getProperty("db.port","5432"))
    			.append("/").append(properties.getProperty("db.name","DEFAULT"))
    			.toString();
     
    		Configuration cfg = new Configuration()
    			.configure("./hibernate.cfg.xml")
    			// Hard coded properties
    			.setProperty("hibernate.connection.driver_class", "org.postgresql.Driver")
    			.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect")
    			.setProperty("hibernate.connection.pool_size", "1")
    			// Dynamic properties
    			.setProperty("hibernate.connection.url", url)
    			.setProperty("hibernate.connection.username", properties.getProperty("db.user"))
    			.setProperty("hibernate.connection.password", properties.getProperty("db.password"))
    			// Mappings
    			.addResource("me/app/hibernate/mappings/menu.hbm.xml")
    			.addResource("me/app/hibernate/mappings/user.hbm.xml")
    			.addResource("me/app/hibernate/mappings/nationality.hbm.xml")
    			.addResource("me/app/hibernate/mappings/role.hbm.xml")
    			// Configuration
    			.configure();		
    		try {
    			sessionFactory = cfg.buildSessionFactory();
    		} catch (Throwable e) {
    			throw new ExceptionInInitializerError(e);
    		}
    	}
    Mais ce code me lance cette exception (sur la ligne "sessionFactory = cfg.buildSessionFactory()"):
    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:325)
    at javax.naming.InitialContext.getNameParser(InitialContext.java:480)
    at org.hibernate.util.NamingHelper.bind(NamingHelper.java:52)
    at org.hibernate.impl.SessionFactoryObjectFactory.addInstance(SessionFactoryObjectFactory.java:90)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:306)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
    at me.hibernate.HibernateUtil.<init>(HibernateUtil.java:42)
    at me.hibernate.NiocHibernateDaoFactory.<init>(NiocHibernateDaoFactory.java:36)
    at me.Administrator.preInit(Administrator.java:56)
    at fabric.app.Application.startOnEDT(Application.java:416)
    at fabric.app.Application.access$0(Application.java:415)
    at fabric.app.Application$Handler.run(Application.java:703)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
    J'ai bien compris qu'il faut que je lui fournisse un DataSource mais je ne vois absolument pas comment. Je rappelle que mon application est une application Swing.

    Dans la doc d'hibernate il est bien expliqué comment le configurer via JNDI mais je ne suis pas dans une application serveur disposant de JNDI.


    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 383
    Par défaut
    Il faut que tu installe et configure une API qui fournisse une datasource, comme par exemple C3p0:
    http://sourceforge.net/projects/c3p0/

    c'est le serveur d'application qui fournit ce service d'habitude.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 64
    Par défaut
    Il faut surtout que tu crées ton bean dataSource.... sinon je pense qu'il va y avoir un petit souci, voici un exemple :
    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
    <!-- MYSQL -->
    <bean id="dataSource"
    	class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    	<property name="driverClassName">
    		<value>com.mysql.jdbc.Driver</value>
    	</property>
    	<property name="url">
    		<value>jdbc:mysql://localhost/mabase</value>
    	</property>
    	<property name="username">
    		<value>user</value>
    	</property>
    	<property name="password">
    		<value>password</value>
    	</property>
    </bean>
    J'espère que ça peut t'aider....

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci à vous deux. J'ai bien compris qu'il fallait que je configure un DataSource mais dans mon cas je n'utilise pas Spring et pas de fichier de configuration Hibernate. Je dois donc configurer manuellement mon DataSource (ça, ça va) mais ensuite le renseigner à Hibernate et c'est la que je bloque.

    Une fois que j'ai instancié et configuré mon DataSource, comment le donner à org.hibernate.cfg.Configuration ou à org.hibernate.SessionFactory pour ne plus obtenir l'exception décrite dans mon premier post :
    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:325)
    at javax.naming.InitialContext.getNameParser(InitialContext.java:480)
    ...

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 383
    Par défaut
    Tu dois ajouter le nom JNDI de ta datasource (par exemple maDataSource) à la configuration Hibernate :
    .setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/maDataSource")

    Mais pour ça tu dois avoir un provider JNDI auprès duquel tu enregistres ta datasource (normalement ça se fait simplement dans n'importe quel serveur d'application).

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par slevy Voir le message
    (normalement ça se fait simplement dans n'importe quel serveur d'application).
    Merci mais moi je suis en Swing, donc pas de serveur d'application.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/02/2009, 22h01
  2. Réponses: 2
    Dernier message: 06/07/2007, 18h17
  3. configurer odbc par programmation
    Par devalender dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 28/02/2007, 22h41
  4. Configurer odbc par programmation
    Par devalender dans le forum WinDev
    Réponses: 3
    Dernier message: 30/06/2006, 23h02
  5. Configurer la carte réseau par programmation
    Par Deedier dans le forum Développement
    Réponses: 2
    Dernier message: 25/07/2005, 19h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo