2011-01-18 8 views
8

Próbuję skonfigurować aplikację internetową Spring + Hibernate przy użyciu JNDI zamiast plików właściwości. Wszystko działa dobrze z adresu URL bazy danych, hasła, loginu itp., Ale nie mogę uzyskać dialektu z kontekstu JNDI.Skonfiguruj dialekt hibernacji za pomocą JNDI (ze sprężyną)

używam w moim 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> 

Problem polega na tym, że nie wiem, jak korzystać z wartości JNDI dla databaseDialect wewnątrz posesji <prop name="hibernate.dialect">blabla</prop>.

Wszelkie pomysły?

Odpowiedz

4

Wiosna może konwertować Map się do Properties obiektu, dzięki czemu można wykonać następujące czynności:

<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> 

referencyjny:

Uchwyty konwersję z zawartością String do Properties obiektu. Obsługuje także konwersję Map do Properties dla zapełniania obiektu Properties za pośrednictwem wpisów "map" XML .

Źródło: PropertiesEditor javadoc

+0

Works perfect! Dzięki! – infinito

Powiązane problemy