2009-01-01から1年間の記事一覧

Wicket使用を準備

もう、他人が作ったシステムで、Seasar や Spring、 などを使う事が優先された、食い散らかしのような案件を引き継いだり、 そこで発生するSeasar や Spring のような設定ファイル地獄は嫌だ。 ロジック系で外側リソース管理で妥協できるのはSQLぐらい。 や…

JNDI コンテキスト作成してみる

先日の 記事で書いた AbstractXmlHandler と XmlParser を利用して、DBアクセスの為のJNDI、 コンテキスト作成をリメイクした。 バッチ処理と、どのWeb環境、Tomcat, JBoss , WebLogic でも自分で DataSource コンテキストを管理すれば、どこでも1…

WTPでDataSource

Eclipse WTP で、DataSource を使う場合、 WebContent/WEB-INF/META-INF の下に、context.xml を置く。 Tomcat の場合、、 <Context docBase="projectname" path="/Foo" reloadable="true" source="org.eclipse.jst.j2ee.server:sjp"> </context>

Teeda HTML エスケープ文字の無効化

自分はSeasarが嫌いだ。だから、あまり書きたくない。 <html xmlns:te="http://www.seasar.org/teeda/extension" xmlns:f="http://java.sun.com/jsf/core"xml:lang="ja" lang="ja"> <span id="jScriptTag" te:escape="false"/> で、span タグ ID が、jScriptTag の置き換えでエスケープされないように。</span></html>

ListMultimap の置換

Google の ListMultimap の List<V> replaceValues(K key,Iterable values) が、置き換え対象が、Iterable であり、結局はKeyに紐つく全体を置き換えることに なり、リストの1要素だけ置き換えたい場合に不便である。ArrayListMultimap は、finalなので 継承は</v>…

XML読込みを整理

