008 JNDIツリーを表示するJSPで、JNDI操作を確実に!


こんにちは、id:EC-OneのAkiです。

今回は弊社の社内SNSに書かれていたネタからです。

JNDIツリーを表示するJSP

アプリケーションサーバからJNDIを引く(ルックアップする)ときに、引きたいJNDIのモノがあるかどうか事前に確認してみたいことがあります。または引いてみたらNameNotFoundExceptionになってしまった時の原因調査にも。
アプリケーションサーバの管理コンソールにJNDIエクスプローラみたいなのがあればいいのですが、無い製品もあるし、なんか不便。
(WebLogicコンソールで見えますし、WebSphereだとdumpNameSpace.batというコマンドラインツールがありますが、TomcatCosminexusでは見かけたことがないような...?)

という事で、こんな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("&" , "&amp;" );
    s = s.replaceAll("<" , "&lt;"  );
    s = s.replaceAll(">" , "&gt;"  );
    s = s.replaceAll("\"", "&quot;");
    s = s.replaceAll("'" , "&#39;" );
    return s;
}
%>

表示例


ちょっとした開発支援ツールですが、お役にたちますでしょうか?
こういうちょっとしたものが意外に問題解決のストレスをやわらげてくれたりします。(^-^)







JavaRuby及び周辺のOSSを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク