2011-01-18 21 views
8

मैं गुण फ़ाइलों के बजाय जेएनडीआई का उपयोग कर स्प्रिंग + हाइबरनेट वेब एप्लिकेशन को कॉन्फ़िगर करने का प्रयास कर रहा हूं। सबकुछ ठीक पोर डेटाबेस यूआरएल, पासवर्ड, लॉगिन इत्यादि काम करता है, लेकिन मुझे जेएनडीआई संदर्भ से बोली नहीं मिल सकती है।जेएनडीआई (वसंत के साथ) का उपयोग करके हाइबरनेट की बोली को कॉन्फ़िगर करें

मैं अपने 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> 

समस्या यह है कि मैं कैसे <prop name="hibernate.dialect">blabla</prop> संपत्ति के अंदर databaseDialect के लिए JNDI मान का उपयोग करना नहीं आता है।

कोई विचार?

उत्तर

4

स्प्रिंग, एक एक Properties को Map वस्तु में बदल सकते हैं तो आप निम्न कर सकते हैं:

<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 को वस्तु से रूपांतरण संभालती है। Map से Properties रूपांतरण Properties ऑब्जेक्ट को "मानचित्र" प्रविष्टियों के माध्यम से पॉप्युलेट करने के लिए भी संभालता है।

स्रोत: PropertiesEditor javadoc

+0

सही काम करता है! धन्यवाद! – infinito

संबंधित मुद्दे