mercredi 8 avril 2015

Use external properties file with Spring

I am beginner in Spring and I am trying to update my code. At the beginning, I was only using hibernate configuration file.


Now I would like to use an external properties file with th help of Spring but I encountered some difficulties.


Content of my applicationContext file :



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://ift.tt/GArMu6"
xmlns:xsi="http://ift.tt/ra1lAU"
xsi:schemaLocation=" http://ift.tt/GArMu6
http://ift.tt/1CZCNBy">

<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:properties/hibernate.properties" />
</bean>

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close">
<property name="hibernate.connection.driver_class">${db.driver}</property>
<property name="hibernate.connection.url">${db.url}</property>
<property name="hibernate.connection.username">${db.username}</property>
<property name="hibernate.connection.password">${db.password}</property>
<property name="hibernate.c3p0.min_size">${db.min_size}</property>
<property name="hibernate.show_sql">${db.show_sql}</property>
<property name="hibernate.current_session_context_class">${db.current_session_context_class}</property>
<property name="hibernate.query.factory_class">${db.factory_class}</property>
</bean>

<bean id="SessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>


<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>


I guess the files location are good but you can have a look below


project architecture


Content of my hibernate.properties file



db.driver=oracle.jdbc.OracleDriver
db.url=jdbc:oracle:thin:@X:1521:X
db.username=X
db.password=X
db.min_size=10
db.show_sql=true
db.current_session_context_class=thread
db.factory_class=org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory


Content of my hibernate configuration file :



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://ift.tt/1fnOghG">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.connection.driver_class">${db.driver}</property>
<property name="hibernate.connection.url">${db.url}</property>
<property name="hibernate.connection.username">${db.username}</property>
<property name="hibernate.connection.password">${db.password}</property>
<property name="hibernate.c3p0.min_size">${db.min_size}</property>
<property name="hibernate.show_sql">${db.show_sql}</property>
<!--<property name="hibernate.current_session_context_class">${db.current_session_context_class}</property>
<property name="hibernate.query.factory_class">${db.factory_class}</property>-->
<mapping resource="com/erm/monitoring/ErmMonitoring.hbm.xml"/>
</session-factory>


I have put in comment these lines because I got an ClassNotFound error...


Can you tell me what's wrong here please ? I loaded my properties file. I got each value by ${db.X}. I need an external glance because I cannot see my mistakes.


Thanks


This is what I get :



Grave: java.lang.UnsupportedOperationException: The application must supply JDBC connections
at org.hibernate.engine.jdbc.connections.internal.UserSuppliedConnectionProviderImpl.getConnection(UserSuppliedConnectionProviderImpl.java:61)
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67)

Aucun commentaire:

Enregistrer un commentaire