XML読込みを整理してみる。ResourceBundle使用の恩恵があるはず。 /** * XML 解析インターフェース. * * AbstractXmlHandler の createParser メソッドで、XMLファイル baseName と * AbstractXmlHandler 継承したインスタンスを生成して作成される。 * * Xm…

Predicate に感動

Google collection Library で感動したのは、 com.google.common.base.Predicate com.google.common.base.Function com.google.common.collect.Collections2 である。 以下、サンプル、User Beanクラスに対して import java.util.Date; public class User{ p…

MultiSet

Google collection のMultiSet → 統計処理に便利 Multiset<String> counter = ConcurrentHashMultiset.create(); counter.add("Red"); counter.add("Blue",2); counter.add("Red",3); counter.add("Green"); counter.add("Red"); //Set<String> colors = counter.elementSet(</string></string>…

2重のMap

ネストしたMap、つまりMapに格納される値がMapで構成されるMap を扱うのは面倒だったりする。 そこで考えたのが、以下のインターフェースと実装クラスである。 import java.util.Collection; import java.util.Map; import java.util.Set; import java.util.…

MultiMap

Google colleciton Library の使用は、とにかく待望のMultimapであろう。 Multimap<Integer,String> map = ArrayListMultimap.create(); map.put(1,"1A"); map.put(1,"1B"); map.put(2,"2A"); map.put(2,"2C"); map.put(2,"2B"); map.put(3,"3A"); map.put(4,"4A"); map.put(</integer,string>…

NULL可能性ありの比較

NULLの可能性のあるオブジェクトをeqaulsで比較するとき、 昔は、ごちゃごちゃとif文を書いたものだ。 でも今は。。。 public static <T> boolean eqauls(T t1,T t2){ if (t1==null && t2==null) return true; if (t1 != null && t2 != null) return t1.equals(</t>…

挿入制限つきのコレクション

Google collection Library の Predicate を読んで、思いついたのがこれ。 ソースは static メソッドを提供するものと、3個の interface と public でないクラス2個の 合計6個 -------------------------- import java.util.Comparator; import java.util…

Google collection Libraryは未だRC

ようやく使ってみる気になってきた Google collection Library 6月2日にRelease Candidate 2 、RC2版が出ている。 以前、このライブラリを使用してた人がいたが、どうしてるだろう。 メソッドも少し変わったみたいだが。。。 こんなものもある、、 com.googl…

Java祝日計算

祝日計算をするJavaクラスを作成した。 ・春分・秋分の日は、『海上保安庁水路部 暦計算研究会編 新こよみ便利帳』による計算式を使用 ・国民の休日、振替休日も計算 ・祝日の新制度の変更、保守の為に敢えて1ソースファイルの構成としている。 ただし、200…

Teedaに泣かされた

Seasar Teeda を使っていて、TreeNode を描画させ、イメージをクリックすると JavaScript エラー発生! 原因を探すにとても苦労した。 自分の検索の仕方が悪いのかもしれないが、それにしてもこんなルール、理屈がわかりにくい。 ルールから、Storyが見えて…

バインド定義を蓄積の一歩

Custom Injection で紹介された、TypeListener をこんなふうにすれば まとまってくる。 Module クラスをいろいろ書いて蓄積していく戦略が見えてくる。 (ただ、インナークラスにまとめただけだが、拡張性を 隠蔽している点が良いのでは。。) import java.l…

参考に

Custom Injections として紹介されたもの class Log4JTypeListener implements TypeListener こう書かれると面白そうである。 http://code.google.com/p/google-guice/wiki/CustomInjections

もしかしてHot!

先日見つけたcron4jのプロジェクトグループは他にも面白そうなものがある。 http://www.sauronsoftware.it/projects/home/ web-grabbing や、 SSL対応のFTP、BASE64 エンコードデコード、 実行可能なJAR→Windows EXEの作成など、 遊んでみようと思う。

パーサーのせい?

Seasar の動的SQL を記述していて、想定どおりにならなかった。 IF文節を where句で書いていたのだが、 /* IF ... */AND active = /*param.active*//*END*/ と書いたら思い通りにならなかった。 "/*" と"IF" の間は、空白文字を挟んではいけない。 /*IF ...*…

プロパティのバインド(2)

先日の続き、アノテーションをスーパーインターフェースにしたクラスの利用で、 いよいよ、バインドする手順。 aaa.proerties という属性ファイルに記述された属性をセットする Google guice インジェクションである。 import java.util.Enumeration; import…

プロパティのバインド(1)

com.google.inject.name.Names の bindProperties は楽であるが、 インジェクトされる側のコードは、 @Inject @Named(key) を並べることになるので、インジェクトされる側のコードだけを読むと 他のバインドとの区別はしにくい。インジェクトされる側のコー…

cron4j

以前、Windows 環境の開発に入る前に考えたcronみたいなものをJavaで書いたが、同じ頃、世の中には、 cron4j なるものが出ていたのを今更、知ってかなりショック!何をやっていたんだ。 http://www.sauronsoftware.it/projects/cron4j/ 自分で書いたのが馬鹿…

昔ならすぐに書いたシェル

シェルスクリプトの中で、沢山CLASSPATH セットして実行するためには、こう書く。 #!/bin/bash cd /opt/hogehoge export CLASSPATH=$CLASSPATH:. for jarfile in `ls webapp/WEB-INF/lib/ | grep '\.jar$'` do CLASSPATH=$CLASSPATH:webapp/WEB-INF/lib/$jar…

わかりにくいSVN設定

EclipseでSVNを使用していて、わかりにくかったのが、ファイルバージョンを埋め込むキーワード設定を 個々のファイル選択でなく、全体で設定して適用させる方法。 「設定」→「チーム」→「SVN」→「プロパティ構成」 →「自動プロパティ」タブ選択→追加 ファイ…

エポック秒

Perlの仕事を離れて久しく、MySQLの使用で久々にエポック秒 (1970年1月1日0時0分0秒からの秒数)をこねくり回す機会がやってきた。 いや、MySQLだからでない、リプレース前のシステムが Perl だからだ。 MySQL なら、例えば、こんなかんじ、 select UNIX_TI…

テンプレートをInject

Google Guice2.0 を知ってから、今までラッピングして書いてたものを、分解し 組み直しの傾向がある。 Velocityテンプレートを生成インジェクトさせる @Provides を書いてみる。 この色の部分はリテラルで書いているが、 Guice の Module に実装させるものの…

foreach文

Velcocity の foreach 文、よく List<E> を渡して、展開させることをしていた。 じつは、Set を渡して動作をさせたことがなかった。 → 実行してみる。 「なんだ!使えるじゃないか!」さっそく仕事で使うことにする。 では、Map を渡すと、Key と Value のどち</e>…

new 抽象クラス名{}

インターセプタのバインド定義、com.google.inject.AbstractModule を実装時の configureメソッドで記述したインターセプトが使用するリフレクション対象クラスを 指定させる先日のFtpInterceptor は気持ちわるい。 そこで、インターセプタを抽象クラスにし…

インターセプタのバインド

用意したインターセプトのバインドは、難しくない。 先日のFtpInterceptorコンストラクタに対象Class変数を渡す方法はあまりよくないかも知れないが、 とりあえず、以下のとおり。 import com.google.inject.AbstractModule; import com.google.inject.match…

昨日のつづき

今日ここで書きとめておくのは、インターセプタそのもの。 呼び出し側から隠蔽するところ。 残りは、アノテーションの記述とインターセプタにバインド定義するもの。 import java.lang.annotation.Annotation; import java.lang.reflect.Field; import org.a…