2011-03-11 121 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; 

工作得很好。