2011-12-06 13 views
3

環境のインスタンス内のJNDIルックアップ文字列:Windows Server 2003を、春3.0、Tomcatの6<JEE使用:PropertyPlaceholderConfigurer

にはどうすればPropertyPlaceholderConfigurer内部JNDIプロパティを参照することができますか?

具体的には、私は私の「JEE:JNDIルックアップ」

<jee:jndi-lookup id="mypropsfile1" jndi-name="myPropsFile1" resource-ref="true"/> 
<jee:jndi-lookup id="mypropsfile2" jndi-name="myPropsFile2" resource-ref="true"/> 

<bean id="propertyConfigurer" 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="ignoreUnresolvablePlaceholders" value="true"/> 
    <property name="locations"> 
    <array> 
     <value>how to use mypropsfile1 here ??</value> 
     <value>how to use mypropsfile2 here ??</value> 
    </array> 
    </property> 
</bean> 

に私のWebアプリケーションで必要なプロパティファイルをパスを表すjava.lang.StringでのルックアップするためにJNDIを使用しているのされていますAFAIKを働かせている。私の問題は、JNDIリソースを参照する方法であるようだ。 タグのペア内に

ありがとうございました! マーク

答えて

0

これは、PropertyPlaceHolderConfigurerがBeanFactoryPostProcessorであり、Bean定義が作成された時点で呼び出されますが、jndiルックアップはこのステージの後に発生するためです。

私はあなたのニーズに合わせてJNDIルックアップベースのプロパティファイル、使用してのアプローチのための勧告があるolder Spring forumディスカッションアイテム、見た:私はあなたがこのような何かを持っていると信じて

0

を。私はそれをテストしていませんが、基本的にPropertyPlaceholderConfigurerのsetLocationsメソッドはリソースの配列をとります(このケースではUrlResource - http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/core/io/UrlResource.html)。これはファイルパスのコンストラクタを持っています。

<jee:jndi-lookup id="mypropsfile1" jndi-name="myPropsFile1" default-value="file:///C:/defaultPath" resource-ref="true"/> 
<jee:jndi-lookup id="mypropsfile2" jndi-name="myPropsFile2" resource-ref="true"/> 

<bean id="propertyConfigurer" 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" depends-on="mypropsfile1,mypropsfile2"> 
    <property name="ignoreUnresolvablePlaceholders" value="true"/> 
    <property name="locations"> 
     <list> 
      <bean class="org.springframework.core.io.UrlResource"> 
       <constructor-arg><ref bean="mypropsfile1"/></constructor-arg> 
      </bean> 
      <bean class="org.springframework.core.io.UrlResource"> 
       <constructor-arg><ref bean="myPropsFile2"/></constructor-arg> 
      </bean> 
     </list> 

    </property> 
</bean> 

春に呼ばれるタグがあるかどうかわかりません。このhttp://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-introduction

0

をチェックし、私は次のようにマップを使用して、春3で次の操作を行います。

<jee:jndi-lookup id="myJndiLookup" jndi-name="com.techtrip.spring.config.myJndiLookup"></jee:jndi-lookup>  

<bean id="somethingWithMap" class="com.techtrip.foo.SomethingWithMap"> 
    <property name="propMap"> 
     <map> 
      <entry key="myJndiLookup" value-ref="myJndiLookup" /> 
     </map> 
    </property> 
</bean> 

これは、ほとんどの場合、正常に動作します。 eager initを正しく設定したとしても、AOPや何かをProxyクラスでラップするものを使用すると、問題に陥ることがあります。その場合の解決策は、必要なときに直接使用したアプリケーションのコンテキストからsomethingWithMap Beanにアクセスすることです:

applicationContext.getBeansOfType(type, includeNonSingletons, allowEagerInit);

*これは名前でBeanにアクセスすることができMap<String, T>を返すことに注意してください。

0

ない正確に単一JNDIプロパティに、これは、代わりにプロパティの参照を使用してJNDIを介して取得されています

<!-- Lookup Properties reference through JNDI --> 
<jee:jndi-lookup id="config-properties" jndi-name="resources/resource-name" resource-ref="true"/> 

<bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" depends-on="config-properties"> 
    <property name="ignoreUnresolvablePlaceholders" value="true"/> 
    <!-- Once the reference is obtained from JNDI, it can be used like any other reference --> 
    <property name="properties" ref="config-properties"></property> 
</bean> 
関連する問題