2012-05-03 3 views
2

Je me demandais comment procéder pour obtenir un objet à partir d'un JNDI distant au printemps 3. Où spécifiez-vous l'URL, comment le configurer dans un fichier de contexte, etc. J'ai trouvé des informations disproportionnées suggérant que cela est possible, mais pas de source unique pour savoir comment le faire pour un JNDi qui se trouve sur un serveur différent.Accéder à un JNDI distant au printemps

Répondre

2

Vous pouvez utiliser, par exemple, la classe JndiObjectFactoryBean dans une configuration de base comme celui-ci:

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

Vous pouvez spécifier d'autres environment properties au besoin et vous pouvez également simplifier votre configuration en utilisant the Spring jee schema.

0

en développant ce qui précède avec un exemple de connexion à un serveur distant activeMQ dans JBoss EAP7 en utilisant le composant CAMEL Jms.

Vous aurez besoin de ces 3 haricots dans votre application XML Spring contexte:

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

où chaque $ {xxx} représente une valeur que vous fournira en place ou avec un espace réservé de la propriété dans votre contexte d'application. Si vous n'avez pas besoin d'un utilisateur et d'un mot de passe pour ouvrir une connexion de file d'attente JMS, vous pouvez omettre le second bean et référencer directement le premier bean en tant que connectionFactory dans le bean Camels JmsComponent. Le bean 'jmsremote' peut alors être utilisé dans les URI CAML comme "jmsremote: queue: myQueue1"

Questions connexes