在JNDI的所有條目的任何一個可以告訴或點我的代碼以列出遠程計算機代碼列出遠程機器
Q
代碼列出遠程機器
42
A
回答
72
它可以列出一個InitialContext的所有條目所有的JNDI條目。您可以使用此代碼段:如果您在使用應用程序服務器
InitialContext ctx = new InitialContext();
NamingEnumeration<NameClassPair> list = ctx.list("");
while (list.hasMore()) {
System.out.println(list.next().getName());
}
,通常有瀏覽JNDI樹的選項。
18
我知道,從最後一個答案開始有很多時間,但我需要列出上下文(tomee上下文)中可用的所有jdbc數據源。
在我的情況下,我需要超過list("")
(遺憾的是,這對我來說不起作用)才能達到我的目標。 我發現了一個命名環境列表在這裏:
Naming Environment for J2EE Application Components
有了這個,我用下面的代碼所有可用的JDBC資源片斷
InitialContext ctx = new InitialContext();
NamingEnumeration<NameClassPair> list = ctx.list("java:comp/env/jdbc");
while (list.hasMore()) {
System.out.println(list.next().getName());
}
這就是全部。
我希望這可以幫助別人,幫助我。
14
以前的答案沒有給我的「全貌」(上Tomcat7),所以我一起拋出下面的合併,其將JNDI值的樹圖(與toString
值):
import javax.naming.*;
...
public static Map toMap(Context ctx) throws NamingException {
String namespace = ctx instanceof InitialContext ? ctx.getNameInNamespace() : "";
HashMap<String, Object> map = new HashMap<String, Object>();
log.info("> Listing namespace: " + namespace);
NamingEnumeration<NameClassPair> list = ctx.list(namespace);
while (list.hasMoreElements()) {
NameClassPair next = list.next();
String name = next.getName();
String jndiPath = namespace + name;
Object lookup;
try {
log.info("> Looking up name: " + jndiPath);
Object tmp = ctx.lookup(jndiPath);
if (tmp instanceof Context) {
lookup = toMap((Context) tmp);
} else {
lookup = tmp.toString();
}
} catch (Throwable t) {
lookup = t.getMessage();
}
map.put(name, lookup);
}
return map;
}
用法:
toMap(new InitialContext());
給出Tomcat7以下輸出:
{
"comp": {
"env": {
"myCustomVar": "foobar"
},
"UserTransaction": "Cannot create resource instance",
"Resources": {
"index.html": "[email protected]",
"WEB-INF": {
"ibm-web-ext.xml": "[email protected]",
"ibm-web-bnd.xml": "[email protected]"
}
}
}
}
0
我用下面的代碼(不用於生產):
public void discoverJndi(String path, Context context) throws TestClientException, NamingException {
try {
NamingEnumeration<NameClassPair> list = context.list(path);
while (list.hasMore()) {
String name = list.next().getName();
String child = path.equals("") ? name : path + "/" + name;
System.out.println(child);
discoverJndi(child, context);
}
} catch (NotContextException e) {}
}
+0
儘管此代碼片段可能是解決方案,但[包括解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-基於代碼的答案)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – peacetype 2018-02-05 12:02:06
相關問題
- 1. 在遠程機器上運行代碼
- 2. 遠程機器和Findstr傳遞退出代碼的任務列表
- 3. 在遠程機器上啓動硒服務器的C#代碼
- 4. 遠程機器
- 5. 遠程機器
- 6. 遠程機器
- 7. 遠程代碼庫
- 8. 從遠程機器
- 9. 從Windows機器發送文件到Linux遠程服務器java代碼
- 10. Subversion版本遠程代碼
- 11. PHPUnit - 遠程代碼覆蓋
- 12. 在遠程機器上
- 13. PerformanceCounter和遠程機器
- 14. 控制遠程機器
- 15. 遠程關閉Windows機器
- 16. 從python腳本輸出到遠程機器的輸出?
- 17. 遠程密碼散列
- 18. C#獲得遠程機器的焦點窗口標題,無需在遠程機器上安裝代理
- 19. 從組裝代碼到機器代碼的旅程
- 20. 將子文件夾從遠程機器複製到遠程機器目錄
- 21. 隨機win32退出代碼
- 22. 如何在更快的遠程機器上運行舊版Mac代碼?
- 23. jQuery代碼在本地主機,但不能遠程服務器上的工作
- 24. SSH到遠程計算機和編譯/運行代碼
- 25. 使用Subversion中的代碼從遠程計算機上操作
- 26. 如何通過代碼遠程解鎖android手機
- 27. 遠程主機關閉連接。錯誤代碼是0x80070057
- 28. 遠程機器未運行時如何初始化遠程JMS隊列的ConnectionFactory?
- 29. 問題與遠程服務器機器
- 30. 在遠程機器上運行線程
這不完整的樹在Tomcat中。只有用戶在該實例中創建的內容。有沒有辦法在tomcat上做到這一點? – John 2014-07-04 13:22:32
@John - 添加了[下面的答案](http://stackoverflow.com/questions/2324937/code-to-list-all-the-entries-in-jndi-on-remote-machine/37021007#37021007)其中(希望)解決您的問題(比從不遲到)。 – 2016-05-04 07:23:42