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