Recent Posts

RSS Feeds

2009年JavaOneのDuke's Choice Awardのノミネーション開始


2009年 JavaOneのDuke Choice Awardのノミネーションを開始しました。
昨年は、Hudsonで川口さんが受賞しましたが、今年はどのような技術で
どなたが受賞するのでしょうか?

日本人もすばらしい技術をたくさん生み出していると思います。
我こそはと思うかたは是非応募フォームよりノミネートしてください。

2008年の Duke Choice Award Winners 一覧


Permalink     No Comments
Track Back :


LDAPコンテキストのディレクトリ配下全削除用コード

JNDI/LDAPによるエントリの削除は、ディレクトリを構成する
ノードの葉(一番最下層)から順に削除しなければなりません。
つまり、子ノードを持つエントリは直接削除することができないのです。
そこで、ノードの葉から順に再起的に削除する必要があるのですが、
下記は、指定したDN配下全てのエントリを再起的に削除するための
サンプルコードになります。。
赤線で示したコードが実際にLDAPサーバから削除するコードになります。

   /**
     * 指定したDN以下のノードを再起的に削除する。
     * 
     * @param ctx ディレクトリコンテキスト
     * @param dn 削除対象のルートノードのDN
     */
    private void deleteAll (Context ctx,String dn) {
        try {
            NamingEnumeration list = ctx.listBindings(dn);
            //現在のDNの配下にサブコンテキストが存在するか
            while (list.hasMore()) {
                Binding item = (Binding)list.next();
                String className = item.getClassName();
                String name = item.getName();
                String subdn = name + "," + dn;
                Object o = item.getObject();
                if (o instanceof javax.naming.Context){
                    Context subctx = (Context)o;
                    //さらにその下にサブコンテキストが存在するか
                    NamingEnumeration sublist = ctx.listBindings(subdn);
                    if(sublist.hasMore()){
                        //存在する場合、再起的呼び出し                    	
                        deleteAll (ctx, subdn);
                    }else{
                        //存在しない場合、コンテキストを削除
                        ctx.destroySubcontext(subdn);
                        logger.info("DN: " + subdn + "is deleted from LDAP");
                    }
                }
            }
            ctx.destroySubcontext(dn);
            logger.info("DN: " + dn + "is deleted from LDAP");
        }catch (NamingException ex) {
        	logger.error("Failed to delete entry on LDAP",ex);
        }
    }

Permalink     No Comments
Track Back :


LDAP接続用コード

ちょいと、今日は覚え書きです。 弊社は、いろんなツールを提供しておりますが、 Directoryサーバも提供しております。 今回は、DirectoryサーバにJavaで接続するための手順を書きます。 LDAPへの接続用サンプルJavaコード(例外処理は除く)

下記のコードのように、LDAPへの接続にはホスト名・ポート番号を指定してください。
そして、dnはLDAPに接続し操作するユーザのDNとパスワードを指定します。
パラメータについては様々なパラメータが用意されているので別途 JavaDocを参照して ください。
LDAPサーバに接続が完了した後、DirContextクラスのインスタンスdirconを使用して
LDAPの検索・登録・変更・削除処理等を行う。

	host = "ldap_server.sun.com";
	port = "389";
	dn =   "cn=Directory Manager"; //DIR操作が可能な接続ユーザ
	password = "secret"; //パスワード

	Properties env = new Properties();
	env.put(DirContext.INITIAL_CONTEXT_FACTORY,
			"com.sun.jndi.ldap.LdapCtxFactory");
	// LDAP URLの生成
	env.put(DirContext.PROVIDER_URL, "ldap://" + host + ":" + port);
	if (dn != null) { // バインドユーザとパスワードの設定
		env.put(DirContext.SECURITY_PRINCIPAL, dn);
		env.put(DirContext.SECURITY_CREDENTIALS,password);
	}
	//接続タイムアウトの設定(3秒)
	env.put("com.sun.jndi.ldap.connect.timeout", "3000");

	// コネクションプールを有効化
	env.put("com.sun.jndi.ldap.connect.pool", "true");
	//アイドル接続のコネクションを自動的に削除する設定5分
	//本クラスでは明示的にclose()を呼び出していないため、
	//5分間コネクションプーリングされる。
	env.put("com.sun.jndi.connect.pool.timeout", "300000");
	//デバッグを全て
	env.put("com.sun.jndi.connect.pool.debug", "all");

	// LDAPサーバへの接続&Directory Contextの作成
	dircon = new InitialDirContext(env);

    ........(何らかの処理の記述)
    dircon.close();

Permalink     No Comments
Track Back :


NetBeans4.1でSun Java System WS6.1にデプロイ


さて、今日はちょっとしたTipsを御紹介します。
NetBeansで開発をしていてSun Java System Web Server 6.1(AppServer7.x)に
Webアプリケーションをデプロイしたいという方はいないでしょうか?

NetBeans4.1で正式にサポートされているサーバは下記です。

NetBeansサーバプラグインより

  • Java.net GlassFish Java EE 5 server (the Open Source Reference Implementation and production quality for Java EE 5 specification)
  • Sun Java System Application Server 8.1 (A free J2EE 1.4 compliant application server from Sun)
  • JBoss 4
  • WebLogic 9
  • WebSphere 6
私は、過去の案件でWeb Server6.1にデプロイをしたいという状況がありました。 その際、NetBeans4.1ではデフォルトでWS6.1が対応していなかった為、 自分でsun-web.xmlファイルを変更しました。 web/WEB-INFディレクトリ配下にsun-web.xmlファイルがあります。 これを、下記のようにsun-web-app_2_3-0.dtdベースに変更してみてください。 すると、NetBeans4.1でもWebServer6.1上に問題なくデプロイさせ動作させる ことができます。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 Servlet 2.3//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_3-0.dtd"> <sun-web-app> <context-root>/webapp</context-root> <class-loader delegate="true"/> <jsp-config> <property name="classdebuginfo" value="true"> <description>Enable debug info compilation in the generated servlet class</description> </property> <property name="mappedfile" value="true"> <description>Maintain a one-to-one correspondence between static content and the generated servlet class' java code</description> </property> </jsp-config> </sun-web-app>

Permalink     No Comments
Track Back :