cypher256's blog

Pleiades とか作った

2008-04-01から1ヶ月間の記事一覧

環境プロパティー

通常、業務システムを開発する場合、色々な設定値をどこかに格納しておく必要があります。DB だったり、プロパティー・ファイルだったりするのですが、今回のシステムではプロパティー・ファイルを使いました。そこで、環境による違いを吸収するために、勝手…

toString

共通の親エンティティに toString を実装し public フィールド値を出力されるようにすれば色々便利です。これは特に S2JDBC のエンティティに限ったことではありません。 @MappedSuperclass public class AbstractEntity implements Serializable { public S…

JSP で Action に指定した roles を使う

SAStruts では Servlet コンテナの認証を使った場合、アクションの roles 属性を指定することにより、アクセス制御が可能です。これでセキュリティは守られます。でも実際のところ、その権限によって、画面にメニューやリンク、ボタンの表示/非表示を切り替…

JSP、JSTL、EL で定数を使う

今回のプロジェクトでは定数クラスは設計書から自動生成されるようにしました。でもせっかく定数クラス作っても、JSP ではベタ書きしていたり、JSP で定数使うのはおかしいとか言うエラい人もいたりしますが、やっぱり JSP でも定数使いたい場面はあります。…

SAStruts 採用説得パターン

今回のシステムは色々な会社が開発に参画しているのですが、END のお客様に説明した時にちょっと変わった反応が。あとで分かったのですが、他の人が Struts なので開発者はすぐ集まりますとか周知していたらしいです。当事者の方も見ているかもしれませんが…

SAStruts を選んだ 5 つの理由 - アーキテクチャ

これは私がその都度、俺々フレームワークでやってきた理想形でした。もちろん、すべての問題領域でカバーできるとは思いませんが、私が今まで携わったシステムでは適用しても問題にならないと思います。その昔、エラい人たちが語ってきたものとすべて真逆で…

フォームクラスをアクションとは別にする 5 つの理由

セッションに格納したい場合は作る、っていうのがあれな気がします Struts に慣れている人に違和感がない気がします 最近よくあるフレームワークはプロパティも一緒に持ってるけど、あれはページ単位です サンプルでは小さいけど、実システムでは一緒にする…

セッション管理

上でも書いてますが、フォームは InstanceType.SESSION 固定です。画面入出力情報だけでなくセッションに持ちたい情報はすべてフォームに持ち、ユーザに関する情報はすべて User オブジェクトにもち、アクションやロジックにインジェクションされます。HttpS…

JavaBeans プロパティ命名ルール

JavaBeans 仕様では先頭の連続する 2 文字が大文字だと先頭が小文字になりません。Struts でハマった方も多いのではないでしょうか? S2JDBC でも厳密にこれに沿っているため、DB のテーブル名が T_HOGE とかだと、S2JDBC デフォルトだとテーブルの外部キー…

フォームとアクションの標準構造

上の「アクションの粒度」で書きましたが、アクションと同じ粒度、つまり 1 機能に対し 1 フォームを作成します。一覧の明細はインナークラスにします。こんな感じ。 追記:下記から transient 指定は削除しました。コメント参照。 @Component(instance = In…

拡張性

Struts もそうですが、SAStruts と S2JDBC もかなり高い拡張性を持っています。汎用的に出来ている分、シンプルとはいえ、プロジェクトや開発メンバスキルにより切り捨てたほうが良い機能もあります。必要な機能のみを周知し、足りない機能は追加する。とい…

JSP2.0 ファンクション

今回のプロジェクトでは 2 種類程度のフォーマットしか使用しない (ほとんどのプロジェクトでそうだと思いますが) ため、フォーマット決めうちの x:date や x:datetime を用意しました。 だと汎用的すぎますもんね。

エンティティの自動生成

今回は Object Browser ER の備考欄だったかにマッピングアノテーションを書いておき、定義書を生成して、そこから Excel マクロでエンティティを自動生成しました。DB への CREATE も Object Browser ER でフォワードエンジニアリングで楽々でした。自動生…

アクションの粒度

アクションは機能単位で作成し、フォーム (Dto) も必ず対で作成。のためか思ったより肥大化せず。フォームはセッションスコープ固定で、メニューなどでセッションから削除。各業務画面では完了画面への遷移時にエンティティなどの大きなオブジェクトのみ削除…

SQL 発行

次のようなインターフェースを持つ Sql クラスを作成し、複雑な SQL に対応しました。このクラスは SQL 文字列とパラメータのリストを持つ単純なクラスです。メソッドは append しかありません。 public class Sql public Sql(boolean isAndOr) publilc Sql …

認証

ひがさんお勧めの BASIC 認証 (+ FORM 認証) の JDBC レルム。どのアクションにアクセスしても、ログイン画面が出るのはやはり便利です。ただ、ユーザテーブルに削除フラグなどがあった場合、認証後に再度 ActionServlet などのサブクラスで SELECT し、判定…

画面部品

Cubby TIPS にあるような画面部品を実現する場合は下記のような感じ。Action に依存しないため、かなり便利です。 common.jsp や header.jsp で dao を getComponent しておく。 JSTL で使用可能にするために検索結果を Beans で BeanMap にコピーする。 例…

ネストしたプロパティで入力チェック

アノテーションによるネストした子Dtoのバリデーションは、複雑なことは対応しないという方針に基づいて、やってくれないのが仕様です。 2008-04-17 - 出羽ブログ 自分でカスタマイズするなら ActionCustomizer を継承し、setupValidator メソッドに少しコー…

SQL 自動生成の結合+ページング「列の定義が未確定」でハマり中

Oracle 10g。S2JDBC の SQL 自動生成で leftOuterJoin で OneToMany の結合をして、ページング指定すると「ORA-00918: 列の定義が未確定です。」が発生。使い方がまずいんでしょうか? 調査中です。 List<TCmp> oyaList = jdbcManager .from(TOya.class) .leftOute</tcmp>…

SAStruts + S2JDBC でサクサクか炎上か

可燃プロジェクトに飛び込むことになりました。下記のような炎上する要素満載。 関係者各社に告知済みのためカットオーバーは伸ばせない 外部仕様を策定した会社は行方不明 外部仕様はあるが、OS も AP サーバも環境もアーキテクチャーも未定 外部仕様を分か…