3

我想知道如何在 Spring 3 中从远程 JNDI 获取对象。在哪里指定 URL,如何在上下文文件中设置它等等。我发现一些分散的信息表明这是可能的,但没有关于如何为不同服务器上的 JNDi 执行此操作的单一来源。

4

2 回答 2

3

例如,您可以在像这样的基本配置中使用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>

然后,您可以根据需要指定其他环境属性,还可以使用Spring jee 模式来简化配置。

于 2012-05-06T15:39:00.107 回答
1

在上面扩展了一个使用 CAMEL Jms 组件连接到 JBoss EAP7 中的远程 activeMQ 服务器的例子。

您将在 Spring XML 应用程序上下文中需要这 3 个 bean:

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

然后可以在 CAML URI 中使用“jmsremote”bean,例如“jmsremote:queue:myQueue1”

于 2017-06-16T22:35:24.897 回答