2008年7月19日土曜日

Apache Commons HttpClient 3.1で「host parameter is null」

Apache Commons HttpClient 3.1でとあるサイトにアクセスすると,次のメッセージが表示されてエラーとなりました.

host parameter is null

少しググってみると,どうも下記のメソッドにスキーマを省いたURLを記述すると,そうなるとのことでした.

HttpMethod method = new GetMethod(url);

つまり,url=www.google.co.jpだと,上記のエラーが発生し,url=http://www.google.co.jpだと,成功します.

2008年7月8日火曜日

LDAPが起動失敗

LDAPを起動すると次のようなメッセージが表示され,起動に失敗するようになりました.

# /sbin/service ldap start
slapd の設定ファイルをチェック中: bdb_db_open: unclean shutdown detected; attempting recovery.
(中略)
slap_startup failed (test would succeed using the -u switch)
[失敗]
/var/lib/ldap に古いロックファイルがあるかもしれません [警告]


すぐに対処方法を記したページ[1]を見つけたので,メモしておきます.

# /usr/sbin/slapd_db_recover -v -h /var/lib/ldap

[1] More OpenLDAP recovery...
http://techarold.blogspot.com/2006/07/more-openldap-recovery.html

2008年6月18日水曜日

HTMLにおけるtitle要素の位置

title要素は,MIME型と文字コードを指定するmeta要素の後に記述する必要があるとのことです.次のような感じです.知らなかった...

<html>
<head>
<meta meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<title>直前のmeta要素以降に記さないと文字化けする可能性があるんだってさ</title>
</head>
<body>...</body>
</html>


[1] エンジニアのためのWebデザイン教室 第4回 Webデザインの基本を学ぶための環境について
http://itpro.nikkeibp.co.jp/article/COLUMN/20080221/294371/?ST=swd-design

2008年6月15日日曜日

Seasarでjava.lang.UnsupportedOperationException

Seasarを使ったプログラムを作成中に次のようなメッセージのエラーに遭遇してしまいました.

致命的: getInstanceDef
java.lang.UnsupportedOperationException: getInstanceDef


とあるActionクラスにHttpSessionオブジェクトのgetterを設けていたのですが,どうもそれがあると,上記のような症状(Seasarの不具合ではなく,単に自分の知識不足によるものだと思います)に遭遇するようです.当該クラスからgetterを削除すると問題は解消しました.

[1] [Seasar-user:2720] [S2JSF] HttpServletRequest の自動バインディングを行うとエラー
http://ml.seasar.org/archives/seasar-user/2005-October/002719.html

[2] ■[S2JSF]S2JSF1.1での例外発生について2
http://d.hatena.ne.jp/wataka/20060807#1154924242

2008年6月11日水曜日

プロキシ経由でHTTP接続する方法

Squeak上でプロキシを経由してHTTP接続する方法を以下にメモしておきます.

proxyHost := 'hogehoge'.
proxyPort := 8080.
"使用するプロキシサーバと除外するホストの設定"
HTTPSocket useProxyServerNamed: proxyHost port: proxyPort.
HTTPSocket addProxyException: 'hagehage'.

url := 'http://www.google.co.jp'.
HTTPSccket httpGet: url.

"プロキシサーバの解除と除外するホストの消去"
HTTPSocket removeProxyException: 'hagehage'.
HTTPSocket stopUsingProxyServer.


プロキシの設定は,消去しないと残ってしまうみたいなので,それを忘れないように注意すること.

[1] ど素人のためのど素人によるSquek入門
http://squeak.qp.land.to/wiki/

2008年5月29日木曜日

Squeak上でObserverパターンを適用する方法

Squeak上でObserverパターンを適用する方法を以下にメモしておきます.

Observerパターンは,あるオブジェクトの内容に関与するオブジェクトに,その内容の変化に応じて何らかの処理を行わせたいときに使われるデザインパターンです.

Observerパターンでは,Subjectという役割のクラス(あるオブジェクトが所属するクラス)とObserverという役割のクラス(あるオブジェクトの内容に関与するオブジェクトが所属するクラス)が登場します.Squeakでは,それら両方の役割を最上位のクラスであるObjectクラスに与えています.したがって,Objectクラスを継承したクラスは,その時点でどちらの役割も果たせる状態になっています.ただし,Objectクラスのメソッド名は,デザインパターンの資料[1],[2]で紹介されているメソッド名と異なっているので,その対応関係を以下に記しておきます.
  • Subject::attach <-> Object::addDependent:
    SubjectにObserverを追加
  • Subject::detach <-> Object::removeDependent:
    SubjectからObserverを削除
  • Subject::notify <-> Object::changed:
    SubjectがObserverに通知.
  • Observer::update <-> Object::update:
    SubjectがObserverに通知した際に呼び出されるメソッド.中身は空っぽ.
[1] Observer pattern
http://en.wikipedia.org/wiki/Observer_pattern

[2] オブジェクト指向における再利用のためのデザインパターン改訂版
Erick Gamma, Richard Helm, Ralph Johnson, John Vlissides: ソフトバンクパブリッシング, 1999

[3] 7. Squeak演習:Observerパターン
http://www.ogis-ri.co.jp/otc/hiroba/technical/Squeak5/S5-7-1.html
http://www.ogis-ri.co.jp/otc/hiroba/technical/Squeak5/S5-7-2.html

WebアプリケーションをJettyに配備する方法

WebアプリケーションをJettyに配備する方法を以下にメモしておきます.

import org.mortbay.jetty.Server;
import org.mortbay.jetty.webapp.WebAppContext;

public class Test {

    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);

        WebAppContext context = new WebAppContext();
        context.setContextPath("/test");
        context.setResourceBase(".");
        server.setHandler(context);

        server.start();
    }

}


「.」に対応するディレクトリは以下のような構成になっています.

.
+- WEB-INF
   +- classes
   +- web.xml