简体   繁体   English

使用JNDI(与Spring)一起配置休眠方言

[英]Configure hibernate's dialect using JNDI (with Spring)

I'm trying to configure a Spring+Hibernate web application using JNDI instead of a properties files. 我正在尝试使用JNDI而不是属性文件来配置Spring + Hibernate Web应用程序。 Everything works fine por database url, password, login, etc., but I can't get the dialect from the JNDI context. 通过数据库url,密码,登录名等一切都可以正常工作,但是我无法从JNDI上下文中获得方言。

I'm using this in my datatabase-context.xml: 我在我的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 databaseDialect inside the <prop name="hibernate.dialect">blabla</prop> property. 问题是我不知道如何在<prop name="hibernate.dialect">blabla</prop>属性中使用JNDI值作为databaseDialect。

Any ideas? 有任何想法吗?

Spring can convert a Map to a Properties object, so you can do the following: Spring可以将Map转换为Properties对象,因此您可以执行以下操作:

<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 conversion from content String to Properties object. 处理从内容StringProperties对象的转换。 Also handles Map to Properties conversion, for populating a Properties object via XML "map" entries. 还处理“ MapProperties转换,以通过XML“映射”条目填充“ Properties对象。

Source: PropertiesEditor javadoc 来源: PropertiesEditor javadoc

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM