Recent Entries
Recent Comments
OZACC.blog: Java Category Archive

2009年4月21日

Java | JJUG Cross Community Conference

JJUG Cross Community Conference 2009 Spring

今日は早起きして行ってきました。開始時間を間違えて早く着いてしまいました。

今年はもう何でも「クラウド」って付けておけばいいんだなと思いました。

MapReduceについて全く分かってなかったので、Hadoopのセッションはとても役に立ちました。

Posted by otsuka : 23:26 | Comment (0) | Trackback (0)

2008年7月23日

Java | YouTube API その後

OZACC.blog: YouTube APIの刷新

前に仕事で作ってたYouTubeライブラリを修正しなければ。まだ一年あるからと思っていると、あっという間にまた夏が来てしまうので今月中にやる。

去年の9月にこんなことを書いていて、「今月中」どころか結局保証期限まで残り1ヶ月になってようやく着手した。

その間にGoogle YouTube APIの日本語ドキュメントも整備され、Google Data APIのバージョンも1.20になり、開発しやすくなっていた。おかげで1日も掛からずライブラリを修正できた。

なぜYouTubeのAPIにJavaMailが必要なのか未だに分からないが。

Posted by otsuka : 00:49 | Comment (0) | Trackback (0)

2008年2月19日

Java | log5j

log5j - Google Code

今更log4j? という気はしないでもないけど、提供されている機能はとても便利だと思う。

そんな便利な機能よりも素敵なネーミングにやられた。この発想は今までなかった。

Posted by otsuka : 19:21 | Comment (0) | Trackback (0)

2007年11月16日

Java | FLVとURLRewriteFilterとStruts2

if url is for an flv it must have .flv extension and take no parameters

動的に生成したFLVファイルをサーバから返して、Flashで再生しようとすると上のようなエラーが出た。訳すと「FLVを示すURLなら拡張子は.flvじゃないといけません。また、URLにパラメータが付いててもダメです」。

この規則を知らなかったので、「http://example.com/path/to/flv.do?name=value」みたいなURLで、何故再生されないんだろうと孤軍奮闘してました。
で、この規則を知って回避方法があるんじゃないかといろいろとトライしていたのだけど、結局URLRewriteFilterを使うことに。「http://example.com/path/to/value.flv」といった形のURLを上のパラメータが付いた形のURLにリライト。これでFlashPlayerは騙せる。

ところが今度はリライトしてるのにNotFoundが出るようになった。Struts2とURLRewriteFilterが相性悪いのかと思ってググってみると、ズバリそうだった。
Forward not working with Struts 2...

Struts2はサーブレットではなくフィルターで処理を行うので、web.xmlの<filter-mapping>で<dispatcher>を指定する必要があるらしい。<dispatcher>なんて今まで使ったこと無かったので、このページでお勉強。
デフォルトではリクエストが来たときにしかフィルターを適用しなので、Struts2の<filter-maaping>を以下のように設定すればよい。

<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>REQUEST</dispatcher>
<1/filter-mapping>
Posted by otsuka : 03:41 | Comment (0) | Trackback (0)

2007年11月14日

Java | Struts2 Type Conversion

Type Conversion

ClassName-conversion.properties ファイルを用いてパラメータの型変換を行う場合、そのパラメータに該当するプロパティにgetterとsetterの両方がないと変換が行われない。setterだけではダメ。

ということに気付くまでに1時間以上。人生について考えさせられた。

Posted by otsuka : 23:38 | Comment (0) | Trackback (0)

Java | Log4j から LogBack

commons-logging + log4j な環境から slf4j + logback への移行メモ。

削除
・commons-logging.jar
・log4j.jar

追加
・slf4j-api.jar
・jcl104-over-slf4j.jar
・log4j-over-slf4j.jar (これは要らないかも)
・logback-core.jar
・logback-classic.jar

設定
・Log4jのAppenderにあったThresholdパラメータは、LogBackではThresholdFilterとして実装されている。

TODO
・LogBackのSMTPAppenderの文字コード調査。

Posted by otsuka : 19:25 | Comment (0) | Trackback (0)

Java | mod_jk or mod_proxy_ajp

Tomcat FAQ - Connectors

Which connector: mod_jserv, JK, JK2, mod_webapp or mod_proxy?

mod_jk is great and should be used for production. It is still under active development and also works for the apache 2.X series for cases where you do not want to use mod_proxy_ajp.

Apache2.2 + Tomcat 6の連携にmod_proxy_ajpを使っていたのだけれど、どうも調子が悪い。Apacheのエラーログに
The timeout specified has expired: ajp_ilink_receive() can't receive header
と残っていたが、何が原因なのか分からない。ProxyPassのパラメータをいじって様子を見ているが、もう一回同じエラーが起こったらmod_jkを使うことにする。いや、多分明日にはmod_jkに変更してると思う。

mod_jkの方が細かい設定ができるし。mod_proxy_ajpでJkUnMountの機能はどう実現すればいい?

Posted by otsuka : 01:34 | Comment (3) | Trackback (0)

2007年10月26日

Java | Red5 再び

またRed5なお仕事をすることになったので、前回使った0.6.2からsvn trunkにバージョンアップして環境を構築。すぐにできるべと思っていたら、0.6.2からは大きく変わっていて、まずServlet API 2.5に依存していた。このせいで初めてTomcat 6をインストール。
とか何とかもういろいろあって、動かすまでに丸一日かかった。もう書くのも面倒くさい。疲れた。お陰で金八先生もライブで見られなかったし。ドキュメントなさ過ぎ。

0.6.2の時に出来なかったTomcatのシャットダウンができるようになっている点が嬉しい。(0.6.2の時はTomcatのプロセスをkillするしかなかった)。

Log4jとLogbackとSLF4Jの関係が分からない。この辺りのjarファイルがたくさん入っているのだが。

Posted by otsuka : 02:10 | Comment (0) | Trackback (0)

2007年10月24日

Java | S2JDBC

S2JDBC

via ひがやすをblog

ドキュメントに一通り目を通した。すばらしいデザインのAPI。

特に気に入ったのが「検索条件」で説明されているSimpleWhereクラスを使ってHibernateで言うところのCriteriaオブジェクトを組み立てるところ。「valueがnullの時は追加されません。」、「valuesの配列の長さが0の時は追加されません。 」という思いやりのお陰で入力値がnullじゃなければという冗長な条件節を省ける点がユニークで便利な機能だと思う。要件がピタリと合えば、相当楽チンになるはず。

ただ書いていて気付いたけど、こういう場合に僕は if (StringUtils.isNotBlank(departmentName)) と、nullだけじゃなくて空文字列やホワイトスペースだけの文字列も検索条件から外すケースが多いので、SimpleWhereクラスのようなnullチェックだけだと足りないかも知れない。

複雑なSQLが必要なときにはS2Dao使った方が良さそうに思うけど、Daoインターフェースを作るのが面倒くさい位のものであれば、ここで書かれているようにサービスクラスのメソッド内でサクッと実装しちゃうのが便利そう。
こうするとデータアクセス層を独立させたレイヤー構造は崩れちゃうけど、publicプロパティにしてもお堅いJavaの暗黙の縛りを解いて、開発効率を上げようという姿勢はいいと思う。

Seasar2では、トラブリにくくするために、いたずらに機能を増やすのではなく、トラブリやすい機能は意図的に削っています。
こういった潔さもGood。

Posted by otsuka : 01:15 | Comment (2) | Trackback (0)

2007年9月13日

Java | Ivy

Home | Ivy

Javaの依存ライブラリ管理ツール。
検索してもマイコミの記事「Jayasoft、ライブラリの依存関係を管理、Ivy 1.3 公開ほか」くらいしか出てこなかったので、人気ないのかも。

Red5のtrunkで使われるようになっていたので調べてみたけど、まあ普通はMaven使うよねー。

Posted by otsuka : 21:07 | Comment (0) | Trackback (0)

2007年9月 7日

Java | JMX

Java Management Extensions (JMX)

JMXについて勉強したいのだが、Java 5でJava SEにも取り込まれたにも関わらずまだ日本語の書籍はなかった。洋書も4~5年前に出たものばかり。
まずは上のページに目を通してみよう。PDFだったら一気にプリントして読めたのに。

その他、参考になりそうなJMX解説ページ。

Posted by otsuka : 02:24 | Comment (0) | Trackback (0)

2007年8月27日

Java | Log4J SMTPAppender 日本語対応版

3年弱前にLog4J-1.2.8のSMTPAppender日本語対応版を作ったけど、先日バージョン1.2.14にも手を入れたので使ってみたい人はどうぞ。


http://spring-ext.sourceforge.jp/maven/log4j/jars/log4j-ja-1.2.14.jar

Posted by otsuka : 11:45 | Comment (0) | Trackback (0)

2007年8月16日

Java | Struts2 ParametersInterceptorのエラーログ

[ERROR] ( com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters ) ParametersInterceptor - [setParameters]: Unexpected Exception caught setting 'noCacheIE' on 'ExampleAction: Error setting expression 'noCache' with value '[Ljava.lang.String;@4c03d4'

Struts2のActionに対してのリクエストで、Actionクラスに定義されていないプロパティ名のリクエストパラメータがあった場合に上記のようなエラーログが出てしまう。GETリクエストでキャッシュ防止用のパラメータとかを付けただけでもエラーログが出てしまうので困ってしまう。
こういう場合はサーバ側で必要なくても受け取り得る全てのプロパティ(のsetter)をActionクラスに定義しなければいけないのか?

こんなのエラーログ吐かなくてもいいじゃんと思うけど。でも開発時には役立つからDEBUGレベルのログならいい。

Posted by otsuka : 21:48 | Comment (0) | Trackback (0)

2007年7月12日

Java | Struts2 バリデーションエラーの有無

Struts2ではViewにJSPを使っているのだけど、<s:fielderror /> タグが idcssClass 属性を無視して <ul> タグ付きでバリデーション結果のエラーメッセージを出力してしまう。スタイルシートでエラーメッセージを目立たせるために、<s:fielderror /><div> タグをラップして、それにスタイルを設定するやり方で何とか対処した。

が、今度はエラーがない時でもその <div> タグが出力されてしまうせいで、ちょっと表示がおかしくなってしまう。エラーのあるなしを判断しないといけないのだが、そのやり方が分からない。Struts1では <logic:messagesPresent> というtaglibで条件分岐できたけど、Struts2でのそれっぽいやり方が分からない。
結局ActionSupportクラスに getFieldErrors() というメソッドがあったので、

<c:if test="${fn:length(fieldErrors) gt 0}">
  <div class="fielderror"><s:fielderror /></div>
</c:if>
ってなJSPコードで対応できた。他にもっとダイレクトな方法がありそう。

<s:fielderror /> はフィールドを指定しても <ul タグを吐いてしまうのでダメな感じ。Strutsタグはテーマとかテンプレートとかを自作しないと、標準の状態では痒いところに手が届かないな。
今回ソースも追おうとしたけど、apacheやopensymphonyにリポジトリが文才している状況が引っかかる。個々のライブラリを組み合わせる形でフレームワークが成り立つのはメリットなのかも知れないけど。

Posted by otsuka : 20:00 | Comment (0) | Trackback (0)

2007年7月10日

Java | Struts2 入力フォームの確認画面

個人事業主のつぶやき | Struts2 Sample と Spring 続報

さて、Struts1では、struts-configでactionのscopeを決めることが出来る。
私は(良いやり方か分からないが)こういう確認画面を挟むような画面はsession="scope"にして、作ることが多い。
こうすると、確認画面にhiddenを書くことが無くなるため、
かなりの労力軽減になる。

それをStruts2で実現する方法が見付からなかった。
そのため、一時的にformをsessionに詰めるということをしている。
(confirm,submitの1行目がそれにあたる。)

こうやるしかないのか?ちょっと分からない。

Struts2で、入力フォーム→確認画面→完了画面のフローを実装する場合のベストプラクティスを探していたんだけど、Struts2のサンプルアプリの中にもこのフローを持つものがなかった。バンドルされているインターセプターのドキュメントにも一通り目を通してみたけど、ズバリこれを使えみたいなものはなかった。

上記ページのようにSessionに直接入力内容オブジェクトを保持するしかないのだろうか。何となくスマートな感じがしなくて、僕も「こうやるしかないのか?」とちょっと納得いかない気分。
Sessionを使わず、<s:hidden>タグと<s:token>タグでやる手もあるが、<s:hidden>タグではStruts1の<html:hidden write="true">のようにwrite属性がサポートされていないので面倒くさい。


関係ないけど、Execute and Wait Interceptorはオシャレ。

Posted by otsuka : 18:32 | Comment (5) | Trackback (0)

2007年7月 9日

Java | Struts2 拡張子をhtmlにしていると…

Struts Actionの拡張子を

<constant name="struts.action.extension" value="html">
と設定して「.html」にしていたんだけど、この設定はAjaxタグを使おうとする場合にNGだということが分かった。

<s:datetimepickr>を使うとStrutsがカレンダーのテンプレートファイルを読もうとするのだけど、そのテンプレートファイルの拡張子も「.html」の為、StrutsがAction実行だと勘違いしてテンプレートが見つからないヨというエラーを吐いていた。

「.html」を使わない方がいいとなると、結局また「.do」か、それとも「.action」にするか。「.cgi」なんて拡張子も新鮮な感じがする。そういえば、拡張子なしでAction実行するにはどうすればいいんだろう。Struts1だと、/exec/action_name みたいな呼び出し方法があったけど。

このエラー原因に気付くまでにまた大分時間を喰ってしまったが、ようやく表示できたDojoのカレンダーはあまり格好よくなかった。どこまでカスタマイズできるか、見極めるのにまた時間を要してしまいそうだ。

Posted by otsuka : 22:40 | Comment (3) | Trackback (0)

2007年7月 6日

Java | Map-backed ActionFormをStruts2で

4.3.3 Map-backed ActionForms

Struts 1.xにはMap-backed ActionFormsという仕組みがあり、動的に生成される複数の入力フィールドの送信に対応できたけど、これと同じようなことをStruts 2で実現する方法が分からない。

例えばブログエントリーに対する未チェックのコメント一覧があったとして、一覧の各コメントに公開または削除のラジオボタンがあり、どちらにチェックをしていって最後に送信すると各コメントが公開されるか削除されるかする。この場合、各コメントのIDとラジオボタンの値が取得したい。

Struts 1でできるのだから、きっと何か方法はあるはず。
誰かご存じでしたら教えてくださいー。

[追記]
ひとつ方法は見つけた。いちいちMapに格納されるクラスを作らなければいけないのが面倒くさい。
http://struts.apache.org/2.0.8/docs/type-conversion.html
http://forums.opensymphony.com/thread.jspa?messageID=9960⛨

The reason you need tha intermediate object (Answer) is because of a deffeciency in WebWork. This is getting fixed in 2.2 so you could just have a map of Integer -> String (or whatever).
とあるけど、intermediate classなしでもできるのかな?

[更に追記]
できた。Actionクラス-conversion.propertiesファイルで

Key_xxx = java.lang.Integer
Element_xxx = java.lang.String
を設定。ActionクラスではMap<Intger, String>のxxxプロパティを持つ。HTMLフォームではname="xxx[123]"といった属性をもつinput要素を作成する。

Posted by otsuka : 02:08 | Comment (0) | Trackback (0)

2007年7月 5日

Java | Struts2 はじめました

今取り組んでいるプロジェクトの納期に多少余裕があるので、Struts2を使ってみることにした。
Strutsとは名ばかりで、Struts 1.xとは別モノ。懐かしのWebWorkがベースになっていることを初めて知った。

そして使い方がさっぱり分かりません。参考書もまだ売ってないし、日本語の情報もちょっとずつ散在してるし、本家のドキュメントもWikiになっててどこから読んでいいのかよく分からない。
とりあえずHello Worldまでは出力できた。「.action」という拡張子はどうやったら変えられる?

Posted by otsuka : 18:36 | Comment (2) | Trackback (0)

2007年7月 3日

Java | アップロードされたファイル名のUnicode正規化

先日まで知らなかったのだが、Unicodeでは濁点や半濁点の付いた文字、例えば「が」を表すのに二種類の方法があるそうだ。NFCとかNFDとか詳しくはこの辺りを読んでもらうとして、一般的にはNFCが使われているのだがMacOS XのファイルシステムではNFDで正規化されたUnicodeが使われている

で、時々この違いが問題になる。例えばWebでアップロードされたファイルのファイル名を扱う場合。Strutsなんか使っちゃって、FormFile#getFileName() で取得するファイル名はMacからアップロードされた場合に文字化けしてしまう可能性がある。

そんなときに使うのが、Java 6から導入された java.text.Normalizer。詳しくは以下のページを参照。Java SE 6 じゃじゃ馬ならし Unicode の正規化

要約すると、

String fileName = Normalizer.normalize(formFile.getFileName(), Normalizer.Form.NFC);
こうしておかないとヤバいかもよってこと。

Posted by otsuka : 15:40 | Comment (0) | Trackback (0)

2007年6月29日

Java | Terracotta

【ハウツー】JVMレベルでクラスタリングを可能に - OpenTerracotta (1) JVMレベルのクラスタリングって何? | エンタープライズ | マイコミジャーナル

Red5のMLを読んでいると、Terracotta、Terracotta…とよく出てくるので、なんで植木鉢が関係するんだろう?、そういう言い回しが英語にあるのかなと思っていたら、TerracottaというJavaのプロダクトがあった。

検索してもこの記事以外に日本語の情報がほとんどないけど、このプロダクトすごいんじゃないか? 用途がちょいと違う気がするけどMemcached使うよりも良さそうな雰囲気。今後要調査。

Posted by otsuka : 15:58 | Comment (0) | Trackback (0)

2007年6月21日

Java | 一定時間で削除されるCollection実装

WeakHashMap (Java 2 Platform SE 5.0)

キーのリファレンス参照がなくなると、そのMapエントリーが自動的に削除されるWeakHashMapというMap実装があるけど、エントリーを追加してから3分経ったら自動的に削除されるようなCollection実装はないですか?

追加した日時を持っておいて、スレッド回して管理する実装を作るしかないですか?

Posted by otsuka : 22:01 | Comment (0) | Trackback (0)

2007年4月25日

Java | Eclipseプラグイン - Explore It

パッケージ・エクスプローラ上のファイルやフォルダのコンテキストメニューからWindowsのExplorerを起動するEclipseプラグイン「Easy Explorer」を昔から愛用しているのだけど、FlexBuilderでは使えなかったので初めてプラグインを自作してみました。

Easy Explorerのソースを参考に、FlexBuilderでも使える拡張ポイントだけを使用し、さらにEasy Explorerにはない機能を設定項目に加えました。Windows版のEclipse 3.1以降とFlexBuilder 2.0以降で使えると思います。Java 6で動かしてないとダメかも。
更新サイトURLは http://www.strippers.jp/eclipse/updates です。


Eclipseプラグインの構造がまだ理解できてないんですが、本格的なEclipseプラグインを作ることはかなり大変だということが分かりました。

Posted by otsuka : 01:59 | Comment (0) | Trackback (0)

2007年2月22日

Java | Timerクラス

Timer (Java 2 Platform SE 5.0)

各 Timer オブジェクトと対応するのは、タイマーのタスクをすべて連続して実行するために使用される、単一のバックグラウンドスレッドです。タイマータスクは迅速に実行される必要があります。タイマータスクの完了に時間がかかりすぎると、タイマーのタスク実行スレッドが「占有」されます。これにより後続のタスクの実行が遅れ、違反したタスクの完了時 (完了した場合) に、立て続けに「まとめて」実行されることになります。

JavaのTimerクラスの挙動について完全に勘違いしていて、1つのTimerインスタンスに対して登録された複数のTimerTaskでも独立して実行されると思い込んでいた。
実際は、ひとつのTimerTaskが遅延したら、他のTimerTaskの実行が遅れてしまう。

ここに詳しく書かれてる。(SDCへのログインが必要)
http://sdc.sun.co.jp/java/private/techtips/2000/tt0530.html#2

Posted by otsuka : 22:15 | Comment (0) | Trackback (0)

2007年2月13日

Java | Java 6 vs 1.4

昨日、Javaで作成している画像処理プログラムで、JVM 1.6と1.4の簡単なパフォーマンステストを行ってみた。Java 2DとImageIOでの処理が主なものだけど、JVM 1.6では1.4に比べて150%程度の速度向上が見られた。
ここまで差が出るとは予想していなかっただけにビックリ。それだけ。

Posted by otsuka : 02:34 | Comment (0) | Trackback (0)

2006年12月25日

Java | Tomcat POSTサイズの上限

Enjoy�Study

server.xmlのConnectorに、maxPostSizeを追加して対処しました。

Tomcatにこんな制限があったことを今日初めて知った。

Posted by otsuka : 23:17 | Comment (0) | Trackback (0)

2006年12月13日

Java | Java 6でパフォーマンスアップ

Java SE 6: Top Ten | Danny Coward's Sun Weblog

Double digit improvements in performance, client and server.

早速Java 6をPCにインストールしてみた。Eclipseが速くなった気がする。気のせい? いや、速くなってる。Tomcatの起動も速くなってる。測ってはないけど。

Flexのmxmlcでのコンパイルも速くなってるとかなってないとか。

Posted by otsuka : 14:44 | Comment (0) | Trackback (0)

2006年12月12日

Java | Java SE 6

Java Platform, Standard Edition 6 Release

もう出たんだ。Java 5を仕事で使う間もなく、6になってしまった。

Posted by otsuka : 11:09 | Comment (0) | Trackback (0)

2006年11月29日

Java | Trove

GNU Trove: High performance collections for Java.

ONJava.com -- Enhance Collection Performance with this Treasure Trove

via 新・たけぞう瀕死の日記

高速なコレクションAPI。初めて知った。ONJava.comの記事を見ると、記事が古いからアレだけどJDKのものよりかなり早い。

Posted by otsuka : 00:36 | Comment (0) | Trackback (0)

2006年11月12日

Java | Seasarカンファレンス

1コマ目から参加してきました。

新宿を過ぎたあたりからウンチしたくなって、市ヶ谷から早歩きで法政大学を目指す。春のSeasarカンファレンスと同じ会場だったので、場所はバッチリ分かる。何とかタワーに入って、1階のトイレに駆け込んだのだが、何かの資格試験をやっていたせいかおっちゃんで大混雑。即座に1階のトイレは諦め、会場となる26階のトイレを目指す。
こんな時に限ってエレベーターがなかなか来ない。ようやく来たエレベータは26階に向かって急上昇。じっとはしていられず、エレベータの中でもモジモジ。やっとエレベータが止まった、と思ったらそこは25階。「誰だよ、25階で降りる奴は!!」と心の中でいちゃもんをつけ、ようやく着いた26階で扉が空いたら受付も無視して、トイレへ急ぐ。
トイレ前でtakaiさんと出会う。久しぶりですと挨拶し、「どうですか、調子は?」と訊かれたので、「うーん、ウンチしたい」と率直かつ大変失礼な返答をしてしまった。ごめんなさい。

それ以降、スッキリとしたお腹でセッションを拝聴し、ウンと勉強させていただきました。セッションを聴いてる側からアイデアが浮かんできて、今はその制作に対するモチベーションが高まってます。
ちょっと用があったので残念ながら懇親会には出られなかったけど、会場でビールをくすねてきたので、晩ご飯の時に飲みました。ごめんなさい。

Posted by otsuka : 22:38 | Comment (2) | Trackback (0)

Java | S2ファミリーの名称

ひがやすを blog Seasar2.4開発秘話

むぅ、S2ファミリーを普段から追っているわけではないので、もはやプロダクトの名前とその内容を覚えきれなくなってしまった。。。

「Seasar2.3、S2Dao、S2JSFの時と比べて覚えなければいけないプロダクト名が2倍になった」感じだ。
味気ないけど、S2Daoのようにプロダクトの意味を含んでいる名称ならまだ覚えやすい。沖縄特有の固有名詞が付くと、英語以上に韻に馴染みがないし、またプロダクト内容を連想させるものでもないので、これ以上増えてくると大変だ。
明日はしっかり勉強させてもらおう。

Posted by otsuka : 00:11 | Comment (0) | Trackback (0)

2006年11月 6日

Java | Javaのメモリ管理

苦手な分野だったけど、調べる必要性に迫られていたところ、ある方からチャットで分かりやすく説明してもらえた。僕の無知をさらけ出してしまい、「仕方ねえなコイツ」くらいな感じだったのでしょうか、基本からレクチャーしてもらえました。

せっかく教わったので、しっかり自分のものにするために復習します。
Java Pressと、Javaのヒープ・メモリ管理の仕組みを熟読しておきます。

Posted by otsuka : 16:38 | Comment (0) | Trackback (0)

2006年9月13日

Java | ImageIO GIFプラグイン

プログラミングと開発者のためのCodeZine:JavaにおけるGIFファイルの取り扱い(Java, GIF, Image I/O)

FreeHEP Java Libraryは、高エネルギー物理学のためのライブラリで、ライセンスはLGPLとなっています。現在、2.x系の開発が進められているようですが、成果物の供給がMavenに依存しているため、手軽に使える1.2.2を使います。freehep-v1.2.2.zipをダウンロードし、その中に含まれるfreehep-base.jar、freehep-graphics2d.jar、freehep-graphicsio.jar、freehep-graphicsio-gif.jarの4ファイルを取り出してください。

FreeHEPとやらを使えば、ImageIO経由でGIFフォーマットの書き出しができるらしい。

Posted by otsuka : 15:43 | Comment (0) | Trackback (0)

2006年9月 6日

Java | Maven Repository

Maven Repository: Search/Browse/Explore

すばらしい。

Posted by otsuka : 19:13 | Comment (0) | Trackback (0)

2006年9月 1日

Java | Maven Repo Search復活

今更だろうけど、ずっと更新されないままになっていたMaven Repo Searchのデータを更新しました。

クローラーを、勉強を兼ねてPhtyonで作りました。どうせやるんならMaven 2に対応させろ、と思う方もいるかも知れませんが、まあ追々。

Posted by otsuka : 00:20 | Comment (0) | Trackback (0)

2006年8月15日

Java | DelayCloseIndexSearcher

[#LUCENE-445] Contrib.: Thread-safe DelayCloseIndexSearcher. - ASF JIRA

Lucene検索でToo many open filesエラーが起こるので、上記のDelayCloseIndexSearcherを導入してみた。これは「Lucene入門」にも書かれていたマルチスレッド下での検索パフォーマンスを上げるための方法。

Jmeterを使ってWebサイト経由で検索の負荷テストを行ったところ、IndexSeacherインスタンスを検索の都度生成する方式だと、10スレッドからの同時アクセスを超えた辺りでエラーが起こるようになってきたが、DelayCloseIndexSearcherを使ってIndexSearcherインスタンスを共有する方式だと、このエラーは起こらなかった。

インデックスファイルのフォーマットや大きさ、更新頻度など色々な要因がありそうなので一概には言えないけど、WebサイトでLuceneを用いた検索機能を提供するならDelayCloseIndexSearcher(か同等の仕組み)は導入しておいた方が良さそうだ。

Posted by otsuka : 00:48 | Comment (0) | Trackback (0)

2006年8月14日

Java | Leuene メモ

あ: Lucene 2.0.0

古いAPIが削除されたので、JapaneseAnalyzerがコンパイルできなくなった。まあ簡単に対応できるけど。

TokenFilterのコンストラクタが変わったので、その継承クラスを直すのと、demo使うならField周りだけ。

メモ。

他にもLucene関連で気になるエントリーが。

Posted by otsuka : 18:05 | Comment (0) | Trackback (0)

2006年8月 4日

Java | TomcatでJSPディレクティブの余計な改行を出力しない方法

アガテナ - TomcatでJSPディレクティブの余計な改行を出力しない方法

JSPで出力されたHTMLの先頭で、JSPディレクティブの場所の部分に余計な改行が出力されて、気持ち悪さを感じておりましたが、conf/web.xmlのJSPサーブレットでtrimSpacesで設定できることがわかりました。

知らなかった。僕も改行が出力されるのが嫌いだったので、複数のディレクティブを入れる場合はできるだけ改行を入れないようにしていたけど(後から読みにくくなるが)、これですっきりと書けそう。

ちなみにResinの場合、JSPディレクティブの後に「\」を入れると改行の出力を抑制してくれます。

Posted by otsuka : 19:09 | Comment (0) | Trackback (0)

2006年7月 4日

Java | Rad Upload

Rad Upload :: HTTP File Upload With Drag and Drop

ブラウザ上にドラッグ&ドロップでファイルをアップロードできるJavaアプレット。
クライアントサイドでのファイル圧縮まで実装されているのはGOOD。

Posted by otsuka : 09:34 | Comment (0) | Trackback (0)

2006年6月 2日

2006年5月16日

Java | S2DaoでOracleのヒント

AnsweringYourQuestions - SeasarWiki

Oracle なら「/*+ ヒント[ヒント] */」ではなく「--+ ヒント [ヒント]」を指定すればよかったはずです

外部SQLファイルでヒントを埋め込んだのに、そのヒント指定のコメント部分が丸ごとなくなってる・・・と、ググってみたら、ちゃんと本家のWikiに書いてありました。

なるほど、「--+ ヒント」のようなコメント形式でもヒントとして使えるんですね。
ヒントが使えるのも、S2DaoのようにSQLが自由に書けるというメリットのお陰です。

Posted by otsuka : 15:22 | Comment (0) | Trackback (0)

Java | Seasarカンファレンス

もう一昨日ですね。参加してきました。メインセッションはShotさんと和田さんの二つに出席、あとはコミッタブースでミニセッションを聴いていました。概要の説明を中心とするメインセッションよりは、コードや動くものを見せながらのミニセッションの方が僕にとっては面白かったです。コミッターの方々が「○○のコミッター」と記載された名札を首から提げていてくれたので、興味あるプロダクトの開発者を容易に見つけることができました。

コミッタブースでうろうろしていたところ、takaiさんに久々に再会。僕が書いた先日のエントリーを読み、SIMPURE Nを買ったそうですが、ソフト面がかなり使いにくくダメダメ携帯であると力説してくれました。(takaiさんのブログURLを教えてください)
そしてtakaiさんと話している横で、あのセレブエンジニアが個人会員10口の申し込みをして、皆の注目を浴びてました。僕はそのセレブの後で「一口でもいいですか…」と一応申し込んでおきました。セレブがセレブたる所以を目の当たりにしました。

社内ではJavaやPHPの話をする人がいないので、開発者と話ができたり、新しい刺激を受けたりできるこういう場は僕にとっては貴重。あっという間の五時間でした。

Posted by otsuka : 02:32 | Comment (2) | Trackback (0)

2006年5月 8日

Java | Seasar HOT Deploy

ひがやすを blog HOT deploy完成

約10ヶ月前に開発のターンアラウンドタイムというエントリーを書いたけど、このターンアラウンドタイムを短くするための機能がついにSeasarに実装された。文字通り「これは、Javaの開発生産性を飛躍的に向上させるブレークスルーだ」と思う。

Javaでの開発はいちいちAPサーバをリロードしたり、デプロイするのに時間掛かって面倒くせーなーと思っていたけど、これで相当効率上がるのではないだろうか。まだ詳細を追ってないけど。

Posted by otsuka : 19:09 | Comment (0) | Trackback (0)

2006年4月25日

Java | 関口宏司氏のLucene

国産のLucene本が出るみたい。Luceneに関する書籍はManningの「Lucene in Action」以来かな? 著者名でググってみたら著者の関口氏によるLuceneについてのブログが見つかりました。マニアックです。

関口氏も書かれているように日本ではNamazuの方が圧倒的に人気がありますね。先日アルファリリースされたPHPのZend Frameworkでは、フレームワークが提供する検索の仕組みとしてわざわざJavaのLuceneを呼ぶようになってました。このことだけでも海外での人気は高そうな気がします。

Lucene + Lucene-ja + Senの組み合わせは、Lucene 1.4系でしか動かないのかと思ってましたが、このエントリーを読むと最新の1.9系と組み合わせてますね。バージョンアップにトライしてみます。

Posted by otsuka : 16:37 | Comment (0) | Trackback (0)

2006年4月11日

Java | Struts「キャンセルボタンによる検証無効化機能」

【Jakarta/Apacheウォッチ】第25回 リリース間近!アーキテクチャを一新したStruts 1.3:ITpro

しかし,キャンセルボタンを想定していないアクションでは通常は isCancelled メソッドを呼び出すことはせず,入力検証が動作しているものとして処理を実装してしまう。このとき悪意あるユーザーがフォームの値と共に,キャンセルボタンを押したのと同等の特定のキーと値をHTTPリクエストパラメータとして送信した場合,入力値検証が行われずにアクションが実行されてしまうことなる。Strutsクラッシックユーザーは注意していただきたい。

全然知らなかった。。。

幸い最近のStruts使ったプロジェクトでは大事に至る箇所はなかったけど、以前に使ったものはどうだろう。

Posted by otsuka : 13:27 | Comment (2) | Trackback (0)

2006年4月 7日

Java | Maven Repo Searchは更新されてません

Maven 1.x用のMaven Repo Searchですが、かなり前からデータが更新できていない状態です。修繕を試みているのですが、まだ直ってません。新しいバージョンのjarファイルなどが反映されていないのでご注意ください。

Posted by otsuka : 17:57 | Comment (0) | Trackback (0)

2006年3月28日

Java | James君!

James君!~目次

via オレンジニュース

これはすごい。一冊の本にしてもいいくらい突っ込んで書かれています。

以前にメール関連の案件があって、James唯一の書籍を買ったりして調べたけど、その案件は流れてしまい、Jamesはなかなか使う機会がない。
次に立てるサーバにはMTAにJamesを入れてみようかな。

Posted by otsuka : 21:25 | Comment (0) | Trackback (0)

2006年3月 2日

Java | s2dao用のSQLファイルを開くeclipseプラグイン

s2dao - PukiWiki

スバラシイ!

SQLファイルがない場合は「対応するSQLファイルを作成する」という選択肢が出て、使用するデータベース(またはデフォルト)を選択するラジオボタンのウィザードが表示され、OK押すとSQLファイルが作成される。
なんて感じで機能追加されないかなあ、と書いてみる。

Posted by otsuka : 11:07 | Comment (0) | Trackback (0)

2006年2月 9日

Java | Maven2のTipsを集めるWiki

Maven2のTipsを集めるWiki - CookBook

まだMaven2を使っていないけど、MEMO。

Posted by otsuka : 19:19 | Comment (0) | Trackback (0)

2006年1月17日

Java | Skype API for Java

FrontPage - Skype API for Java

MEMO。ステキです。

Posted by otsuka : 12:42 | Comment (0) | Trackback (0)

2006年1月 4日

Java | Subclipseのコミットログのテンプレート

Heretic Programmer(2006-01-03) プロジェクトのルートでtsvn:logtemplateプロパティを設定することにより、コミットログのテンプレートを指定できる。プロジェクトでコミットログに残したい情報を決めるときに便利な機能。

MEMO。

Posted by otsuka : 12:13 | Comment (0) | Trackback (0)

2005年12月27日

Java | clipseHTMLEditor、StrutsIDE、FacesIDEバージョンアップ

新・たけぞう瀕死の日記

毎度便利なツールをありがとうございます。

Struts IDEはバージョンアップすると、フローのレイアウトがデフォルト状態に戻ってしまうのがちょっと辛いところ。
アクションが増えてくると、フローの中でアイコンを探すのが大変になるので、アウトラインのアクションをクリックすると、フローの中のアクションアイコンがハイライトされるような機能があると便利ですね。

Posted by otsuka : 01:13 | Comment (0) | Trackback (0)

2005年12月16日

Java | Maven 2.x Plug-in for Eclipse

Maven 2.x Plug-in for Eclipse

MEMO。

Posted by otsuka : 00:12

2005年11月23日

Java | Apache-Tomcat連携時のURL文字化け

The Apache Tomcat Connector - Reference Guide

JkOptions ForwardURIEscaped, the forwarded URI is escaped and Tomcat (since 3.3 rc2) will do the decoding part.

http://d.hatena.ne.jp/keyword/%a5%bb%a5%c3%a5%af%a5%b9%a5%d5%a5%ec%a5%f3%a5%c9
のようにURLの一部に(URLエンコードした)日本語を含むものをApache経由でTomcatに渡すと、日本語がひどく文字化けして困ったことになっていた。?name=valueのようなGETパラメータとしてなら問題なかったのだけど。

で、mod_jkのドキュメントを読んでいたら、ForwardURIEscapedという設定オプションがあり、これを試しに設定してみたら文字化けせずにTomcatに日本語を含むURLが渡るようになった。
以前にもこれを試したのだけど、その時は解決に至らなかった。今日気づいたのだけど、JkMountやJkUnMountは<VirtualHost>以下で設定できるけど、JkOptionsはhttp.confのグローバル領域にないとダメみたい。以前は<VirtualHost>以下に設定していたのだろう。

Posted by otsuka : 20:45 | Comment (0) | Trackback (0)

2005年11月18日

Java | どうする、Maven Repo Search 2

ま!(2005-11-07)

http://maven.ozacc.com/ のMaven2版を。

Maven2をまだ一度も使ってないどころかダウンロードすらしたこともないので、何がどう変わってるのかよく分からないけど、ibiblioを調べてみたら、
http://www.ibiblio.org/maven2/{groupId}/{artifactId}/{version}/{artifactId}-{version}.jar
というURL構成になってるんだね。

http://www.ibiblio.org/maven2/springframework/spring/1.2.6/spring-1.2.6.jar
http://www.ibiblio.org/maven2/org/springframework/spring/1.2.6/spring-1.2.6.jar
気になったのが、このような同じものが二つのディレクトリに分かれているケース。この二つの違いは何なのでしょう?

typeの概念はなくなったのかな? TLDファイルは拡張子で判別できるけど、pluginはどうすれば?

もうちょっと調べねば。

Posted by otsuka : 19:49 | Comment (0) | Trackback (0)

2005年11月16日

Java | Commons Validator 1.2

ValidatorVersion120 - Jakarta-commons Wiki

1.1.4はUrlValidatorのしょうもないバグがあったので、早速1.2を導入した。Struts 1.2.7に取り込むには、このWikiにもあるとおり、至極簡単。validator.xmlのDoctypeを1.2用のものに書き換えて、

<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.2.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_2_0.dtd">
<arg0>とか<arg1>を全部<arg>に直すだけ。

XHTMLモードではJavaScriptのバリデータが動作しないらしく、その場合はStruts 1.2.8を使えばいいとのこと。Struts 1.2.8はまだ正式リリースされてないけど、Subversionのリポジトリを見たらもうTag付けされているので、Development Releaseにあるものを使えばいいんじゃないかな。

Posted by otsuka : 14:09 | Comment (0) | Trackback (0)

2005年11月13日

Java | ResinでJapserを使う

Heretic Programmer(2005-11-12)

MEMO。

Posted by otsuka : 15:41 | Comment (0) | Trackback (0)

2005年10月20日

Java | Maven 2

Thread.sleep()(2005-10-20)

リリースされたようだけど、気をつけなければならないこともありそう。1.0からの乗り換えはもう少し落ち着いてからにしようかな。

Posted by otsuka : 19:13 | Comment (0) | Trackback (0)

2005年10月13日

Java | commons-io 1.1

IO - Home

1.1の正式版が出てた。ibiblioのMavenリポジトリにも登録されてる。

CopyUtilsのメソッドがDeprecatedになって、IOUtilsに移動してる。

Posted by otsuka : 20:23 | Comment (0) | Trackback (0)

2005年10月12日

Java | Seasar 2.3 RC

ひがやすを blog

早速ドキュメントを印刷した。どこがどんな風にアップデートされたのかしっかり勉強。

Posted by otsuka : 23:32 | Comment (0) | Trackback (0)

2005年10月 3日

Java | Map-backed ActionForms

The Struts User Guide - 4.3.2 Map-backed ActionForms

こんなことができるなんて知らなかった。。。

Posted by otsuka : 20:13 | Comment (0) | Trackback (0)

2005年9月28日

Java | Maven Plugin Matrix

Maven Plugin Matrix - Confluence

お、これは便利そう。

Posted by otsuka : 22:49 | Comment (0) | Trackback (0)

2005年9月27日

Java | Quartz 1.5.0

Quartz 1.5.0 - Confluence

MEMO。

Posted by otsuka : 00:42 | Comment (0) | Trackback (0)

2005年9月 6日

Java | ファイルの Writer の開き方メモ

ずん日記  |
ファイルの Writer の開き方メモ

MEMO。

Posted by otsuka : 20:41 | Comment (0) | Trackback (0)

2005年9月 2日

Java | JSP タグファイル

Tomcat5の新機能第2回:EL式とタグファイル

JSP 2.0の新機能として「タグファイル」があることは随分昔から知っていたが、今まで使ってこなかった。というか、使い方を知らなかった。
JSTLのELで複雑な条件式とか書くことがあって、これならScriptletを使うのと大して複雑さは変わらないじゃんとか思っていたときに、ふとタグファイルの存在を思い出し、使い方を学んで早速取り入れてみた。

実際に使ってみると簡単だし、JSPコードの可読性が上がったので効果覿面。もっと早くから使っていればよかった。

Posted by otsuka : 00:35 | Comment (0) | Trackback (0)

2005年8月31日

Java | ozacc-googlemap 0.1

ozacc-googlemapライブラリ0.1をリリースしました。まずはGoogle Map API読み込み<script>タグを生成するTaglibクラス1つのみですが。
Google Map APIキー取得時に申請したURLと、そのキーをマッピングした設定ファイルを用意します。設定ファイルはプロパティファイルで、次のパスに設置します。/WEB-INF/googlemap.properties

で、地図を表示するJSPの中で<googlemap:javascript />を入れるだけです。


/WEB-INF/googlemap.properties

http\://127.0.0.1/map/ = ローカル用のキー
http\://dev.example.com/map/ = 開発サーバ用のキー
http\://www.example.com/map/ = 運用サーバ用のキー
#コロンの前にバックスラッシュを付けるのを忘れないように。
Google Mapを表示するJSP
<%@ taglib prefix="googlemap" uri="http://www.ozacc.com/taglib/googlemap" %>
<html>
<head>
<googlemap:javascript />
</head>
<body>・・・
これでJSPの中に各実行環境(異なるホスト)に対応したキーの付いたGoogle Map API読み込み<script>タグが出力されます。

これで、先日挙げた悩みは解決。

ozacc-googlemap 0.1

あっ、Google Mapじゃなくて、Google Mapsなんだ。間違ってたよ。。。
次のバージョンを出す機会があれば、複数形にするかも。

Posted by otsuka : 04:40 | Comment (0) | Trackback (0)

2005年8月11日

Java | s2dao 改

s2daoのN:1マッピングで、例えばエンティティDepartmentとEmployeeがN:1の関係にあり、Employeeがインターフェースでその実装クラスはいつどこで(どういうFQDNで)作られるか分からない。

そんな要件を満たすために、s2daoに手を入れて、N:1の1側エンティティのインターフェースと実装クラスを関連づけられるようにしてみた。
s2dao-rel.propertiesという設定ファイルを設けて、
 ozacc.Employee = example.EmployeeImpl
といったエントリーをセットしておけば、Department検索時にはEmployeeImplのアノテーションを見に行って、EmployImplオブジェクトを生成してくれるという案配。

これが必要なケースって、あんまりないだろうな。うむむ。

Posted by otsuka : 13:01 | Comment (0) | Trackback (0)

2005年7月25日

Java | Javadocをインクリメンタルサーチ

こせきの日記

Cooooool! こせきさんエロ過ぎ。

Posted by otsuka : 11:46 | Comment (2) | Trackback (0)

2005年7月22日

Java | maven repo search greasemonkey script

dot.diary(2005-07-21)

greasemonkeyというプラグインを初めて知った。早速入れてみたけど、なかなか面白そう。

Posted by otsuka : 13:20 | Comment (0) | Trackback (0)

2005年7月13日

Java | JavaのDBアクセスを極める

@IT:JavaのDBアクセスを極める(6) Page 1/3

MEMO。重要。

Posted by otsuka : 09:44 | Comment (1) | Trackback (0)

Java | Exception management and error tracking in J2EE

Exception management and error tracking in J2EE

MEMO。後で読むべし。

Posted by otsuka : 08:52 | Comment (0) | Trackback (0)

2005年7月12日

Java | ant4eclipse

Eclipseの設定をAntビルドスクリプトに反映させるant4eclipse公開 (MYCOM PC WEB)

MEMO。

最近のMYCOM PC WEBはJava関係のマニアックというかプログラマーよりな記事をよく載せるようになったなあ。

Posted by otsuka : 23:04 | Comment (0) | Trackback (0)

2005年6月28日

Java | Eclipse 3.1 RC4

Eclipse 3.0のプラグインを変にいじってしまったのか、ちゃんと起動できなくなってしまった。これを機に、Eclipse 3.1に乗り換えてみた。

Posted by otsuka : 21:12 | Comment (0) | Trackback (0)

2005年6月23日

Java | Struts 1.2.7

Struts Release Notes (since 1.2.4)

Highlighting Errors

Struts can now automatically highlight error fields using the new errorKey, errorStyle, errorStyleClass and errorStyleId attributes on the HTML Input Tags. See the User Guide for details of these attributes.

いつリリースされてたの? すっかり見過ごしてました。個人的には上の新機能が一番魅力的。一年程前にこんなカスタムタグを作っていたけど、そんな面倒な処理は必要なくなったわけだ。

Download Actionもダウンロード用途がある時には使えそう。

Posted by otsuka : 14:23 | Comment (0) | Trackback (0)

2005年6月21日

2005年6月14日

Java | Log4rss

JavaアプリケーションのログをRSSで配信 - Log4rss (MYCOM PC WEB)

なるほど。最初はプログラムのログをRSSにしてどうするんじゃい!?と思ったけど、「RSSリーダに登録しておけばログの監視を行うことができる」わけだ。さすがはThoughtWorks。

ERROR、FATALレベルの重要なログは、SMTP Appenderを使ってクライアントを含むメーリングリストに送信するようにしている。WARNやINFOレベルのログもWebブラウザで見られるようにしているけど、RSS出力+RSSリーダ登録の方が良さそうだ。

Posted by otsuka : 10:15 | Comment (0) | Trackback (0)

2005年5月23日

Java | スレッドとメモリリーク

スレッドとメモリリーク

うむむ。

Posted by otsuka : 15:15 | Comment (0) | Trackback (0)

2005年5月 1日

Java | OSCache helps databases cope

TheServerSide.com - Taking the load off: OSCache helps databases cope

後で読むべし。

Posted by otsuka : 00:40 | Comment (0) | Trackback (0)

2005年4月20日

Java | 特定ディレクトリのファイル更新をチェックする

@IT:Java TIPS -- 特定ディレクトリのファイル更新をチェックする

MEMO。

Posted by otsuka : 16:18 | Comment (0) | Trackback (0)

2005年4月 3日

Java | Eclipse 3.0.2

3.0.2にアップデートしたらエディタが軽快になってるような気がするんだけど、気のせいかな?

Posted by otsuka : 16:06 | Comment (0) | Trackback (0)

2005年3月18日

Java | S2プロダクトの依存関係

アガテナ

むぅ。もはやS2コアと各S2プロダクトのバージョン間の依存関係が分からない。
S2とS2Daoは常に最新版同士でないと動作しない? S2StrutsはどのバージョンのS2とでも動作する? とか。

自分でトライして一つ一つ確認していくしかないのかな。この辺りについて、どっかにまとめられているといいんだけど。

この点については、Springは全部入りだから楽だよね。

Posted by otsuka : 13:09 | Comment (0) | Trackback (0)

2005年3月 2日

Java | VolatileBufferedToolkitImage Strategies

VolatileBufferedToolkitImage Strategies

MEMO。後で読むべし。

Posted by otsuka : 03:44 | Comment (0) | Trackback (0)

Java | S2Struts サブモジュール対応

S2StrutsでStrutsサブモジュールを使う場合に、デフォルトモジュールのActionを呼び、サブモジュールのActionを呼び、再びデフォルトモジュールのActionを呼ぶと、RequestProcessorでエラーが。

[ERROR] org.apache.struts.action.RequestProcessor - パス /path/to/action に対するリクエストは無効です。

ソースを追ってないので原因はよく分からないのだけど、s2struts.diconに定義されているrequestProcessorのインスタンス管理を以下のようにprototypeにしたら解決。

<component name="requestProcessor" class="org.seasar.struts.processor.S2RequestProcessor" instance="prototype"/>

ドキュメントにs2struts.diconについて書かれてないんだけど、これは必ず必要なのかなあ。何か使い方を間違ってる可能性大。

Posted by otsuka : 03:28 | Comment (1) | Trackback (0)

2005年2月19日

Java | S2.1.13

ひがやすを blog

S2とS2Daoを新しいバージョンにアップデートしたら、NullPointerExceptionが出て動かなくなった。どうしてそんなところがnullになるんだ!?と、ソースを散々調べまわった挙句、j2ee.diconにも変更が加えられていることに気が付いた。このj2ee.diconを新しいバージョンのものと入れ替えて解決。

Change Logには書かれていないので注意です。

Posted by otsuka : 01:48 | Comment (1) | Trackback (0)

2005年2月14日

Java | S2

あるWebサイトの制作にSpringではなくSeasarを採用することに。これまでは大抵の場合納期が切迫していたため使い慣れているSpringを採用してきたけど、今回は若干時間に余裕があるので、S2 + S2Daoに挑戦してみることにした。
アプリケーション自体はDIフレンドリーに構成すればS2でもSpringでも設定ファイルの書き方に違いがある位なんだけど、意外とその差が大きい。S2の方が書きやすいです。


MLを見てると、S2DaoとPostgresの相性にまだちょっと不安が残るので、S2Daoの使用はどうしようか思案中。納期までには諸々解決してそうな気もするけど。もうちょっといろいろ検証してみよう。

Posted by otsuka : 14:19 | Comment (2) | Trackback (0)

2005年2月11日

Java | CF MX 雑感

CF MX 7をようやくインストールできた。二台のPCにインストールし、一台はCF内蔵Webサーバを一緒に、もう一台にはJ2EEアプリケーションとしてインストール。

Resin 3.0.10にcfusion.warをデプロイしたのだけど、起動に失敗する。ログを見ると、web.xmlの<welcome-file-list>にid属性が設定されているのだけど、これにResinが対応してない様子。このid属性を外したら無事に起動。

内蔵Webサーバの方はJRunで、起動も遅いし、何となく重たい印象。こっちもJ2EE版にして、ResinかTomcat上で動かした方がいいかも。

今まで商用のアプリケーションサーバは使ったことがなかったけど(一応Resinも商用だけど)、ブラウザ上のGUI設定ツールは分かりやすいし便利だねえ。しかも日本語だし。こうあるべきだと思ったよ。

HTML to PDFはやっぱりちょっと時間が掛かるけど、いい感じだ。PDF帳票生成サーバソフトを買うよりは、CF買った方が良さそう。コストも抑えられるしね。

以上、CFMXをインストールしてデモを軽く動かしたところまでの雑感。

Posted by otsuka : 00:07 | Comment (1) | Trackback (0)

2005年2月10日

Java | Avoiding OutOfMemory errors in Maven

Carlos Sanchez's Weblog

maven.junit.fork=true maven.junit.jvmargs=-Xmx256m

MEMO。

Posted by otsuka : 02:32 | Comment (0) | Trackback (0)

2005年2月 2日

Java | JGroups

JGroups - The JGroups Project

あるプロジェクトで使用するために検証中。日本語の資料はないに等しい。ググって出てきたのはIBMのdWの記事くらい。紹介記事が少ない割には有名なオープンソースプロダクトに採用されてたりする。

分散技術なんて普段使わないから、JMSについても全く無知なんだけど、JGroupsとJMSはどう違うの?

Posted by otsuka : 23:28 | Comment (0) | Trackback (0)

2005年2月 1日

Java | Spring Framework 1.1.4

SourceForge.net: File Release Notes and Changelog

MEMO。

Posted by otsuka : 15:37 | Comment (0) | Trackback (0)

2005年1月28日

Java | HessianC#

Caucho's Hessian binary protocol has been ported for Microsoft's .NET

C#で作られたクライアントとサーバサイドJavaをHessianプロトコルで繋ぐことが出来るってこと? インパクトでかいね。

S2HessianDotNetというものもあったんだね。知らなかった。

S2でもSpringでもHessianのサポートはされてるし、今後は使っていけるかも。ちと勉強しておこう。

Posted by otsuka : 15:30 | Comment (0) | Trackback (0)

2005年1月27日

Java | MockとStub

Mock Stub Shunt

MockとStubはどう違うの?とテスト用に作ったクラスの名前を付ける時に疑問に思い、ググってみた。「Shunt」という単語は初めて見た。

Stubはインターフェースの実装した上で固定値を返す。Mockはもうちょっと柔軟に値を返すことができて、verify()メソッドが加えられてるような感じ。

僕はMockの場合はMockXxxx、Stubの場合はXxxxStubとクラス名を付けたいんだけど、それだと統一がとれないなあ。これはStubなんだゾ、とすぐ分かるようにStubXxxxにした方が良さげだね。

Posted by otsuka : 00:57 | Comment (0) | Trackback (0)

2005年1月20日

Java | Caching Dynamic Content with JSP 2.0

ONJava.com: Caching Dynamic Content with JSP 2.0

MEMO。

Posted by otsuka : 14:57 | Comment (0) | Trackback (0)

Java | Javaから外部コマンド実行

JavaでHello World 外部コマンド編

MEMO。

Posted by otsuka : 14:19 | Comment (0) | Trackback (0)

2004年12月15日

Java | Maven repository mirror

ibiblio is currently experiencing technical difficulties. We apologize for the inconvenience and hope to have systems back online soon.
Mavenで管理しているWebサイトのアップデート作業を行っていたんだけど、何度やってもライブラリの取得が完了しない。おかしいなあと思って、www.ibiblio.orgにアクセスしてみたら、上記のメッセージが。

先日も落ちてたんだけど、ibiblio.orgが落ちると結構致命的だ。ま、そんなときのためにミラーがあるんだけど。ミラーサイトは公式には次の四つ。

  • http://planetmirror.com/pub/maven/
  • http://mirrors.sunsite.dk/maven/
  • http://ftp.up.ac.za/pub/linux/maven/
  • http://download.au.kde.org/pub/maven/

万一のことを考えると、ビルド及び稼働に必要なライブラリ取得を他所のサーバに依存してるのはよくないのかも。Mavenの利点でもあり、欠点でもあるような。
確実さを考えるなら、自前のサーバに依存ライブラリをまとめておくのがよさそうだ。

Posted by otsuka : 03:02 | Comment (0) | Trackback (0)

2004年12月 5日

Java | Log4j Q&A

Log4j Q&A

MEMO。

Posted by otsuka : 19:41 | Comment (0) | Trackback (0)

2004年11月25日

Java | Maven Repo Search 検索語ランキング

Maven Repo Searchでは検索された単語も、AWStatsの機能を使ってアクセス統計を取っています。今日はその11月度ランキングを公開。ちなみにうちのIPからのアクセスは統計に入りません。1日のユニークユーザは大体20~50です。

  • hibernate
  • spring
  • jta
  • xdoclet
  • log4j
  • dom4j
  • cglib
  • struts
  • servlet
  • commons-logging
  • commons
  • jstl
  • seasar2
  • seasar
  • jaxrpc
  • asm
  • ehcache
  • activation
  • standard
  • commons-collections
  • velocity
  • commons-lang
  • commons-pool
  • odmg
  • commons-dbcp
  • hsqldb
  • ozacc-mail
  • S2
  • servletapi
  • xalan
  • aopalliance
  • dbunit
  • junit
  • jdom
  • xerces
  • axis
  • quartz
  • jaxb
  • webwork
  • commons-beanutils
  • j2ee
  • commons-digester
  • middlegen
  • oro
  • beanutils
  • jboss
  • collections
  • torque
  • commons-configuration
  • postgres
Hibernateが一位で、上位はその依存ライブラリを検索しているような印象を受けます。

Posted by otsuka : 12:19 | Comment (0) | Trackback (0)

Java | util-plugins for Eclipse

eclipseutilplugins: ホーム

via marsのメモ
「こうゆう小物ネタほど重宝するものだったりする」

確かに。これはイイ。

Posted by otsuka : 00:20 | Comment (0) | Trackback (0)

2004年11月23日

Java | SimpleDateFormatは

SimpleDateFormat (Java 2 プラットフォーム SE v1.4.0)

日付フォーマットは同期化されません。スレッドごとに別のフォーマットインスタンスを作成することをお勧めします。複数のスレッドがフォーマットに同時にアクセスする場合は、外部的に同期化する必要があります。

知らんかった。気を付けろヨ、オレ。

Posted by otsuka : 18:36 | Comment (2) | Trackback (0)

2004年11月22日

Java | WIKI記法テキストのHTML変換

WIKI文法で書かれた文字列をHTML文字列に変換するJavaライブラリを誰かご存じないですか? WIKI文法の種類については問いません。

Posted by otsuka : 15:06 | Comment (4) | Trackback (1)

2004年11月18日

Java | 500行のメソッド

あるStrutsActionのexecute()メソッドが500行もある。せめて複数のメソッドに分割してくれー。

うーん、DispatchActionを使うべきところを、普通のActionで頑張っているのも一因の様子。マジックナンバーも埋め込まれるなあ。

何とかしなければ・・・

Posted by otsuka : 01:34 | Comment (0) | Trackback (0)

2004年11月11日

Java | 透過PNGの生成

Java Technology Forums | PNG transparency

MEMO。

Posted by otsuka : 23:13 | Comment (0) | Trackback (0)

2004年11月10日

Java | digital watermarking gif images

Java Technology Forums

MEMO。

Posted by otsuka : 22:32 | Comment (0) | Trackback (0)

2004年11月 8日

Java | Struts 1.2.4のExceptionHandler

/**
* Logs the Exception using commons-logging.
* @param e The Exception to log.
* @since Struts 1.2
*/
protected void logException(Exception e){
  log.debug(messages.getMessage("exception.log"), e);
}
例外を記録するのに、どうしてdebugレベルで出力するんだよ。errorレベルで出してくれよ。

このためだけにサブクラス作るのもなあ・・・ Log4jの設定でorg.apache.struts.action.ExceptionHandlerを指定したCategoryを用意してDEBUGレベルを出力させるか。むぅ、どっちがいいだろう。

Posted by otsuka : 16:25 | Comment (0) | Trackback (0)

2004年10月30日

Java | Informa 0.6.0

Informa: RSS Library for Java

The Poller module is intended to provide convenient services for background polling of channel changes. Once you have some channels you might be interested in periodical check for updates. Poller helps to do this task common to many applications. It accepts channels for registration and creates the schedule for their updates.

0.6.0がリリースされてた。
RSSをクロールするPollerモジュールが導入された。マルチスレッドでの稼働スレッド数やクロール間隔も容易に設定できるみたい。

うう、もうちょっと早くリリースに気づいていれば。先日同じような機能を自分で実装したばかり。くやしい。

Posted by otsuka : 14:29 | Comment (0) | Trackback (0)

2004年10月29日

Java | Resin 3.0.9

Resin 3.0.9 Release Notes

The Resin distribution for 3.0.9 has been refactored into two distributions:

* Resin Professional - Most companies and organizations will use Resin Professional. Includes performance, caching, and clustering capabilities.
* Resin Open Source (GPL) - Contains all functional components of Resin, including EJB, but excludes performance and clustering capabilities.

via とらねこ放浪記

マジですか? 「performance, caching capabilities」が具体的に何を指しているのか、まだ調べてないのでよく分からないのですが、Resinユーザが増えるのは間違いないはず。
ライセンスを買っている僕にとってはなかなか複雑ですが。と言っても、2.1のときのことだけど。未だに3.0系は使ったことがない。

Posted by otsuka : 16:14 | Comment (0) | Trackback (0)

2004年10月27日

Java | JavaMail 1.3.2

JavaMail-1.3-changes

3. Add mail.mime.charset property (4377731)
The "mail.mime.charset" System property (NOTE: *not* Session property) names the default charset to be used by JavaMail. If not set, the standard J2SE "file.encoding" System property is used. This allows applications to specify a default character set for sending messages that's different than the character set used for files stored on the system. This is common on Japanese systems.

この辺りがちょっと気になる。要調査。

APOPにも対応。mail.pop3.apop.enableプロパティを使う。

Posted by otsuka : 08:37 | Comment (0) | Trackback (0)

2004年10月23日

Java | Maven War Plugin 1.6.1

Maven War Plugin - Changes

Release 1.6.1 - 2004-10-23
o Splitted war:webapp in war:war-resources and war:webapp.

MEMO。
自作のプラグインがwar:webappに依存しているので、要修正。

Posted by otsuka : 22:09 | Comment (0) | Trackback (0)

2004年10月20日

Java | S2Quartz

はてなダイアリー - khiの日記

要チェック。

Posted by otsuka : 07:56 | Comment (0) | Trackback (0)

Java | Quartzからマルチスレッド

昨夜から今朝まで、Quartzを使って起動するマルチスレッドプログラムの実装作業。Worker ThreadパターンのクライアントがQuartzのJobに当たる。こっちのスレッドが待ってる間に、あっちのスレッドがそれをやってからnotifyAll()とか、もう頭が混乱。いつもとはちょっと違った脳みそが使われてる感じ。

マルチスレッドもQuartzもどうやってテストしたらいいのかが分からない。JUnitテストケースのメソッドでThread.sleep(30000)している間にQuartzのJobが起動するような設定にして、実際に動かしてテストしていたので、やたら時間が掛かった。

それでも一晩かかってようやく終わりが見えてきた。後は例外の処理をするだけ。眠いー。

Posted by otsuka : 05:06 | Comment (0) | Trackback (0)

2004年10月18日

Java | without EJB 読書会

第二回目。今帰ってきました。
いやー凄かった。特に二次会。お酒の飲めないkakudaさんが突然ビールをラッパ飲み。酔っ払った挙句、ひがさんに分け分からない罵声を浴びせ、一同静まり返った。その後、「毎日オレンジニュースを書くオレの身にもなってみろ!!」と暴れまくって他のお客さんにも絡んで迷惑をかけそうな勢いだったので、僕のラリアットを喰らわせダウンさせました。温厚そうなkakudaさんがあんなになるなんて。日ごろのストレスが爆発したのでしょうか。

なんちゃって。今回は仕事が溜まっていたので読書会には参加できませんでした。なので、上の話は全部ウソです。

Posted by otsuka : 02:16 | Comment (0) | Trackback (0)

2004年10月17日

Java | Maven テスト実行を省略

Maven Test Plugin - Test Properties

maven.test.skip
Set this to 'true' to bypass unit tests entirely. Its use is NOT RECOMMENDED, but quite convenient on occasion.

運用サーバ上でのビルド-デプロイ時はテストを実行したくない場合はどうすればいいんだろう。と調べていたら、こんなプロパティが用意されていた。

Mavenには、他にも役に立つプロパティや機能がきっともっとあるんだろうけど、プラグイン全体での網羅的なドキュメントがないから、なかなかその存在に気づくことができない。書籍も出る様子はないし、今ひとつ盛り上がりに欠ける。まあAntに慣れてりゃムリに使うこともないからなあ。

Posted by otsuka : 00:13 | Comment (0) | Trackback (0)

2004年10月11日

Java | JSPにロジックを埋め込まないで

あるプロジェクトのSpring対応化を図って既存コードを修正しているのだが、いくつかのメソッドをコメントアウトしてみてもEclipse(のコンパイラ)が警告を出さない。何故どこからも参照されていないメソッドが作られているのだろう?と思いつつ、要らないのものはどんどん削除してコードをシンプルにしていった。

が、ふとあることに気が付いて、JSPファイルを開いてみると・・・
予想通り、スクリプトレットの中で要らないと思って削除していたメソッドが使用されていた。どうりでEclipseも気づかないわけだ。
しかも、JSPの中でConnection取得してDBアクセスまでしている。これじゃ、リファクタリングは困難だ・・・むぅ、どうしたものか。

Strutsを使ったところでMVCモデルに従わないと効果半減だよ。ある意味JSPは罪な奴だね。


あー、金八先生が始まっちゃう。

Posted by otsuka : 16:58 | Comment (0) | Trackback (0)

2004年10月 6日

Java | Log4J SMTPAppender 日本語対応版

以前にLog4j SMTPAppender 日本語対応版についてMEMOしたけど、今回自分で手を入れてみた。

Log4JオリジナルのSMTPAppenderだと、

  • 例外ログを出力場合にスタックトレースが改行されず読みにくい。
  • 何故かマルチパートメッセージを生成する。
という点が気に入らなかったので、まずこの二点を修正。

そして文字コードについてはデフォルトでiso-2022-jpを使うようにし、任意の文字コードをセットしたい場合は、Charsetパラメータで指定できるようにした。

http://spring-ext.sourceforge.jp/maven/log4j/jars/log4j-ja-1.2.8.jar

Posted by otsuka : 04:35 | Comment (0) | Trackback (0)

2004年10月 3日

Java | Last modifiedサポートパッチ

はてなダイアリー - khiの日記

またkhiさんからパッチを提供(?)していただきました。今度はOMLではなくMaven Repo Search。これで、dotさんからも要望を受けていたRSS feedが実現できそうです。

こうやってソースをじっくり読まれてしまうのは、実はちょっと恥ずかしい。特にMaven Repo Searchの方はやっつけで作ったものなので。「こんなアホなコード書いてるよ」とか思われてるかも・・・ 他人に見られても恥ずかしくないようなコードを書くように心がけないと。

でもこうして面識のない方からも機能を追加してもらえるのがオープンソースのいいところですね。

Posted by otsuka : 23:31 | Comment (0) | Trackback (0)

2004年10月 2日

Java | Maven Repo Search 機能強化

http://maven.ozacc.com/

1. 新たに TLD も検索できるようになりました。
2. タイプを指定して検索できるようになりました。

Maven Repo Search Pluginもタイプ指定検索に対応してもらえると嬉しいなあ、と書いてみる。

Maven Repo Search Pluginがアップデート! タイプ指定検索に対応していただきました。
http://sourceforge.jp/projects/mrsp/files/


管理するArtifactが増えてきたせいか、以前ほどの検索スピードが出ない。と思っていたら、PostgreSQLデータベースをvacuumするのを忘れていた。vacuumしたら以前のスピードが戻った。
これからはデータベース更新後にvacuum fullを実行するように変更してみた。

Posted by otsuka : 15:48 | Comment (5) | Trackback (1)

2004年9月30日

Java | Reporting Application Errors by Email

ONJava.com: Reporting Application Errors by Email

via オレンジニュース mixi出張所

後で読むべし。

Posted by otsuka : 12:57 | Comment (0) | Trackback (0)

2004年9月29日

Java | Maven - リモートレポジトリにファイルを指定

前にdotさんから教わった小技を実践しようとしたら、ちゃんと思い出せなくて苦戦。ようやくうまくいったので忘れないようにメモっとく。

maven.repo.remote = http://www.ibiblio.org/maven/, file:lib/

Posted by otsuka : 21:32 | Comment (0) | Trackback (0)

2004年9月28日

Java | JDAVMail

SourceForge.net: Project Info - JDAVMail - WebDAV JavaMail provider

JDAVMail is a JavaMail 'service provider' (store and transport) implementing the WebDAV-like protocol used by HotMail.

MEMO。

Posted by otsuka : 13:25 | Comment (0) | Trackback (0)

2004年9月22日

Java | Maven Repo Search Plugin 0.1

はてなダイアリー - dragon3の日記

Maven Repo Search Plugin 0.1 リリース

やばい。チョー便利。

自分の作ったWebアプリがEclipseから使えるなんて、ちょっと感動。

Posted by otsuka : 12:33 | Comment (3) | Trackback (0)

2004年9月21日

Java | XML - classpathからリソースをロードする

dW : XML : ヒント: classpathからリソースをロードする

MEMO。

これを使えば、DTDファイルをクラスパス経由で読み込めるようになるのでは。そうすれば、DTDバリデーション時にインターネット経由での取得が必要なくなり、多少パフォーマンスが向上するはず。

Hibernateの実装

public class DTDEntityResolver implements EntityResolver {

Log log = LogFactory.getLog(DTDEntityResolver.class);

private static final String URL = "http://hibernate.sourceforge.net/";

public InputSource resolveEntity (String publicId, String systemId) {
if ( systemId!=null && systemId.startsWith(URL) ) {
log.debug("trying to locate " + systemId + " in classpath under net/sf/hibernate/");
// Search for DTD
ClassLoader classLoader = this.getClass().getClassLoader();
InputStream dtdStream = classLoader.getResourceAsStream( "net/sf/hibernate/" + systemId.substring( URL.length() ) );
if (dtdStream==null) {
log.debug(systemId + "not found in classpath");
return null;
}
else {
log.debug("found " + systemId + " in classpath");
InputSource source = new InputSource(dtdStream);
source.setPublicId(publicId);
source.setSystemId(systemId);
return source;
}
}
else {
// use the default behaviour
return null;
}
}

}

Posted by otsuka : 09:13 | Comment (0) | Trackback (0)

Java | パッケージ構成案

はてなダイアリー - ひがやすをのここだけの話

くーすアプリケーションのパッケージは、ベースとなるパッケージの下に以下のパッケージで構成されます。

  • form:フォームクラスを格納。
  • action:アクションクラスを格納
  • logic:業務ロジックのインターフェースを格納。
    • impl:業務ロジックの実装クラスを格納。
  • support:補助ロジックのインターフェースを格納。
    • impl:補助ロジックの実装クラスを格納。
  • dao:Daoのインターフェースを格納
    • impl:あれば、Daoの実装クラスを格納。
  • entity:エンティティクラスを格納。
  • dto:DTOクラスを格納。
  • util:ユーティリティクラスを格納。
  • interceptor:あれば、インターセプタを格納。
  • dicon:diconファイルを格納。
パッケージ構成は、プロジェクト毎にバラバラだったりするので、こういう指針があるといいですね。

僕はViewに該当するパッケージ(actionとform)は次のように分けたい。

  • web
    • struts
      • form:ActionFormクラスを格納
      • action:Actionクラスを格納
      • support (or util): Actionクラスが使用する補助ロジッククラス(Formの変換等)を格納
    • servlet:サーブレットを格納

Posted by otsuka : 01:28 | Comment (0) | Trackback (0)

2004年9月20日

Java | MavenRepoSearchPlugin

はてなダイアリー - dragon3の日記

Eclipseプラグインの学習として作成してみてます。
Viewに検索テキストフィールドと結果テーブルを表示。ダブルクリックでRepositoryへ飛びます。

書いてみるもんですね。dragon3さんが作ってくれているようです。

期待してます!

Posted by otsuka : 01:33 | Comment (3) | Trackback (1)

2004年9月18日

Java | Mavenを使うメリット

Mavenを利用して得られるメリットの中で、僕にとって一番大きいのは、依存ライブラリのバージョンを明示的に設定することが強制される点。

別にMavenを使わなくても、Jarファイル名にバージョンをつけたり、他の方法でバージョンを控えるようにしておけばいいんだろうけど、つい面倒くさくなってサボったりするから強制される方が僕にとっては望ましい。

あるプロジェクトのlibディレクトリにjdom.jarが入ってるんだけど、これバージョンいくつなんだろう・・・
プロジェクトのプログラムは直接JDOMを使ってないので、他のライブラリに必要とされてるんだろうけど、その関連性も分からない。この辺りはMaven 2で解決されるんだっけ。

Posted by otsuka : 23:20 | Comment (0) | Trackback (0)

2004年9月17日

Java | XMLのコメントが

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setIgnoringComments(false);
dbf.setCoalescing(true);
dbf.setIgnoringElementContentWhitespace(true);
dbf.setValidating(true);
DocumentBuilder db = dbf.newDocumentBuilder();

上記のようなコードで、XMLパースの設定をしているのだけど、ignoringCommentsをfalseにしているにも関わらずパース結果のDocumentではコメントが削除されたり、残っていたり。trueにしても同様に削除されたり、残っていたり。

AというXMLファイルは常にコメントが削除され、BというXMLファイルは常にコメントが残る。同一のXMLファイルでコメントが削除されたり、残っていたりというブレはない。

HELP!!

Posted by otsuka : 05:44 | Comment (0) | Trackback (0)

2004年9月16日

Java | Mavenzilla

Mavenzilla - About Mavenzilla

MavenのMLにポストされてた。考えてることは同じなんだなと思った。

Webアプリの方が便利でしょ?と思って、Maven Repo SearchのURLだけポストしてみた。実は英語が書けなかっただけ・・・

このMaven Repo SearchをEclipseから使えるようなプラグインが欲しいのだけど、誰か作って~。例えば、検索結果をXMLで返すとか、プログラムの修正や拡張には応じます。

Posted by otsuka : 11:32 | Comment (0) | Trackback (1)

2004年9月15日

Java | Cargo

Cargo - Home

Cargo provides a Java API to start/stop and configure Java containers

MEMO。

via オレンジニュース

Posted by otsuka : 02:49 | Comment (0) | Trackback (0)

2004年9月14日

Java | Struts best practices

Struts best practices

MEMO。後で読むべし。

Posted by otsuka : 02:10 | Comment (0) | Trackback (0)

2004年9月13日

Java | MavenでTransformerFactoryを使うテスト

Re: Plugin test doesn't know TransformerFactory

maven.junit.sysproperties=javax.xml.transform.TransformerFactory
javax.xml.transform.TransformerFactory=org.apache.xalan.processor.TransformerFactoryImpl

XMLを加工するTransformerFactoryを使うクラスのテストをMavenから実行すると、「Provider for javax.xml.transform.TransformerFactory cannot be found」というエラーが起こる。同じテストをAntで実行すると問題はないのだけど。

このエラーにずっと悩まされていて、仕方ないからこのテストを無効にして対処していたのだけど、解決方法が分かった。projecte.propertiesに上記のプロパティをセットしておけばよい。

Posted by otsuka : 15:53 | Comment (0) | Trackback (0)

2004年9月 9日

Java | ValueList

ValueList - About

In addition to implementing the Core J2EE Pattern, tag libries have been added to allow for easy intergration into any J2EE web application.

SpringのMLで紹介されていたPagingのTaglib。

Posted by otsuka : 04:09 | Comment (0) | Trackback (0)

2004年9月 7日

Java | JSP Formatter

JSP Formatter

via Marsのメモ

後で試してみるべし。

Posted by otsuka : 21:41 | Comment (0) | Trackback (0)

2004年9月 4日

Java | Dumbster

Dumbster - Fake SMTP Server

The Dumbster is a very simple fake SMTP server designed for unit and system testing applications that send email messages. It responds to all standard SMTP commands but does not deliver messages to the user. The messages are stored within the Dumbster for later extraction and verification.

すばらしい。テスト嫌いな僕でも使ってみたくなった。

早速、ozacc-mail libraryのテストケースで使ってみよう。

Posted by otsuka : 23:50 | Comment (0) | Trackback (0)

2004年9月 1日

Java | volatile

今日初めて、このJavaキーワードの意味が理解できた。説明しろって言われても無理だけど。

Posted by otsuka : 23:16 | Comment (0) | Trackback (0)

2004年8月31日

Java | VeriTrans High-Level API

手がけているECサイトで、ベリトランス社の「BuySmart Flex」というカード決済サービスを利用している。ベリトランスから提供されるJavaのライブラリモジュールを使って開発してるんだけど、このライブラリのインターフェースはHashtableに依存していて、決済処理実行時の引数、そして結果もHashtableという徹底ぶり。例えばカード番号は"card-no"という文字列キーでputしておく。

このライブラリの使用方法は難しくはないのだけど、Hashtableに依存してるので、タイプセーフに開発を進められず、実際に動かしてログを見るまでエラーが分からないため使いにくい。
また何か決済処理に失敗したとしても、例外をスローしてくれるわけではなく、成功時と同様に結果Hashtableに含まれるステータスキーの値を調べなければならない点も不便。

そんなわけで、こんな低レベルなAPIをラップし、高度なAPIを提供するライブラリを開発しました。もうHashtableなんて使用しなくても大丈夫。一括払い、分割払い、リボ払いの指定も楽勝です。
決済処理に失敗すれば原因に応じた適切な例外もスローします。SpringやS2にもサクッと組み込めます。ズバリ開発効率が上がります、多分。

VeriTransのテストサーバで実際にテストして、動作は実証済みです。VeriTrans仲間でこのライブラリを使ってみたい方がいたらご連絡ください。そして、人柱になってください(!?)。

Posted by otsuka : 06:23 | Comment (0) | Trackback (0)

Java | Relaxer・・・

Relaxer JDBCのお話。前にも書いたけど、あるプロジェクトで採用されている。Relaxerが生成するデータアクセスのコードを追ってみたけど、これパフォーマンスはどうなんよ!?と思った。

エンティティオブジェクトを取得するのに、

  1. SQLを実行
  2. DocumentBuilderを生成
  3. ResultSetからDOM Documentを生成
  4. Documentからエンティティオブジェクトを生成
という手順を踏んでいる。
Listを返してもらって、その中のオブジェクトを取り出すときは、各々のオブジェクト取得時に2~4を行っている。うーん、悩ましい… コスト高そう。他にも引っかかる点がちらほら。

Rod Johnshonを引用。

Excessive use of XML within applications is a good example of the way in which fashion in J2EE architecture seems directly inimical to performance. (inimical: 有害な)
英語はわかんないけど、XMLの多用はパフォーマンスには有害らしいよ。

Posted by otsuka : 05:03 | Comment (0) | Trackback (0)

2004年8月29日

Java | Maven Artifact Plugin

Maven Artifact Plugin - Overview

このプラグインがリモートレポジトリへのアップロードを担当。いつも忘れてしまうのでMEMO。

Posted by otsuka : 00:16 | Comment (0) | Trackback (0)

2004年8月26日

Java | ISO-8601

日付の表記に関するノート

(5) 年月日および時分秒
YYYY-MM-DDThh:mm:ssTZD(例:2001-08-02T10:45:23+09:00)

ISO-8601に準じた日時表記は上記のような形式になる。が、JavaのDateFormatではこのタイムゾーンが表現できなかった。
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZ");
String result = formatter.format(date);
// 2001-08-02T10:45:23+0900
このように、タイムゾーンを示す「+0900」の時間と分の間にコロンが入ってくれない。

この文字列をちょっといじればいいだけなので、大した問題じゃないけど、何故微妙に仕様からズレた結果を出すのでしょうか?
と思ったけど、SimpleDateFormatのJavaDocを読むとどこにもISO-8601に準拠とは書いてないね。

Commons-Lang 2.0を使うと、次のようなコードでISO-8601に準拠した結果を返してくれます。

DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(date);

Posted by otsuka : 15:47 | Comment (0) | Trackback (1)

2004年8月20日

Java | RSSOwl

SourceForge.net: Project Info - RSSOwl | RSS / RDF / Atom Newsreader

RSSOwl is a RSS / RDF / Atom Newsreader written in Java using SWT as fast graphic library. Read News in a tabfolder, save favorites in categories, Export to PDF / RTF / HTML / OPML, Import Feeds from OPML, perform fulltext-search, use internal browser

GUIアプリのRSSリーダーだけど、ソースをざっと見たところ、中身のRSS APIはシンプルで使いやすそう。もうちょっと調べてみるべし。

Posted by otsuka : 23:53 | Comment (0) | Trackback (0)

Java | 標準RSS API

Blogの普及によってRSSが認知され、今やニュース系のサイトでもRSSでのデータ配信が行われることが珍しくなくなった。

そんなネット上の標準テキストフォーマットとなったRSSだけど、RSSデータを扱うJava APIには未だに標準もデファクトと言える存在もない。RSS自体の仕様のブレ(1.0と2.0の非互換性とか。JavaWorld 9月号参照。)や、BlogのRSS XMLにはDublin Coreなどの拡張モジュールが加えられているケースが多いから、標準APIを定めるのは難しいのかもしれない。
また本来XMLデータなんだから、XMLパーサで扱えばいいジャンといった向きもあるのかもしれない。

僕が調べたところ、Informa、RSSLibJ、RSS4Jの三つが今のところある程度メジャーなRSS API実装だが、Informaを除いて長い間アップデートされていない。これらのAPIに依存するプログラムにしてしまうと、今後のRSSやAtomの仕様の変化についていけなくなるかも知れない。

CPANのXML::RSS Perlモジュールのような標準的な存在があるといいのだけど。(関係ないけど、CPANって何でも揃うよね。Perlに不可能はないって空気を醸し出してる。)

Commons Loggingのように異なるAPIを持つ実装をラップしてくれるようなものでもいい。Jakarta Commonsでは僕が望んでいるのとは違う方向で何やら作ろうとしているし。偉い人が誰が作ってくれないかなあ。

Posted by otsuka : 08:54 | Comment (0) | Trackback (0)

2004年8月18日

Java | Maven Repo Search CVS

前にも書いた通り、Maven Repo SearchアプリのソースをSourceForge.jpのCVSにアップしました。
http://sourceforge.jp/projects/spring-ext/

Springベースで、PostgreSQLに依存したSQLがハードコードされてます。たった二つのサーブレットで構成されている小さいWebアプリなので、Springのサンプルとしても使えるかも。JavaDocコメントは何もありませんが。勿論(!?)、テストもありません・・・

Posted by otsuka : 23:01 | Comment (0) | Trackback (0)

Java | 日本のibiblioが必要

Mavenを使うようになると、何でもかんでもリモートレポジトリに登録されていて欲しいと思うようになった。自分でダウンロードしてローカルレポジトリに置いておくのはスマートじゃない気がする。

大抵のプロダクト(ライブラリ)はibiblioに登録されているんだけど、問題は日本発のもの。例えばSeasarファミリーの各プロダクトや、日本語処理がうまくできない洋モノを改良したプロダクトとか。こういったプロダクトが各開発者によって独自のリモートレポジトリに登録されるようになると、それを探すのにひと手間かかるようになってしまう。

Mavenの魅力のひとつは、デフォルトのリモートレポジトリであるibiblioに代表的なプロダクトが集約されているところにあると思う。国内でMavenを普及させるには、ibiblioとココだけmaven.repo.remoteプロパティに登録しておけばいい、という日本代表のリモートレポジトリを用意しておくことが必要ではなかろうか。

なんてことを思ったり思わなかったりの今日この頃。ところでibiblioは「イビブリオ」って読みで合ってる?

Posted by otsuka : 04:10 | Comment (0) | Trackback (0)

2004年8月16日

Java | JSPとServletでの文字コード指定

Servlet内で

response.setContentType("text/html; charset=SHIFT_JIS");
とレスポンスの文字コードをセットする。そして、そのServletからフォワードするJSPのpageディレクティブで
<%@ page language="java" contentType="text/html; charset=EUC-JP"  %>
と文字コードを指定する。

さて、実際に出力された時に適用される文字コードはどっちでしょう?

Tomcat 5では、JSPのpageディレクティブの文字コードが適用されました。では、動的に出力文字コードを変えたい場合はどうすればよいのか。

仕様によるとpageディレクティブのデフォルトcontentTypeは、「text/html; charset=iso-8859-1」。だから、contentTypeを指定しない場合はiso-8859-1で出力されてしまうのかと予想していた。
が、Servletのresponse.setContentType()で文字コードをセットし、JSPのpageディレクティブでcontentTypeをセットしなければ、Servletで指定した文字コードで出力された。

ひとつ学んだ。

Posted by otsuka : 00:24 | Comment (0) | Trackback (0)

2004年8月14日

Java | Creating Web Applications with Maven

CreatingWebApplications - Maven Wiki

MEMO。

Posted by otsuka : 15:27 | Comment (0) | Trackback (0)

2004年8月12日

Java | Maven Repo Search

Mavenの日本語MLにもポストしたんだけど、project.xmlのdependencyとして設定するjarファイルの情報(groupId, artifactId、version)をwww.ibiblio.org/mavenから探すのは面倒くさい。

ということで、リモートレポジトリに登録されているjarファイルを検索するWebアプリケーションを作ってみました。

Maven Repo Search http://maven.ozacc.com

検索対象のリモートレポジトリは、現在 www.ibiblio.org/maven と seasar.sourceforge.jp/maven です。
スペースで区切って検索キーワードを入れるとアンド検索になります。

リアルタイムで対象レポジトリを検索するのではありません。秘密のコマンドを打つと、Jarファイルのデータベースを更新するようになってます。結構時間が掛かる処理なので、気が向いた時に更新します。

(注) Jarファイルの取得プログラムがまだ完全ではなく、リストアップできてないjarファイルもあります。気づいているところではバージョン番号がなく「-SNAPSHOT」で終わっているJarファイル。他にも気づいたらご指摘を。


ちなみに「mockobjects-j1.4-j2ee1.3-0.08dev-20030318.jar」は、どれがバージョンなの? Maven Repo Searchでは「0.08dev-20030318」をバージョンとみなすようにしています。

まだ開発中のため、アクセスできないときやInternal Server Errorが出ているときがあるかも知れません。それから、お薦め(?)のリモートレポジトリがあれば、教えてください。

アホなコードですが、もうすぐソースも含めて公開します。

Posted by otsuka : 03:47 | Comment (9) | Trackback (0)

2004年8月 9日

Java | Powers of 2

Flags (Validator 1.2.0-dev API)

Represents a collection of 64 boolean (on/off) flags. Individual flags are represented by powers of 2.

「Powers of Ten」というEamesの映像作品があったけど、あれは10の乗数ごとに画角を拡げる(狭める)という意味。

こちらは2の乗数。
僕は二進数とかシフト演算子が理解できないエセプログラマーなので、このFlagsクラスの仕組みはソースを見ても理解できないんだけど、何かすごくカッコイイ。やってることはすごく単純そうなんだけど。

public boolean isOn(long flag) {
return (this.flags & flag) > 0;
}

「高級言語はよく分からないんだよね」とかムカつくこと言いながら、こういうコードを書いてみたい。

Posted by otsuka : 18:21 | Comment (0) | Trackback (0)

2004年8月 7日

Java | Java Practices

Java Practices - Home

via TECHMemo

MEMO。

Posted by otsuka : 14:38 | Comment (0) | Trackback (0)

2004年8月 6日

Java | Relaxer

データアクセス層がRelaxerなプロジェクトに関わることになって、Relaxerを勉強中。最初はプロジェクトのJavaソースを見てもさっぱりだったけど、EAでクラス図を生成させたり、Javadocを見たりして、徐々に掴めてきた。

いわゆるXxxDAOインターフェースに当たるのが、IXxxTableView。そして、その実装クラスがXxxTable。これが分かった時点でデータアクセス層はほぼ理解できた。
まあRelaxerの理解なんて心意気一発ッスよ。

そして、このプロジェクトにはビジネスロジック層がない。全部Struts Actionかサーブレットのプレゼンテーション層に書かれている模様。ざっと見たところ、ほとんどのActionはシンプルにデータアクセスしてるだけみたいなので、この設計でも全然問題なさそう。トランザクション制御が気になるけど。

開発プロジェクトに途中から関わった経験はないに等しいので、自分のやり方と異なる点とかあって新鮮だ。
ソースにJavadocコメントがほとんどなく、あったとしてもそのクラスの機能を簡単に説明しただけのもの。何のためにそのクラスがあるのか、クラスの責務に関する記述が欲しいのだけど、それが書かれていない。
でも、自分で書く場合もそう。必要なことが書けていなかったんだな。「人の振り見て我が振り直せ」とは正しくこのこと。今回のプロジェクトはいろいろと勉強になりそう。

Posted by otsuka : 00:56 | Comment (0) | Trackback (0)

2004年8月 5日

Java | Struts Validatorで入力値を変換する

最近、Struts周りのTaglibやValidatorを作り貯めてるんだけど、Validatorの可能性に惹かれている。validatorメソッドでは、その引数にActionForm以外にHttpServletRequestも受け取ることができる(つまりHttpSessionも)ので、もっといろんなことを透過的且つ外部のXML経由の指示で行なわせることができそうだなと。

通常Validatorはvalidation.xmlに入力値の規則を定義して、それに反する値がActionFormにセットされている場合、ActionError(ActionMessage)を生成して返す。

半角数字で入力してもらいたい電話番号フィールドに全角数字で入力された場合を考えてみる。validation.xmlで、半角しか受け付けないmaskルールを作るのが普通だと思う。クライアントサイドのJavaScriptは使わないものとすると、この場合、全角数字で入力されるとエラーになってしまう。

以前に書いたことがあるけど、全角半角など簡単にできる変換はシステムが行うべきだ。ただ、Struts Validatorを使うとなると、Validatorメソッドに入力値が渡される前に、その値を変換しておかないといけない。ValidatorメソッドはActionの前に呼び出されるので、どこでそんな変換をするんだということになってしまう。

ここで、Validatorを値変換の用途に使用してはどうかと考えている。validation.xmlにはfield要素のdepends属性で、呼び出されるValidatorメソッドの順番を指定できるので、例えば

<field property="tel" depends="required, toHankaku, mask">
のようにして、maskメソッドに渡される前に、値のフォーマットをしておくことができるだろう。値のフォーマット時に例外が発生してもエラーは返さずスルーする。

ひとつ悩みどころなのが、例えば名前の読みをカタカナで入力するような場合。「いとうみさK」と入力された値は、「イトウミサK」と変換されるが、結局エラーになってしまう。で、エラーになると、入力フォームに戻って正しい値の入力を促すわけだが、そのフィールドには「いとうみさK」ではなく「イトウミサK」と、自分が入力したものではない変換された後の値が表示されてしまう。これがユーザビリティとしてはどうなんだろう?

Posted by otsuka : 16:04 | Comment (0) | Trackback (0)

Java | Informa

Informa: RSS Library for Java

RSSライブラリ。RSS4Jは開発が止まっているようなので、このInformaを使ってRSSを扱うプログラムを制作した。今のところパースだけだけど、至って簡単にできた。RSSの扱いなんて心意気一発ッスよ。

Posted by otsuka : 10:55 | Comment (0) | Trackback (0)

2004年8月 4日

Java | Struts CreditCard Validator

眠れなかったので、Struts用のCreditCardValidatorクラスを作ってみた。

Strutsの標準Validatorでもクレジットカード番号はチェックできるけど、日本で普及しているJCB、そしてお金持ちが使うDinersはサポートされていない。まずは、この二つのカード会社もサポートしたvalidateCreditCard()メソッドを作成。

このvalidateCreditCard()メソッドでは、カード番号しかチェックしない。例えば、ECサイトの決済フォームで、カード会社にVISAを指定して、JCBカードの番号を入力しても、その番号がJCBのものとして正しいければ(チェックデジットが正しければ)、Validatorをすり抜けてしまう。

まあ実際は、クレジットカードの与信にはカード番号と有効期限だけが必要だから、カード会社の指定なんて必要ないのだけど。それにこのValidatorでチェックできることは文法的に正しいカード番号かどうかだけで、本当に有効なカード番号かどうかはチェックできないしね。

そうは言っても、カード決済網にアクセスする前の段階で一度、カード会社名も含め入力されたカード情報の妥当性はチェックしておきたい。そこで作ってみたのが、validateCreditCardNumberWithType()メソッド。Javadocコメントは以下。

指定されたカード会社に対応する正しいクレジットカード番号かどうかをチェックします。

type変数にカード会社が指定されるプロパティ名をセットします。
例えば、カード会社名入力フィールドのプロパティ名が「cardType」で、カード番号入力フィールドのプロパティ名が「cardNumber」の場合、
validationルールは次のようになります。

<field property="cardNumber" depends="required,strictCreditCard">
<arg0 key="typeForm.cardNumber.displayname"/>
<var>
<var-name>type</var-name>
<var-value>cardType</var-value>
</var>
</field>
typeで指定されたプロパティからカード会社名が取得できない場合、validationは失敗します。


対応しているカード会社と、typeで指定されたプロパティで使用できる値は次の通りです。

カード会社認識できる値 (大文字・小文字は問いません)
VISAvisa
Master Cardmaster または mastercard
JCBjcb
アメリカンエクスプレスamex
ダイナースクラブdiners または dinersclub


あとは有効期限のチェックメソッドを作らないと。これは月と年で二つにフィールドが分かれるとちょっと面倒だけど、ルールそのものは今日の年月より後かどうかだけなのでシンプル。

Posted by otsuka : 05:11 | Comment (0) | Trackback (0)

Java | Using Struts 1.2.1 with JDeveloper 10g

Using Struts 1.2.1 with JDeveloper 10g

MEMO。

Posted by otsuka : 03:00 | Comment (0) | Trackback (0)

2004年7月29日

Java | JSP File Browser

Jsp File Browser

via marsのメモ

MEMO。

Posted by otsuka : 18:02 | Comment (0) | Trackback (0)

Java | Struts errorMsg Tag

入力フィールドのすぐ横や下にエラーメッセージを表示したい場合、その箇所に<html:errors property="name">と書いておけばよい。が、例えば、エラーメッセージを赤く表示したいと思ったら、エラーがあるかないかの条件分岐が入るのでJSPのコードが複雑になってしまう。

ApplicationResources.propertiesでerrors.prefix等を設定する手もあるけれど、MVCのVの範疇のことをクラスパスに置いてあるpropertiesファイルに設定するのも違和感があるし、そもそも複数のHTMLフォームのエラーメッセージに同じprefixが適用できるわけじゃない。

そこで、昨日のwhenErrorタグに続いて、errorMsgタグを作成した。

errorMsgタグのproperty属性で指定したプロパティにStruts Validatorが発見した入力エラーがあった場合、タグで囲まれた文字列を出力します。その際、「$$」をエラーメッセージに置き換えます。property属性は必須です。


(例)

<html:text property="name" />
<struts:errorMsg property="name"><p class="err-msg">$$</p></struts:errorMsg>
上記のようなJSPでは、次のような出力になります。

・nameプロパティに入力エラーがない場合

<input type="text" name="name" value="" />
つまり、何も出力されません。

・nameプロパティに入力エラーがあった場合

<input type="text" name="name" value="" />
<p class="err-msg">名前を入力してください。</p>

taglibのソースとtldファイルはここにアップしてあります。Struts 1.2.1用です。
ozacc-struts.zip

Posted by otsuka : 02:26 | Comment (0) | Trackback (0)

2004年7月28日

Java | Struts whenError Tag

HTMLフォームで、入力エラーがあったフィールドの色を変えたりして目立たせたい。これをStrutsのValidatorと連動させて何とかできないものか考えてみた。

<html:text>タグとかにonErrorStyleとかonErrorClass属性があれぱよかったんだけど、そんなものはない。じゃ、タグクラスを拡張して自作してしまおうかとも思ったけど、視点を変えてJavaScriptで処理できないかと考え、以下のようなwhenErrorタグを作ってみた。


<struts:whenError excludes="name, furigana">
document.forms['formName'].elements['$$'].style.background = '#EEEEEE';
</struts:whenError>
上記例の場合、エラーがあったプロパティのうち、nameとfuriganaを除いたプロパティ名が「$$」に代入されて出力されます。

例えば、name、email、telプロパティにエラーがあった場合、以下のようなJavaScriptが生成されます。
<script type="text/javascript" language="javascript">
<!--
function doWhenError() {
// email
document.forms['formName'].elements['email'].style.background = '#EEEEEE';
// tel
document.forms['formName'].elements['tel'].style.background = '#EEEEEE';
}
//-->
</script>
上の場合、nameプロパティはexcludes属性で指定されているので除外されます。エラーのプロパティがなかった場合には、次のJavaScriptが生成されます。
<script type="text/javascript" language="javascript">
<!--
function doWhenError() {
// no error
}
//-->
</script>
そして、<body onLoad="doWhenError()">と書いておく。


もっと簡単なやり方をご存知の方がいたら、ご教授ください。
taglibのソースとtldファイルはここにアップしてあります。Struts 1.2.1用です。
ozacc-struts.zip

Posted by otsuka : 13:23 | Comment (0) | Trackback (0)

2004年7月27日

Java | アップロード画像ファイルのValidator

アップロードされたファイルの容量、画像フォーマット、画像の縦横サイズ、ついでに英文のワード数をチェックするStruts用のValidatorクラスを作成した。
今まで面倒くさかったアップロード画像ファイルのチェックが、とても簡単にできるようになった。

Posted by otsuka : 04:26 | Comment (0) | Trackback (0)

2004年7月26日

Java | プロパティエディタ

プロパティエディタ

propertiesファイル用エディタ。Eclipseのpropertiesエディタとしては、今までこっちのエディタを使っていたけれど、機能的にも今回のエディタの方が気に入った。

五つ星。

Posted by otsuka : 18:31 | Comment (0) | Trackback (0)

Java | EclipseのAntが実行できなくて困ったの巻

JDKを1.4.2_05にバージョンアップしたら、Eclipse上でAntを実行できなくなった。こんなエラーが。

Specified VM install not found: type Standard VM, name 標準 VM
JREの設定やクラスパス変数も正しく設定されているし、何故だーとイラつきながら、ノートPC上のEclipseの設定を調べたり、エラーメッセージをググってみたりするも解決法が分からず。

一時間ほど格闘したところで、あるプロジェクトのbuild.xmlが実行できた。実行できるものとエラーになるものがある。これでピンときた。Run > External Toolsを選択すると、案の定これまでに実行したAntターゲットの設定が蓄えられていた。つまり、古いバージョンのJREパスが設定されたAntターゲットがキャッシュされていた。これらの設定を全て削除したら解決! つまらないことに時間を費やしてしまった。

Posted by otsuka : 06:33 | Comment (0) | Trackback (0)

Java | デフォルトのヒープサイズ

dW : Java technology : パフォーマンスへの目: 開発プロセスを改善する

The Sun 1.4 JVMでの最大ヒープ・サイズのデフォルト値は64メガ・バイトです。


MEMO。

Posted by otsuka : 00:35 | Comment (0) | Trackback (0)

2004年7月21日

Java | DTDの設定

Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"); transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "-//Apache SoftWare Foundation//DTD Struts Configuration 1.1//EN");
XMLを読み込むのはこれまでにやったことあったのだけど、今回初めてXMLの出力に挑戦。

DTDの出力の仕方が分からなかったのだけど、上のページを見て解決。

Posted by otsuka : 23:59 | Comment (0) | Trackback (0)

Java | Email Validator for Struts 1.1

Struts 1.1のvalidation-rules.xmlに設定されているJavaScript版email validatorは、infoドメインとか四文字のトップレベルドメイン名ではエラーになってしまう。こんなことに今頃気づいた。infoドメイン自体の利用者がまだわずかなので、影響はほとんどなかったと思うけど。

1030行目を

(domArr[domArr.length-1].length > 4)) {
として回避。

Posted by otsuka : 13:58 | Comment (0) | Trackback (0)

2004年7月12日

Java | public boolean hasXxxx()

JavaBeansのシグネチャ規約に則れば、boolean値のGetterメソッドは、getXxxx()かisXxxx()でなければいけない。でも意味的にhasXxxxと命名したい場合が多々あり、EL内で使うことも考えて普段は

public boolean hasFoo() {
return foo;
}

public boolean getHasFoo() {
return hasFoo();
}

と同内容のメソッドを重複して定義してます。

でも、二つメソッドを定義することに対して何となくスッキリしない。こういう場合どうすればいいのでしょう?
hasXxxx()をget○○Xxxx()またはis○○Xxxx()とスマートに言い換える汎用の語句○○はあるのか?

外国語学部英語学科卒業のくせに分かりまへん。そう言えば、前務めていた会社のラスボスに「お前は受験英語の成れの果てだからさ」と辱められた(?)事があります。

Posted by otsuka : 16:26 | Comment (2) | Trackback (0)

2004年7月 2日

Java | 絵で見るVelocity

MEMO。絵で見たところで難しい。

Posted by otsuka : 18:33 | Comment (0) | Trackback (0)

2004年6月21日

Java | ICU4J 3.0

独り言のようなもの経由

3.0リリース。2.8をテストしていたとき、実行速度があまり速くないと感じたのだけど、3.0ではパフォーマンスは向上してるかな? 「ICU 3.0 includes the latest bug fixes, locale/charset updates, and performance/build/porting enhancements.」とあるので、ちょい期待。余裕ができたら試してみよう。

Posted by otsuka : 04:43 | Comment (0) | Trackback (0)

2004年6月10日

Java | 例外のロギング

先日書いた例外のログをとる場所について、ひがさん、縣さんのエントリーが参考になります。

http://d.hatena.ne.jp/higayasuo/20040610#1086820307
http://diary.hatena.ne.jp/agt/20040609#p2

縣さんは検査例外に関しては、「例外をthrowするクラス」で実行時例外に変換&ログを取り、さらに「プレゼンテーション層でサービスを呼び出すクラス」でログを取っているようです。呼び出し元で二重にロギングされても大した問題ではないとしています。確かに二重でログを取ることは別に問題にはならないと思います。

そんなことよりCommons LoggingのLogインターフェースに

log.error(e.getMessage(), e);
Throwableなオブジェクトを第二パラメータに指定するメソッドシグネチャがあることを初めて知った。

Posted by otsuka : 10:53 | Comment (0) | Trackback (0)

2004年6月 8日

Java | ダイコン時代の設計手法 - 例外処理

catch禁止。間違いない。

J2EEシステムデザインを読んでからは、スローする例外のほとんどは実行時例外を選ぶようになり、それにともなってログや例外の変換以外、catchすることはなくなった。その実行時例外はそもそも回復が不可能なので、catchしたところでなす術がない。なので、Strutsまで例外は送られることになる。

ただ、いつも迷うことが一つ。例外のログをどの層でとるべきなのか。例えば、DAO層で発生した例外は、サービス層、プレゼンテーション層も通ることになり、基本的にどの層でもcatchすることはできる。


悩んでたら、もう時間だ。今日は六本木でお仕事。遠い・・

Posted by otsuka : 10:15 | Comment (4) | Trackback (0)

2004年6月 7日

Java | .Net - Java

.Netの勉強を始めようかと考えていて、OpenAMFのように.NetからJavaオブジェクトを使うことはできないものかと調べていたら、Ja.NETというソフトを見つけた。でもコマーシャルソフトで値段も高い。

Posted by otsuka : 22:23 | Comment (0) | Trackback (0)

Java | Tomcat Struts Module

Use this for more rapid Struts application development. It reloads your application every time the struts-config.xml file is modified.
おっ、便利そう。
Posted by otsuka : 16:12 | Comment (0) | Trackback (0)

2004年6月 4日

Java | Struts tiles-el

<tiles-el:insert>
	<tiles-el:put name="title" value="日本語" type="string" />
</tiles-el:insert>
putタグのvalue属性値で日本語を指定すると例外がスローされる。EL対応じゃないないtiles taglibを使えば大丈夫だったので、tiles-elがどっかおかしいと思う。後で調べてみるべし。

5/31付けのビルドを使用。

javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "value" with value "???": Lexical error at line 1, column 2.  Encountered: "\u672c" (26412), after : ""
	org.apache.taglibs.standard.lang.jstl.Evaluator.evaluate(Evaluator.java:140)
	org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager.evaluate(ExpressionEvaluatorManager.java:112)
	org.apache.strutsel.taglib.utils.EvalHelper.evalString(EvalHelper.java:74)
	org.apache.strutsel.taglib.tiles.ELPutTag.evaluateExpressions(ELPutTag.java:244)
	org.apache.strutsel.taglib.tiles.ELPutTag.doStartTag(ELPutTag.java:228)
このスタックトレースをから判断すると、JSTL実装に問題があるのかな。
Posted by otsuka : 12:50 | Comment (0) | Trackback (0)

2004年6月 1日

Java | MappingDispatchAction

Struts 1.2の新クラス。CVSのソースを追ってみた。名前から分かるとおり、DispatchActionのサブクラスで、Actionマッピングのparameter属性値と同じ名前のメソッドをリフレクションで取得し、実行するだけのシンプルなもの。

DispatchActionは、URLパラメータでメソッド名を指定するのがイヤでほとんど使わなかった。MappingDispatchActionは、メソッドの数だけActionマッピングが増えてしまうけど、それぞれのActionパスに対してValidatorを適用できる利点がある。

関連するユースケースのまとまり単位でMappingDispatchActionクラスとサービスインターフェースを作るのがスマートなデザインだろう。

気になったのが、キャンセルハンドラのcancelled()メソッド。1.1の時も自作のBaseActionの中でキャンセルハンドラを実装していたので目新しいものではないのだけど、MappingDispatchActionでも全体のメソッドでひとつのcancelled()メソッドしかない。
つまり、readとupdateのDispatchメソッドを実装したとしても、キャンセルハンドラはこれらのメソッドで共用しなければいけない。これじゃ使えない。希望としてはメソッドひとつにつき、キャンセルハンドラも1つ。read()とupdate()メソッドがあるなら、readCancelled()、updateCancelled()というハンドラを呼び出してくれるのが便利。

さらに、マッピングのparameterがnullならサブクラスで実装されるexec()メソッドを呼び出すことで、普通のActionとしても使えるようにしたい。こうすれば、基本的にBaseMappingDispatchActionひとつあれば済むことになる。(LookupDispatchActionは滅多に使う機会はないので)

この二つの点を中心に改良したマイMappingDispatchActionを作ったりして、今日の自習時間を過ごす。次のプロジェクトからは、Struts 1.2で。

Posted by otsuka : 23:38 | Comment (0) | Trackback (0)

2004年5月31日

2004年5月23日

Java | Tomcat Plugin For M9

Eclipse 3.0M9で、Sysdeo Tomcat Pluginの一部機能が作動していないことに気づいた。かなり参っていたところ、M9対応版を発見。対応早いなあ。マジ感謝。

Posted by otsuka : 23:47 | Comment (0) | Trackback (0)

2004年5月22日

Java | Eclipse 3.0M9

kakudaさんからのコメントを読んで、辛抱溜まらずEclipse 3.0M9をインストールしてみました。もともとプロジェクトデータのディレクトリは分けていたので、移行自体はすんなり。U/Iが随分きれいになったというのが起動後の第一印象。

プラグインはImprove Resin Launcher、Sysdeo tomcat、Spring Beans、Easy Explorerの動作を確認。
XML BuddyはM8だとクラッシュするかもよ、みたいなことが書いてあったのでインストールしなかったのだけど、実際はどうなんだろう? 人柱やってる人がいたらコメントくださいませ。

CVSのコミットコメントのエンコーディング指定がようやく実装された。ソースコードはEUCで、コメントはShiftJISのちぐはぐな状態からやっと開放され、WindowsでEclipseを使ってない人に不便をかけずに共用できる。
今CVSレポジトリにあるソースファイルのコメント部分をEUCに一気に変換する方法なんてあるのでしょうか?

Posted by otsuka : 21:10 | Comment (1) | Trackback (0)

2004年5月20日

Java | Ant 1.6

久しぶりにAntファイルを書いていたのだけど、こんなタスクないのかなーと思ってググると大体1.6で実装されていた。

でもEclipse上ではAnt 1.6が使えなかった。何か方法はないのでしょうか?

Posted by otsuka : 22:52 | Comment (9) | Trackback (0)

2004年5月18日

Java | Flow4J

dot.Diary経由

MEMO。

Posted by otsuka : 15:47 | Comment (0) | Trackback (0)

2004年5月13日

Java | JPEG画像 CMYK→RGB

カラースペースがCMYKで保存されたJPEG画像をRGBに変換したいのだけど、その方法が皆目検討つかない。ImageMagickを使えばできるようだけど、PureJavaでいきたいところ。

JPEG Metadataの理解はこの目的に近づいているのだろうか? とりあえず後で読んでみるべし。

Posted by otsuka : 18:53 | Comment (0) | Trackback (0)

Java | Commons-IO 1.0

Jakarta Commons Team is happy to announce version 1.0 of the Jakarta Commons-IO library. Jakarta Commons-IO contains utility classes, stream implementations, file filters , and endian classes.

リリース。FileUtilsが好き。

Posted by otsuka : 01:15 | Comment (0) | Trackback (0)

2004年5月12日

Java | Struts Tiles 動的にページ選択

[Tiles] ランタイムにダイナミックにページを選ぶ

MEMO。

Posted by otsuka : 09:36 | Comment (0) | Trackback (0)

2004年5月 6日

Java | Tapestry Article

MEMO。

Posted by otsuka : 15:31 | Comment (0) | Trackback (0)

2004年5月 4日

Java | ImageFilter

MEMO。ImageFilterライブラリ。

Posted by otsuka : 23:35 | Comment (0) | Trackback (0)

Java | 画像ファイルのロードの比較

MEMO。

Posted by otsuka : 19:56 | Comment (0) | Trackback (0)

Java | Log4j SMTPAppender 日本語対応

SMTPAppenderで日本語を正しく扱うことができません。そこで、SMTPAppenderを日本語で扱えるようにしてみました。オリジナルのlog4j-1.2.8.jarの代わりにlog4j-1.2.8-ja.jarを用いて、パラメータに以下を追加してください。
<param name="Charset" value="ISO-2022-JP" />

MEMO。

Posted by otsuka : 15:27 | Comment (0) | Trackback (0)

2004年5月 1日

Java | Tapestry入門記

ひがさんによるTapestry入門記。in Actionより分かりやすい。

Posted by otsuka : 22:32 | Comment (0) | Trackback (0)

2004年4月26日

Java | TapestryとURLパラメータ

Tapestry in Actionを85ページ読んで、いくつかサンプルを動かしてみたけど、まだピンと来ない。

ここまでで気づいた点として、Tapestryが生成するURLが気に入らない。こんなこと言ったら元も子もないんだけどさ。
Amazonでもそうなんだけど、人にとって意味をなさないURLは好きじゃない。例えばサイトマップのページなら、www.example.com/sitemap/index.html とか www.example.com/sitemap.html といったURLが望ましい。Tapestry使うと多分 www.example.com/app?service=page/Sitemap こんな感じになるのかな。全く意味をなさないわけじゃないけど、スマートじゃない。@DirectLinkなんか使った場合は、パラメータがもっと複雑になるはず。

他所のサイトならともかく、自分が作るサイトがそういうURLになるのは抵抗がある。パブリック向けのサイトでは、URLもデザイン対象の一つだと思ってるから。
Tapestryはまだよく分からないので、実は柔軟にURLパスを設定できるのかも知れないけど。

こんなことを書いておきながら、そのうちTapestryを使い始めて、「URLなんて大したことじゃないよ」と言ってそうな気もする。うん、多分そうなる。

Posted by otsuka : 06:01 | Comment (0) | Trackback (0)

2004年4月24日

Java | Generating Images with JSPs and Servlets

MEMO

Posted by otsuka : 15:21 | Comment (0) | Trackback (0)

2004年4月21日

Java | CronTrigger * と ?

The '?' character is allowed for the day-of-month and day-of-week fields. It is used to specify 'no specific value'. This is useful when you need to specify something in one of the two fileds, but not the other. See the examples below for clarification.

「?」の使い方が、読んでもよく分からない。例を見ると、必ず一つは入ってるんだけど、「*」でもいいような気がする。う~む。

Posted by otsuka : 22:28 | Comment (2) | Trackback (0)

2004年4月19日

Java | Migrating to Velocity

MEMO
後で読むべし。

Posted by otsuka : 23:53 | Comment (0) | Trackback (0)

2004年4月 7日

Java | I LIKE GREEN BAR VERY MUCH

20040407.gif

僕はテストが嫌いだ。いや、テストすること自体は好きだ。テストを実行する環境とテストケースを作るのが嫌いだ。とても面倒だから。でも、このグリーンのバーを見ると、そんな面倒な作業を行った苦労も忘れて喜んでしまう。

今回のプロジェクトこそ、最後までテストケースを作り続けよう。「最初のうちだけテストする」のテスト・ファーストにならぬよう。

今夜は無事にグリーンバーが出たので、これから"24"を観ることにする。レッドバーでもきっと観たと思うけど。

Posted by otsuka : 00:17 | Comment (1) | Trackback (0)

2004年4月 3日

Java | Fast Lane Readerパターン

随分前に、HibernateDAOとJDBC DAOを使い分けることについて触れたけど、似たような目的のJ2EEパターンがあることを今日知った。

Posted by otsuka : 00:18 | Comment (0) | Trackback (0)

2004年4月 2日

Flash, Java | DTO for Flash Remoting

Flash Remoting経由でやりとりするオブジェクトのクラスは、Flashで必要なプロパティだけをまとめた専用のクラスを作った方が良さそうだ。J2EEデザインパターンのDTOと同じような感じで。ただ、そうなるとFlash Remoting用にそのDTOを返すサービスメソッドを作らねばならない。

Posted by otsuka : 19:11 | Comment (0) | Trackback (0)

2004年3月31日

Flash, Java | OpenAMF CVS版

以前に書いたOpenAMF 1.0 RC5の不具合ですが、3月初めにCVSのコードは修正されていました。

ソースを見たら自分とほぼ同じコードで解決していたので、ちょっと嬉しい。ASTranslator.fromActionScript(Object asObject, Class desiredBeanClass)はprotectedだったけど、ASTranslator 1.5.6でpublicに戻された模様です。

Posted by otsuka : 19:14 | Comment (0) | Trackback (0)

Java | Javaグラフィック

画像ファイルに対して動的にいろいろと処理を施したいと思って、最近はJavaのグラフィック処理について勉強中。

Flash Remotingと組み合わせれば、面白い表現がブラウザ上で出来そうな予感。キーとなるクラスは、java.awt.image.PixelGrabber みたい。

Posted by otsuka : 17:54 | Comment (0) | Trackback (0)

2004年3月30日

Flash, Java | org.openamf.RequestContext

I committed a new class into OpenAMF's CVS repository.

The new class is org.openamf.RequestContext

This class provides easy access to the HttpServletRequest object and the HttpSession object.

Application developers can use these static methods:

RequestContext.getHttpServletRequest
RequestContext.getHttpSession

OpenAMFのMLから。HttpSessionを簡単に取得できるようになるのは便利そう。

Posted by otsuka : 00:14 | Comment (0) | Trackback (0)

2004年3月29日

Java | Seasar勉強会

Seasar勉強会のお知らせ

Seaserは興味がありつつも全く追えていなかったので、何とかスケジュールを調整してこの勉強会に参加しておきたいところ。

Posted by otsuka : 12:18 | Comment (0) | Trackback (0)

2004年3月24日

Java | Job Scheduling

MEMO。後で読むべし。

Posted by otsuka : 17:48 | Comment (0) | Trackback (0)

2004年3月18日

Java | IoCの解説

キスとかInjectionとか、なんかエロいよね。キスを卒業した時点で、Injectionも卒業してるわけでしょ。Bが抜けてるじゃん。(意味不明)

Posted by otsuka : 23:25 | Comment (5) | Trackback (0)

2004年3月10日

Java | 続・ICU4J

Normalizer.normalize(
    "全角英数字や半角カタカナ",
    Normalizer.NFKC);
この一行で「全角英数字や半角カタカナ」で指定した文字列が半角英数字と全角カタカナに変換されて返ってくる。PHPではこんなのは組み込み関数で簡単にできるけど、前にJavaで似たようなクラスを作ったときは結構大変だった。もっと前から知っていれば・・・

ICUを使って西暦-和暦の変換する方法が分からない。誰か知ってたらご教授ください。

その他のクールな変換機能。変換速度は遅いので注意。

Transliterator t = 
  Transliterator.getInstance("Hiragana-Katakana");
String result = t.transliterate("ひらがながカタカナに");
System.out.println(result); // ビラガナガカタカナニ
Transliterator t = 
  Transliterator.getInstance("Hiragana-Latin");
String result = t.transliterate("ひらがながカタカナに");
System.out.println(result); // hiraganagaカタカナni
Posted by otsuka : 22:54 | Comment (0) | Trackback (0)

2004年3月 9日

Java | ICU4J

MEMO。和暦の変換や全角・半角の変換など。

Posted by otsuka : 16:37 | Comment (0) | Trackback (0)

2004年3月 4日

Java | JSP 2.0 Tag Function

JSP 2.0で導入されたTag FunctionとSimpleTag、どちらもTaglib開発をこれまでよりも簡単にしてくれたんだけど、HttpServletRequestを取ってこられないのが不便。まあ、HttpServletRequestが必要になるタグなんて滅多にないからいいんだけど。

Posted by otsuka : 17:12 | Comment (0) | Trackback (0)

2004年2月22日

Java | MfDate

「P of EAA」のサンプルで時折MfDateという、おそらくDateのラッパークラス