Customize hibernate dialogs using JNDI (using Spring)

I am trying to configure a Spring + Hibernate web application using JNDI instead of property files. Everything works fine, with the database URL, password, login, etc., but I can’t get the dialect from the JNDI context.

I use this in my datatabase-context.xml:

<bean id="databaseUrl" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/url"/> </bean> <bean id="databaseDriver" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/driver"/> </bean> <bean id="databaseUsername" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/username"/> </bean> <bean id="databasePassword" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/password"/> </bean> <bean id="databaseDialect" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/dialect"/> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" ref="databaseDriver"/> <property name="url" ref="databaseUrl"/> <property name="username" ref=databaseUsername"/> <property name="password" ref="databasePassword"/> <property name="maxWait" value="30000"/> <property name="validationQuery" value="select 1"/> <property name="maxActive" value="100"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="packagesToScan">...</property> <property name="hibernateProperties"> <props> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.show_sql">true</prop> <!--<prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop>--> <!--<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>--> </props> </property> </bean> 

The problem is that I don’t know how to use the JNDI value for the Dialect database inside the <prop name="hibernate.dialect">blabla</prop> .

Any ideas?

+8
java spring hibernate jndi dialect
source share
1 answer

Spring can convert the Map object to a Properties object, so you can do the following:

 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="hibernateProperties"> <util:map> <entry key="hibernate.hbm2ddl.auto" value="update" /> <entry key="hibernate.show_sql" value="true" /> <entry key="hibernate.dialect"> <jee:jndi-lookup jndi-name="java:comp/env/jdbc/dialect" /> </entry> </util:map> </property> </bean> 

Reference:

Handles the conversion from the contents of a String to a Properties object. It also processes Map to Properties to populate the Properties object via the Map XML.

Source: PropertiesEditor javadoc

+4
source share

Source: https://habr.com/ru/post/651202/


All Articles