2011-03-11 22 views
7

Tengo problemas para obtener una configuración básica de JNDI en Glassfish.Configuración/búsqueda de JNDI en Glassfish

Tengo lo que creo que debería ser una tarea simple: en tiempo de ejecución, determinar si una propiedad en particular se establece en verdadero o no. Creo que esta es una buena aplicación de JNDI, pero parece que no puedo encontrar la ruta correcta entre el servidor de aplicaciones y mi código de servlet.

Así es como he configurado la propiedad en Glassfish:

enter image description here

En mi código del servlet, estoy tratando de buscar el valor con:

Boolean enabled = (Boolean) ctx.lookup("java:global/arizona/quartz_enabled"); 

Además de esto ruta, también he intentado lo siguiente sin éxito:

  • java: global/Arizona/Arizona/quartz_enabled
  • java: module/Arizona/quartz_enabled
  • java: module/Arizona/Arizona/quartz_enabled

Mi aplicación se llama "Arizona", pero implementa en el contexto raíz, si eso asuntos.

Estoy seguro de que es solo una cuestión de averiguar el espacio de nombre adecuado para llegar a la propiedad, pero siento que estoy disparando en la oscuridad tratando de encontrarlo. ¿Hay una manera simple de navegar el árbol JNDI en Glassfish?

Respuesta

0

En situaciones similares, simplemente coloco un punto de ruptura donde se instancia el objeto (InitialContext en este caso) y lo evalúo posteriormente. IntelliJ IDEA tiene nice evaluator, no estoy seguro acerca de otros IDE, posiblemente inferiores.

Por cierto, el prefijo correcto para todos los enlaces de Java EE es java:comp/env/, p. java:comp/env/arizona/quartz_enabled.

Es posible que también desee consultar this resource.

+0

Hmm, eso no parece funcionar para mí. Todavía obtengo: Causado por: javax.naming.NamingException: Error de búsqueda para 'java: comp/env/arizona/quartz_enabled' en SerialContext [La excepción de raíz es javax.naming.NameNotFoundException: Ningún objeto vinculado al nombre java: comp/env/arizona/quartz_enabled] También soy un usuario de Intellij, y ese evaluador es muy bueno, pero desafortunadamente en este caso todavía parece necesitar el nombre JNDI adecuado. No vi nada "manejable" en el InitialContext que pudiera navegar. –

+0

En uno de los servidores de aplicaciones que necesitaba depurar (no recuerdo cuál fue exactamente hace mucho tiempo), el JNDI se implementó como un mapa anidado, donde las claves son cadenas y los valores son valores reales (enlazados) o mapas (para rutas anidadas). Así que fui capaz de lanzarlo a un mapa y cavar hasta el punto que necesitaba. InitialContext también tiene el método getEnvironment() que devuelve Hashtable, por lo que si Glassfish JNDI no está construido en Map, todavía debería exponer API similar. Puede comenzar desde java: comp/env, ver lo que contiene y buscar hasta encontrar la respuesta. – mindas

3

Al buscar un recurso JNDI creado en el servidor, su nombre JNDI es exactamente el que usted ingresó como el nombre en el servidor. IE:

Boolean enabled = (Boolean) ctx.lookup ("arizona");

Para convenciones sobre nombres JNDI y un código de ejemplo en la forma de mirar todo lo que hasta ver esta página:

http://www.javaworld.com/javaworld/jw-01-2000/jw-01-howto.html

0

no puedo hacer que funcione con javax.naming.InitialContext#lookup pero la inyección de recursos con

@Resource(name = "arizona/quartz_enabled") 
private Boolean enabled; 

funciona bien.