2009-01-01から1年間の記事一覧
もう、他人が作ったシステムで、Seasar や Spring、 などを使う事が優先された、食い散らかしのような案件を引き継いだり、 そこで発生するSeasar や Spring のような設定ファイル地獄は嫌だ。 ロジック系で外側リソース管理で妥協できるのはSQLぐらい。 や…
先日の 記事で書いた AbstractXmlHandler と XmlParser を利用して、DBアクセスの為のJNDI、 コンテキスト作成をリメイクした。 バッチ処理と、どのWeb環境、Tomcat, JBoss , WebLogic でも自分で DataSource コンテキストを管理すれば、どこでも1…
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>
自分は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>
Google の ListMultimap の List<V> replaceValues(K key,Iterable values) が、置き換え対象が、Iterable であり、結局はKeyに紐つく全体を置き換えることに なり、リストの1要素だけ置き換えたい場合に不便である。ArrayListMultimap は、finalなので 継承は</v>…
XML読込みを整理してみる。ResourceBundle使用の恩恵があるはず。 /** * XML 解析インターフェース. * * AbstractXmlHandler の createParser メソッドで、XMLファイル baseName と * AbstractXmlHandler 継承したインスタンスを生成して作成される。 * * Xm…
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…
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>…
ネストしたMap、つまりMapに格納される値がMapで構成されるMap を扱うのは面倒だったりする。 そこで考えたのが、以下のインターフェースと実装クラスである。 import java.util.Collection; import java.util.Map; import java.util.Set; import java.util.…
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の可能性のあるオブジェクトを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 6月2日にRelease Candidate 2 、RC2版が出ている。 以前、このライブラリを使用してた人がいたが、どうしてるだろう。 メソッドも少し変わったみたいだが。。。 こんなものもある、、 com.googl…
祝日計算をするJavaクラスを作成した。 ・春分・秋分の日は、『海上保安庁水路部 暦計算研究会編 新こよみ便利帳』による計算式を使用 ・国民の休日、振替休日も計算 ・祝日の新制度の変更、保守の為に敢えて1ソースファイルの構成としている。 ただし、200…
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
先日見つけた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 ...*…
先日の続き、アノテーションをスーパーインターフェースにしたクラスの利用で、 いよいよ、バインドする手順。 aaa.proerties という属性ファイルに記述された属性をセットする Google guice インジェクションである。 import java.util.Enumeration; import…
com.google.inject.name.Names の bindProperties は楽であるが、 インジェクトされる側のコードは、 @Inject @Named(key) を並べることになるので、インジェクトされる側のコードだけを読むと 他のバインドとの区別はしにくい。インジェクトされる側のコー…
以前、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…
EclipseでSVNを使用していて、わかりにくかったのが、ファイルバージョンを埋め込むキーワード設定を 個々のファイル選択でなく、全体で設定して適用させる方法。 「設定」→「チーム」→「SVN」→「プロパティ構成」 →「自動プロパティ」タブ選択→追加 ファイ…
Perlの仕事を離れて久しく、MySQLの使用で久々にエポック秒 (1970年1月1日0時0分0秒からの秒数)をこねくり回す機会がやってきた。 いや、MySQLだからでない、リプレース前のシステムが Perl だからだ。 MySQL なら、例えば、こんなかんじ、 select UNIX_TI…
Google Guice2.0 を知ってから、今までラッピングして書いてたものを、分解し 組み直しの傾向がある。 Velocityテンプレートを生成インジェクトさせる @Provides を書いてみる。 この色の部分はリテラルで書いているが、 Guice の Module に実装させるものの…
Velcocity の foreach 文、よく List<E> を渡して、展開させることをしていた。 じつは、Set を渡して動作をさせたことがなかった。 → 実行してみる。 「なんだ!使えるじゃないか!」さっそく仕事で使うことにする。 では、Map を渡すと、Key と Value のどち</e>…
インターセプタのバインド定義、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…