2012-05-03 54 views
2

我想知道在Spring 3中如何從遠程JNDI獲取對象。您在哪裏指定URL,如何將它全部放在上下文文件中等。發現了一些不同的信息,表明這是可能的,但沒有單獨的來源說明如何爲不同服務器上的JNDi執行此操作。在Spring中訪問遠程JNDI

回答

2

您可以使用,例如,JndiObjectFactoryBean類的基本配置中像這樣的:

<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean"> 
     <property name="jndiName" value="yourLookupNameGoesHere" /> 
     <property name="jndiEnvironment"> 
      <props> 
       <prop key="java.naming.provider.url">yourRemoteServerGoesHere:PortGoesHere</prop> 
       <prop key="java.naming.factory.initial">yourNamingContextFactoryGoesHere</prop> 
       <prop key="java.naming.factory.url.pkgs">yourPackagePrefixesGoHere</prop> 
       <!-- other key=values here --> 
      </props> 
     </property> 
     <!-- other properties here--> 
    </bean> 

然後,您可以指定其他environment properties根據需要,您還可以通過使用the Spring jee schema簡化配置。

0

在上面擴展了一個使用CAMEL Jms組件連接到JBoss EAP7中遠程activeMQ服務器的例子。

您需要在Spring XML應用程序上下文這3種豆:

<bean id="remoteQCF" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="${factoryJndiName}" /> 
    <property name="jndiEnvironment"> 
    <props> 
     <prop key="java.naming.provider.url">http-remoting://${remoteHost}:${remotePort}</prop> 
     <prop key="java.naming.factory.initial">org.jboss.naming.remote.client.InitialContextFactory</prop> 
     <!-- other key=values here <prop key="java.naming.factory.url.pkgs">yourPackagePrefixesGoHere</prop> --> 
    </props> 
    </property> 
</bean> 
<bean id="remoteQCFproxy" 
    class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter"> 
    <property name="targetConnectionFactory" ref="remoteQCF" /> 
    <property name="username" value="${username}" /> 
    <property name="password" value="${password}" /> 
</bean> 
<bean id="jmsremote" class="org.apache.camel.component.jms.JmsComponent"> 
    <property name="connectionFactory" ref="remoteQCFproxy" /> 
</bean> 

其中每個$ {} XXX表示你將在地方或在你的應用程序上下文屬性佔位符提供一個值。

如果您不需要用戶名和密碼來打開JMS隊列連接,則可以省略第二個bean,並直接將第一個bean作爲camel JmsComponent bean中的connectionFactory引用。

'jmsremote'bean然後可以在CAML URI中使用,如「jmsremote:queue:myQueue1」