8

プロパティ ファイルの代わりに JNDI を使用して Spring+Hibernate Web アプリケーションを構成しようとしています。データベース URL、パスワード、ログインなど、すべて正常に動作しますが、JNDI コンテキストから方言を取得できません。

これをdatabase-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>

<prop name="hibernate.dialect">blabla</prop>問題は、プロパティ内で databaseDialect の JNDI 値を使用する方法がわからないことです。

何か案は?

4

1 に答える 1

4

MapSpring は aをオブジェクトに変換できる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>

参照:

コンテンツString からPropertiesオブジェクトへの変換を処理します。また、 XML「マップ」エントリを介してオブジェクトを移入するための変換も処理Map します。PropertiesProperties

ソース: PropertiesEditorjavadoc

于 2011-01-18T13:01:17.873 に答える