Tomcat Lookup datasource em outro server

Ae galera,

Como faço o Tomcat 5 fazer lookup de um recurso JNDI, por exemplo, database (Oracle) em outro servidor que não localhost.

Não encontrei referência na internet, todas as implementações de lookup de banco usam:

...
x = new InitialContext();
..

Eu preciso dizer que o recurso está em algum lugar que não o servidor local, penso que não posso usar InitialContext default por que eu não posso usar jndi.properties. Tenho serviços distribuídos em vários servidores e o jndi.properties já aponta para um determinado servidor e não pode ser alterado.

Quero deixar claro que não se trata de fazer lookup de banco em outro servidor, isso pode ser feito no XML da declaração do banco. Trata-se de lookup geral JNDI.

Alguma idéia ?

thanks

Hashtable env = new Hashtable(); env.put( Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory" ); env.put( Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces" ); env.put( Context.PROVIDER_URL, "jnp://127.0.0.1:1099" ); ctx = new InitialContext( env );

Como o servidor não é o JBoss, procure quais os valores colocar.

Valeu Destro,

Eu já tentei isso, mas aparentemente o jndi.properties tem prioridade sobre essa configuração. Alguém confirma isso ?

Digo isso pq quando tenho esse código que você citou, com os valores adequados ao Tomcat, e tenho também no classpath o jndi.properties apontando para um servidor inválido, o lookup falha (prioridade para jndi.properties), quando removo o jndi.properties o código funciona (prioridade para o código com HashTable).

Tenho um problema aí, pq uso um serviço de terceiros que usa o jndi.properties (não tenho como alterar esse código). Por isso tenho que alterar o meu código e fazer lookup por outro lado que não jndi.properties. Mas, mantendo o arquivo jndi.properties no meu classpath

Alguém mais ?

Hummmm… situação complicada mesmo.
Eu penso que, se você já informa os dados, ele deveria ignorar o jndi.properties. Você leu algo na documentação da API?

[quote] JNDI determines each property’s value by merging the values from the following two sources, in order:

  1. The first occurrence of the property from the constructor’s environment parameter and (for appropriate properties) the applet parameters and system properties.
  2. The application resource files (jndi.properties).

For each property found in both of these two sources, or in more than one application resource file, the property’s value is determined as follows. If the property is one of the standard JNDI properties that specify a list of JNDI factories (see Context), all of the values are concatenated into a single colon-separated list. For other properties, only the first value found is used.[/quote]

Você quis dizer, na documentação do Tomcat.

Sim, ela só faz referência a … x = new InitialContext(); …

Se isto ajudar, percebi em debug, que “alguém” faz o merge das propriedades quando existem as 2 configurações, via hashtable e jndi.properties, as propriedades são concatenadas e imagino que o Contexto é criado em seguida, pegando o que vier primeiro (provavelmente jndi.properties).

t+

Leia aqui: http://java.sun.com/j2se/1.4.2/docs/api/javax/naming/InitialContext.html