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

フレームワーク・・・

面白い記事だ。 Java EEや.NETはCOBOLやVB6よりも本当に生産性が高いか? - 達人プログラマーを目指して オープンソースのフレームワークはスキルの高い技術者が効率良く開発するためのもの。 開発現場独自のフレームワークは規約(型)にはめることでスキルの…

O/Rマッパーその3

以前こんなことを書いたけど、結局ORマッパーで生成するエンティティクラスってのはビジネスモデルのエンティティそのままなんだよね・・・ ただそれをDBの定義を基にして作っているだけで、DBアクセスのために作っているわけじゃないんだ。 DBから取得した…

時代遅れ

今の客先の環境はjava1.4。 もうサポートも切れてるのに、何でか知らないがバージョンを上げようとしない。 まあ今稼動してるシステムのリプレースが大変なのはわかるけどさ・・・ それはともかく、ちょっとしたツールを作ることになって、ざっと仕様を確認…

またもやGMTの罠。

久しぶりにはまった。 なんでjava.sql.Dateってequalsメソッドをオーバーライドしないんだ? そもそもDBのDATE型に対応するための型なんだから、日付が同じなら一致とみなしてくれれぱいいのに。 まあ一口にDATE型といっても、時間まで保持するRDBもあるけど…

当然?

先日プロジェクトのメンバーに「標準出力って何ですか?」と聞かれた。 ・・・は? 知らない・・・の? 数年javaのシステムやってるはずの人。 (プロジェクトの中では)中堅どころの人。 webサイト作ってるだけならもしかしたら知らないかもしれないが、いく…

プロセスの起動

