ActionでFormに対して処理をするときの私のコーディングスタイル

SAStrutsはActionクラスでActionFormを受け取るときは以下のように書く。 @ActionForm @Resource public FooForm fooBarForm; ここで注意したいのが(SAStrutsユーザーなら誰でも知っているが)、ActionFormは名前でインジェクションされるということ。つま…

Hudson使用時にRangeError: Maximum recursion depth exceeded (form not submitted)がでた時の対処

たぶん、それはあなたがOperaを使用しているのが原因です。あなたがいかにOperaを愛しているかは知りませんが、ChromeやFireFoxを使用することでこの問題を避けることが出来るでしょう。一応情報共有のために書いておきました(笑)

SQLのNOT INはなぜ遅い?

SQL

このあいだ聞かれたときにすぐに答えられなかったから書いとく。あとから考えたら当たり前のことだったんだけどね。結論から言えば、全レコードをシーケンシャルアクセスしなければならないから遅い。以下、それについて具体的な話を展開するけど、最初に断…

SAStrutsで1件だけのメッセージをシンプルに追加する

みんな勝手にやってるような気がするけど一応書いてみる。SAStrutsでリダイレクト後にメッセージを表示したい場合、通常以下のようにすると思う。 ActionMessages messages = new ActionMessages(); messages.add(ActionMessages.GROBAL_MESSAGE, new Action…

SimpleDateFormatで実在日チェックは出来ない

今まで社内のライブラリを使用していたから知らなかったけど、JavaのSimpleDateFormat.parse()で実在日チェックは出来ないのね。 例 フォーマットが正しくなければParseExceptionがスローされるからOKだと思いがちだけど、以下のようなコードでもParseExcept…

サービス公開「みんなの日程表」

自宅サーバでJava製のWebサービスを公開した。 みんなの日程表βこれは以前の私の幹事の経験から作成したもので、みんなの日程の都合をWebで共有できるというもの。幹事になると、みんなの日程の都合を聞いて回らなければならないわけだけど、必ずしも参加者…

MySqlを使用時に、S2Unit4で自動的にロールバックが行われない

と思ったら、MySqlのテーブルタイプがMyISAMだったのがいけなかったらしい。デフォルトだと、テーブル作成時にMyISAMがテーブルタイプとして適用けど、MyISAMはトランザクションをサポートしていないらしい。他のテーブルタイプとしてInnoDBというのがあって…

SAStrutsでリダイレクトした後に一度だけメッセージを表示する

知識不足からちょっとハマったのでメモ。SAStrutsでリダイレクトした画面で一度だけメッセージを表示したい場合の処理コード。用途としては、処理完了後の完了メッセージを表示したいというケースで使える。 Actionクラス public HttpSession session; @Exec…

「メール見出しジェネレータ」を再び公開

以前作った「メール見出しジェネレータ」というサービスを自宅サーバで公開。まぁ、HTML+JavaScriptだけで動くんで、サービスというよりツールですね。興味が出たら使ってみてください。トビの開発室(トップ) メール見出しジェネレータちなみに、自宅サー…

S2UnitでDB削除のテスト

S2UnitによるDBのテストの最後は、削除(DELETE)。今回対象となるのは、論理削除ではなく物理削除。論理削除は、更新系の処理になるのでS2UnitでDB更新のテストを参照のこと。 テストの考え方 テスト用のデータを定義したExcelを用意 ExcelからDBにテスト用デ…

懸案になっていた問題について

そういえばすっかり忘れていたけど、以前「SAStrtusで初回リクエスト時にクラスからアノテーション情報が取得できない?」という問題を取り上げた。とりあえず、この問題はCoolDeployの設定だと発生しないことが分かった。うーん、S2ContainerのHotDeploy機…

S2UnitでDB更新のテスト

昨日のエントリーに続き、S2Unitを使ったDBのテスト方法を見ていきたいと思います。今回は、更新(UPDATE)のテストです。 テストの考え方 テスト用のデータを定義したExcel①を用意 テスト結果期待値のデータを定義したExcel②を用意 Excel①でDBにテスト用デー…

S2UnitでDB検索のテスト

CRUD(Create Reference Update Delete)ってなんて読み方が一般的なんだろう。私は”クラッド”なのだけれど”クルド”って読む人もいるらしい。これは、情報は”生成”され、”参照”され、”更新”され、”削除”される、って意味の言葉だけど、この中で何が一番多いか…

S2UnitでDB挿入のテスト - DBの内容をExcelに書き出す

Seasar2では、SqlReaderとXlsWriterというクラスが用意されていて、DBのテストが簡単に行えるようになっている。 使い方 重要な部分だけみるとこれだけ。 XlsWriter writer = new XlsWriter("FILE_PATH"); sqlReader.addTable("EMPLOYEE"); sqlReader.addTab…

Eclipseのプロジェクト・エクスプローラを使ってWebアプリを快適に開発

Webアプリケーションの開発をEclipseで行っていると、Javaファイルを格納するフォルダと他のWebリソース(.jsp、.css、.js、など)を格納するフォルダがパッケージ/エクスプローラ上で離れているということがよくあります。よほど大きな画面を使っていない…

ジェネリクスを使用してスマートにリストを生成する

以前、どこかのブログで読んで「便利だなー」と思ったきり、すっかり忘れていたのでメモ。 一般的なリスト生成方法 Java5以降で、リストを生成するときは通常以下のようにする。 List<String> list = new ArrayList<String>(); コンパイル時にミスが発見できるジェネリクスを</string></string>…

S2Unitを使ってログイン検証インターセプタを単体テスト

Seasar2には、S2Unitという単体テスト支援ツールが含まれている。ツールと言っても、いわゆるJUnitみたいなもので、実際、S2UnitはJUnitを拡張して作られている。今回は、昨日の記事に書いたログイン検証インターセプタのテストをS2Unitで行う方法を書こうと…

SAStrtusで初回リクエスト時にクラスからアノテーション情報が取得できない?

先日、アノテーションを利用した認証について書いたが、1つ問題が見つかった。初回リクエスト時に、Actionクラスのアノテーション情報がリフレクションAPIで正しく取得できないインターセプタ内で、 invocation.getThis().getClass().getAnnotation(XXX.clas…

SAStrutsでアノテーションを利用したログイン検証

SAStrutsは内部でSeasar2を利用しているので、独自のインターセプタを定義してクラスに織り込むことが出来る(AOP)。Webアプリケーションといえば、ログイン検証はおなじみの処理だが、これはインターセプタを使って実現することができる。以下は、Actionク…

シーケンスを使う場合の注意

S2JDBCを使っていてはまったので日記に書こうと思います。S2JDBCで識別子(ID)を自動生成させるためには、 エンティティのプロパティに@GeneratedValueというアノテーションを付けます。 自動生成のタイプとして指定できるのは、 GenerationType.TABLE ⇒ テー…