008 JNDIツリーを表示するJSPで、JNDI操作を確実に!
こんにちは、id:EC-OneのAkiです。
今回は弊社の社内SNSに書かれていたネタからです。
JNDIツリーを表示するJSP
アプリケーションサーバからJNDIを引く(ルックアップする)ときに、引きたいJNDIのモノがあるかどうか事前に確認してみたいことがあります。または引いてみたらNameNotFoundExceptionになってしまった時の原因調査にも。
アプリケーションサーバの管理コンソールにJNDIエクスプローラみたいなのがあればいいのですが、無い製品もあるし、なんか不便。
(WebLogicはコンソールで見えますし、WebSphereだとdumpNameSpace.batというコマンドラインツールがありますが、TomcatやCosminexusでは見かけたことがないような...?)
という事で、こんなJSPをウチのメンバが作成して社内SNSに公開していました。
jndi.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="javax.naming.*,java.net.URLEncoder"%> <html> <head><title>JNDI explorer</title></head> <body> <h2>JNDI explorer</h2> <% String root = request.getParameter("root"); if (root == null) { root = ""; } %> <div><a href="jndi.jsp?root=">JNDI physical root</a> | <a href="jndi.jsp?root=java%3Acomp%2Fenv">JNDI logical root(java:comp/env)</a></div> <br> <h3>JNDI Object List</h3> Current Directory: <strong><%= h(root) %></strong> <ul> <% if (!("java:comp/env".equals(root) || "".equals(root))) { int slashpos = root.lastIndexOf("/"); if (slashpos == -1) { slashpos = 0; } %> <li><a href="jndi.jsp?root=<%= URLEncoder.encode(root.substring(0, slashpos), "UTF-8") %>">..</a></li> <% } %> <% InitialContext ctx = new InitialContext(); Context c = (Context) ctx.lookup(root); if (!"".equals(root)){ root = root + "/"; } NamingEnumeration e = c.list(""); while (e.hasMoreElements()) { NameClassPair pair = (NameClassPair) e.next(); boolean isContext = false; try { Object obj = ctx.lookup(root + pair.getName()); isContext = Context.class.isAssignableFrom(obj.getClass()); } catch (Exception ex) { /* WASv7 でClassNotFoundExceptionが発生するための対処 */ } if (isContext) { out.println("<li><a href=\"jndi.jsp?root=" + URLEncoder.encode(root + pair.getName(), "UTF-8") + "\">" + pair.getName() + "/</a></li>"); continue; } out.println("<li>" + h(pair.getName()) + "(" + h(pair.getClassName()) + ")</li>"); } %> </ul> </body> </html> <%! private String h(Object value) { if (value == null) { return null; } String s = value.toString(); s = s.replaceAll("&" , "&" ); s = s.replaceAll("<" , "<" ); s = s.replaceAll(">" , ">" ); s = s.replaceAll("\"", """); s = s.replaceAll("'" , "'" ); return s; } %>
表示例
ちょっとした開発支援ツールですが、お役にたちますでしょうか?
こういうちょっとしたものが意外に問題解決のストレスをやわらげてくれたりします。(^-^)
関連エントリ
- 004 Java Web StartでJava VMが2回起動する?
- 012 新入社員のうちに知っておくと役に立つApacheの2つのTips
- 013 同一レコードを複数ユーザが同時に変更してしまうのを防ぐには?
Java、Ruby及び周辺のOSSを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。