コンソール限定だけども。 後始末とか意外と知られていないようなので。 public class Main { public static void main(String[] args) { try { run("cmd.exe", "/c", "dir", "/s", "\\*.exe"); } catch (Exception e) { e.printStackTrace(); } } public st…

思い出

面白いのを見つけたので、ちょっと自分の思い出話なんかを。 ここに書かれてるほど極端なのはないけど・・・派遣PG時代の思い出 - Togetter ifの模様 VB5のシステム改修案件であった。 確か10階層くらいは超えてた見事な模様。 If ・・・ Then If ・・・ The…

ORマッパー

というか、薄いDBラッパーのようなものを考えているんだけど、例えばシンプルなSELECTを実行するには Entity e = new Entity(); e.put("column1", "abc"); e.put("column2", "123"); List<Entity> list = Table.select("TABLE1", e); で SELECT * FROM TABLE1 WHERE </entity>…

ジェネリクスの罠。

どえらい勘違いをしていた。 class A{} class B extends A{} List<A> list = new ArrayList<A>(); list.add(new B()); ができないと思っていた。ワイルドカード使おうとしても class A{} class B extends A{} List list = new ArrayList(); list.add(new B()); だ</a></a>…

axis2メモ

axis2への入れ替えはかなり手間がかかりそうだということで立ち消えになった。今までわかった事だけでもメモとして残しておく。 POJOでWEBサービスが作れる。(axis1でも同じ) wsdlは自動生成してくれるが、protectedやstaticメソッドまで含まれるので使い物…

axis2の起動でエラー

以前axis1で作ったWEBサービスをaxis2に入れ替えるという話が出た。 axis2は使ったことなかったので色々調べてみるが、最初の最初でつまずく。 axis2のwarファイルを展開したwebappが起動できないのだ。 よく覚えてないがLogConfigurationExceptionが起きて…

SimpleDateFormat。GMT。オフセット。

SimpleDateFormatでZを指定すると出力される文字。 +0900 言わずとしれたGMTとの時間差を示しているんだが・・・ RFCによると +09:00 が正しい形式らしい。 だもんだから、他の言語の実装とのやり取りを想定したWEBサービスでは使えない。 わざわざ自前で +0…

axis。datetime。Z

axisでのxsd:datetime表記。 yyyy-MM-ddTHH:mm:ss.SSSZ 最後の'Z'がGMT表記(=タイムゾーンオフセット無し)を意味することを初めて知った。 だから日時もGMTに変換されてたのか・・・

Connectionのclose。

ちょっとしたシステムの改修をしたのだが、どうも処理が遅い。 修正したSQLを手で実行してみてもほとんど待たずに結果がとれてるし、はて何なのか・・・ あちこちにストップウォッチ的なコードを仕込んで実行時間を確認したら、Connectionのcloseで2秒程度…

Android ボタン テキスト 配置

近いうちにAndroidアプリの仕事がある『かも』ということで、SDKをインストールしてお勉強。 前から興味はあったんだけどね、まるっきり仕事に関係ないことを会社でやるわけにもいかないし。 これで大っぴらに遊べるわけだ。 まだSDKについてるサンプルをち…

メッセージ管理

プログラムの中ではいろいろメッセージを使用することがある。 ほとんどの場合、メッセージの文言はソース埋め込みではなく、何かしら外部化されているものだが、そのやり方はプロジェクトによって様々だ。 また、自分でちょっとしたライブラリを作っていて…

axis。日付変換の罠

axisを使っていて気になったことが一つ。 xsd:datetimeとjavaの日付を変換する際にGMT・JSTの違いによって9時間の誤差が生じることは以前のシステムで経験があったので、あらかじめCalendarのSerializer/Deserializerをカスタマイズして誤差を吸収していたが…

wsdlの形式

axisでサービスを公開する際にwsdlの形式を選択することができる。 server-config.wsddのserviceタグに設定するstyle属性のことだが、有効な形式はwrapped/document/rpcの3種類かな?一般的なのはdocumentらしいのだが、リクエストデータを表す構造体に妙な…

soapのバージョン指定

WEBサービスを作ることになったので、以前使ったことのあるaxisをいじる。 soapの1.1と1.2と両方対応しているらしいけど、どこで指定するのか皆目わからず。クライアントならそもそも呼び出すメソッドが違うんだけど、サーバーは?1.1のリクエストしか受け付…

ネタ切れ(笑)

いやまだあるにはあるんだけど、ブログの形式で書くには関連するクラスの数が多すぎるんでね・・・ 何か面白いのないかなぁ。 前々から考えてることはあるんだけど・・・ javaのクラスって標準のjdkに含まれてるクラスだけでも膨大な数があるわけで。 中には…

BackupFileWriter

import java.io.File; import java.io.IOException; import java.io.Writer; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /*…

CyclicFileWriter

Log4jの中に自動的に出力先のファイルをバックアップするクラスがあるが、ログだけではなく、自分でファイルに出力する時にもその機能が使えないかと思って、作ってみた。 実際にバックアップする機能は別のクラスになっていて、このクラスはバックアップの…

CountWriter

import java.io.ByteArrayOutputStream; import java.io.FilterWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; /** * 出力した文字数・バイト数を把握する…

IndentWriter

おそらく他の人には使い道の想像がつかないのではないかと思う(笑)以前、コンソールアプリケーションを作ったことがある。 いわゆるバッチ的なものではなく、ユーザーの入力に応答する類のもの。当然いくつかコマンドがあり、そのコマンドのヘルプも表示する…

CountOutputStream

import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; /** * 出力したバイト数を把握するためのStream。 */ public class CountOutputStream extends FilterOutputStream { // カウンタ long[] bytes; /** * 内部…

SystemUtils

Dateクラスの派生クラスを作ろうかとも思ったけど、こっちのほうが使い回しがきくかなぁと。 public final class SystemUtils { private static long offsetCurrentTimeMillis; private static long fixCurrentTimeMillis; private SystemUtils() {} /** * {…

CSV処理

まあ特別なことはこれといってしていない。 ヘッダーの有無とか読み飛ばしとか必要かな・・・? /** * CSVの解析ロジック */ public interface Tokenizer { /** * 1つの文字列を複数の文字列に分割する * @param text * @return */ String[] toToken(String …

KeyBreakProcessor

先日記事にしたCollectionsと似たようなものではあるが・・・時々キーブレイク(コントロールブレイク?)の処理を書くことがある。 先日プロジェクトの新人メンバーが言うには考え方はわかるが、javaでどう書いたらいいかわからないとのこと。 言われてみれば…

ReverseComparator

ソート順を逆にするためのComparator。 これもcommonsプロジェクトに似たようなクラスがある。 実際に使う機会はあまりない・・・ import java.util.Comparator; public class ReverseComparator<T> implements Comparator<T> { private Comparator<T> c; public Reve</t></t></t>…

NumberStringComparator

ありがちと言えばありがち。 文字列を数値としてソートするためのComparator。 import java.math.BigDecimal; import java.util.Comparator; public class NumberStringComparator implements Comparator<String> { @Override public int compare(String o1, String </string>…