2011-03-11 47 views
7

我无法在Glassfish中获取一些基本的JNDI配置。Glassfish中的JNDI配置/查找

我有我认为应该是一个简单的任务:在运行时,确定是否一个特定的属性设置为true或不。我认为这是一个很好的JNDI应用程序,但似乎无法获得应用程序服务器和我的servlet代码之间的正确路径。

这里是我如何在GlassFish中配置的属性:

enter image description here

在我的servlet代码中,我试图查找与价值:

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

除了这个我也试过以下没有成功:

  • java:global /亚利桑那/亚利桑那/ quartz_enabled
  • 的java:模块/亚利桑那/ quartz_enabled
  • 的java:模块/亚利桑那/亚利桑那/ quartz_enabled

我的应用程序被命名为 “亚利桑那” 号,但如果部署到根上下文,事项。

我敢肯定,这只是一个简单的事情来确定适当的命名空间来达到属性,但我觉得我只是在黑暗中试图找到它。有没有简单的方法来浏览Glassfish中的JNDI树?

回答

0

在类似的情况下,我只需在其中实例化对象(此例中为InitialContext)的地方放置一个断点,然后对其进行评估。 IntelliJ IDEA有nice evaluator,不确定其他IDE,可以说是较差的。

顺便说一下,所有Java EE绑定的正确前缀是java:comp/env/,例如, java:comp/env/arizona/quartz_enabled。您可能也想看看​​。

+0

嗯,这似乎不适合我。我仍然得到:引起:javax.naming.NamingException:在SerialContext中'java:comp/env/arizona/quartz_enabled'的查找失败[根异常是javax.naming。NameNotFoundException:没有对象绑定到名称java:comp/env/arizona/quartz_enabled] 我也是一个Intellij用户,那个评估器确实很好,但不幸的是在这种情况下,您似乎仍然需要知道正确的JNDI名称。我没有在InitialContext中看到任何“可行走”的东西,我可以浏览。 – 2011-03-12 22:40:16

+0

在我需要进行调试的应用服务器之一(不记得哪一个确切,很久以前),JNDI被实现为嵌套映射,其中键是字符串,值是真实(绑定)值或地图(嵌套路径)。所以我能够将它投射到地图上并挖掘到我需要的点。 InitialContext也有getEnvironment()方法返回Hashtable,所以如果Glassfish JNDI不是在Map上构建的,它仍然应该公开类似的API。你可以从java:comp/env开始,看看里面有什么,然后挖掘,直到找到答案。 – mindas 2011-03-12 22:55:40

3

查找在服务器中创建的JNDI资源时,它的JNDI名称就是您在服务器上输入的名称。 IE:

Boolean enabled =(布尔值)ctx.lookup(“arizona”);

有关JNDI名称公约和上怎么看都起来看到这个页面的一些示例代码:

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

0

我不能使它与javax.naming.InitialContext#lookup但注射资源工作与

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

工作得很好。