style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

[resuelto] Alguien sabe alguna "buena práctica" para configurar muchos DataSources con JNDI?

Supongamos que se quiere tener la posibilidad de conectarse a N bases de datos y se quiere usar JNDI

Una forma es crecer y crecer el archivo de configuración del servlet container. ¿Existe alguna otra forma? Se me ocurre por ejemplo que el proveedor de JNDI utilice una base de datos, pero no sé si eso sea posible para empezar (supongo que sí). Es probable que se agreguen y se eliminen varios JNDI's al día.

Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de rugi

Si tu contenedor es, por

Si tu contenedor es, por ejemplo, por decir algo.. weblogic , puedes usar WLST,
glasfish tiene algo similar,
JBoss igual.

¿Algo más del escenario que puedas compartir?

Imagen de rugi

Mmmm, siendo más estricto,

Mmmm, siendo más estricto, WLST lo que hace realmente es, hablarle al server con JMX,
así que, una opción real es: revisar los JMXBeans que expone tu servidor y
verificar que tenga opción de realizar esta operación... si esto es así: ya Estás, peinado, patrás!!!!!

;)

Mmhh no mucho hasta ahora. El

Mmhh no mucho hasta ahora. El escenario es una aplicación tipo SaaS donde si hay un nuevo cliente se puede configurar la app para que use su base de datos. Entonces, potencialmente puede haber N JNDI's nuevos y eliminados al día ( porlo que config file no aplica )

Entonces, lo que haré será investigar si hay un API como mencionas. Gracias.

Imagen de beto.bateria

webservices o jndi

Creo que se puede hacer con webservices, nunca he usado ws, pero si he leido acerca de ellos, si vas a las especificaciones de wsdl y uddi podrias usarlas y encontrar una solucion a tu problema.

Si las bases de datos estan dentro de un mismo entorno o dominio, a la mejor estudiando mas jndi podria encontrarse otra solucion, ya que maneja directorios de servicios y coneccion con LDAP.

http://es.wikipedia.org/wiki/JNDI
http://es.wikipedia.org/wiki/Servicio_web

Son solo suposiciones, pero creo que hay una buena posibilidad, sobre todo usando WS.

Va más bien por el lado del

Va más bien por el lado del JNDI.

Encontré esto http://www.paykin.info/java/add-datasource-programaticaly-cli-jboss-7/ que es similar a lo que menciona Rugi pero para JBoss. Aún no sé si funciona o no. Mañana le doy un vistazo y les platico.

Chau!

Imagen de neko069

Yo lo veo más por el lado de

Yo lo veo más por el lado de armar en una base de datos local, una(s) tabla(s) para guardar los datos de los JNDI que requieras, y conforme los necesites, registrarlos(creo que era algo de createSubcontext) en tu Context, ya cuando no los necesites, primero los "des-registras" (destroySubcontext) (sí, así de versátil es mi español) y borras los datos de tu base.

Aja.. exacto. Encontré el SPI

Aja.. exacto.

Encontré el SPI de JNDI, revisando.

http://docs.oracle.com/javase/7/docs/technotes/guides/jndi/spec/spi/jndi...

Imagen de beto.bateria

Que tal OscaRyz, te salio el

Que tal OscaRyz, te salio el experimento con jndi?

@beto.bateria Acabo de ver

@beto.bateria

Acabo de ver tu mensaje.

Si lo que usamos fue SimpleJNDI, https://code.google.com/p/osjava/wiki/SimpleJNDI, se puede poner como dependencia de pom y servía bastante bien para nuestros fines. Había algunas restrucciones que ahora no recuerdo pero no nos afectaban ( y no eran tan comunes )

Con esta implementación se pueden agregar N datasources dinámicamente con código y destruir y lo mejor de todo es que para el código que lo consume es totalmente transparente. Además se puede poner dentro de los test.

Imagen de beto.bateria

Me imagino que se puede

Me imagino que se puede implementar algo parecido para instancias de contenedores o servidores de aplicacione.

Imagen de apolonioluis

Yo tengo algo similar, es un

Yo tengo algo similar, es un demo de un punto de venta web en el que los usuarios crean un cuenta en la pagina y al crear hace lo siguiente:

la cuenta se agrega un registro en una base de datos de usuarios,

se agregan los datos aun archivo properties.

y se crea la nueva base de datos.

cuando el usuario regresa al demo teclea sus datos y se abre la conexion que el ya creo segun conexion ya grabada en el .properties.

todo esto lo hago con Yank el cual maneja un pool de conexiones de modo que nunca se cruzan los datos o se satura de conexiones.

Preguntas: Y tienen que

Preguntas:
Y tienen que reiniciar el sistema para leer esos .properties? Yank utiliza JNDI para crear la conexion de base de datos?

A mi se me ocurre que creas

A mi se me ocurre que creas tu conexion invocando al jndi y con objeto implementado serializable para que sea como puente al datasource asi que cuando necesites cambiar de jndi solo guardas el nuevo jndi en el objeto de lectura del data source y ya ta

@sudhunter El problema es que

@sudhunter El problema es que es el contenedor el quie require la conexion via JNDI ( el la pide, la crea y la usa ) lo que se necesita es crear dinamicamente la configuracion de JNDI. Si se pone un objeto implementando serializable el contenedor diria: "Que? y esto que?"

Como sea ya lo resolv'i utilizando SimpleJNDI como puse mas arriba: https://code.google.com/p/osjava/wiki/SimpleJNDI.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">