A Day In The Life

とあるプログラマの備忘録

java

Spring面白いよ

最近、仕事で本格的にSpringを使うようになってきました。 これがなかなか面白いです。 しばらくSpringの勉強してみようと思ってます。

DispatchActionの拡張ポイント

Struts1.x系のDispatchActionやEventDispatchActionを拡張するなら以下のようにすると良いですよ。 たとえばログ出力処理を共通化するならこんな感じでしょうか。 public class BsaeAction extends EventDispatchAction { @Override protected ActionForward…

コンセプト大事だよね。

最近、Java系のアーキテクチャ整備のお仕事をしています。 整備した環境を展開していろいろなプロジェクトに導入してもらうのが最終目標です。 いろんな人に使ってもらうにあたってターゲットユーザ、どんな人(プロジェクト)に使ってもらいたいのか。世の中…

redirect

今までまったく使ったことなかったんですけど、Strutsでredirectできるんですね。 public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { : 何らかの処理 …

SpringとHibernateと時々Generics。

HibernateとSpringの連携を使って汎用Daoを作ってみます。 Daoって同じようなコードであふれることがよくあるのでGenericsを使って整理するのがポイントです。 まずModelクラスを実装します。 public class Product implements Serializable { private Long …

ダークサイドJava

Struts + Spring + Hibernateが魔の組み合わせと言われるのがようやくわかってきました。 とりあえずメモ。 Strutsは実質FormにString型のフィールドしか使えない。Formからモデルに変換が必要。ドメインモデルにするとFormとの変換が超大変。→オブジェクト/…

総称性(Generics)を使って拡張性の高いクラスを作成する。

オブジェクト指向技術を活用していくための考察第3回目です。 今回は型の総称性(Generics)をうまく使って拡張性の高いクラスを作成していきます。 型の総称性はJavaでも5.0から導入されたので最近よく耳にすると思います。 ただ多くの方はコレクションを扱う…

ビジネス・ルールに合わせた独自データ型を活用する(実装編)

オブジェクト指向技術を活用していくための考察第2回目です。 前回の「ビジネス・ルールに合わせた独自データ型を活用する」では実装例を紹介できなかったので、今回は実際にJavaを使った実装例を紹介します。 それではショッピングモールサイトなんかで使わ…

依存関係逆転の原則

依存関係逆転の原則とは 上位のモジュールは下位のモジュールに依存してはならない。どちらのモジュールも「抽象」に依存すべきである「抽象」は実装の詳細に依存してはならない。実装の詳細が「抽象」に依存すべきであるという原則です。 まずはこのクラス…

いろんなフレームワークで実践されているパターン集

エンタープライズ アプリケーションアーキテクチャパターン翔泳社このアイテムの詳細を見るもう少し訳がしっかりしてればなぁと思うところが何点かありましたが、内容は良かったです。 トランザクションとかデータベースまわりのパターンが6割程度占めてまし…

JSFのエラーメッセージはよくわからんです。

Shaleでテキストボックスとボタンを配置した簡単な画面を作成しました。 無事画面も表示されて順調順調と。 しかしボタンを押すと 変換エラーが発生しました. などというわけのわからんエラーが。。。 どこを直したらいいのやらさっぱりわかりません。 格闘…

Long型フィールドのrequiredバリデータが作動しない。

public class HogeForm extends ActionForm { private Long amount = null; public Long getAmount() {return amount;} public void setAmount(Long amount) {this.amount = amount;} } のようなアクションフォームにStruts-Validatorでrequiredを指定しても…

O/Rマッピングとは何か?

HIBERNATE イン アクションソフトバンク クリエイティブこのアイテムの詳細を見る今使ってるFrameworkはデータベースまわりの機能が非常に弱い。 何とか改良したいなと、じゃあO/Rマッピングの勉強してみるかということで読みました。 Strutsインアクション…

パンくずリスト -実装編-

パンくずリスト実装編です。 たとえば以下のような画面遷移をしたとします。 ちょうど矢印の部分がActionForwardになるので、このActionForwardをActionが呼ばれるたびに以下のようにスタックに保存していきます。 こんな感じ。 これを実装していくわけです…

Strutsを深く理解するなら

STRUTS・イン・アクションソフトバンククリエイティブこのアイテムの詳細を見る少し古い内容もありますがStrutsの生みの親が書いた本だけあって内容が深いです。 いままでなんとなく使ってた機能、「あ〜そういうことだったんだ」みたいな発見が沢山ありまし…

ページを指定してバリデーション

ValidatorFormを使用して複数JSPを1Form(ワンビッグフォーム)で管理するとページごとのバリデーションができなくて困ることがあります。 そんな時はValidatorActionFormを使ってやるとバリデーションをActionごとにできるので便利だったりします。 public cl…

なやみの尽きないチェックボックス

Struts、ActionFormのresetメソッドの話題です。 複数画面で1つのActionFormを使用していて、なおかつチェックボックスが複数画面にまたがって混在する時、以下のようにするとうまくいきます。 public class SampleForm extends ValidatorForm { //画面1で使…

四捨五入(JAVA編)

JAVAで四捨五入する時のやり方。 BigDecimal value = new BigDecimal("2.335"); value = value.setScale(2, BigDecimal.ROUND_HALF_UP); 上記例だと結果は2.34になります。 参考 Java(SE) API 逆引き辞典 関連記事 .NETで四捨五入

テストケースについて考える

メソッドベースのテストとシナリオベースのテストにわける。 メソット名は後から別の人が読んでもわかるように名前を付ける。 Javadocコメントにテストの概要と事前条件、事後条件を書く。 テストコードはJavadoc化してテスト仕様書にする。 参考 JUnit 実践…

積極的に改善しましょう。

現在のプロジェクトではStrutsをベースにした独自フレームワークをつかってる。 いろいろ使ってると改善点とかが結構出てくる。 思いつくままに挙げると 基底Actionを作るときはDispacheActionを継承する。 FormはValidatorActionFormまたはDynaValidatorAct…

Hardcore Java

Java魂―プログラミングを極める匠の技オライリージャパンこのアイテムの詳細を見る 読み応えがありました。 Javaを深く理解したいならこれは読んどいたほうがいいですね。 内容的にはEffective Javaに似た感じですけどあっちより読みやすいです。 マニアック…

iterateタグのidとpropertyは同じ名前にしましょう。

iterateタグのid属性とproperty属性の名前を変えていたため思わぬところでハマってしまった。 public class SampleForm extentds ActionForm{ private List resultList = new ArrayList(); … …… } こんなActionFormがあったとしてJSPで <logic:iterate id="list" name="SampleForm" property="resultList"> … <html:text name="list" property="field1" indexed="true" /> …</html:text></logic:iterate>

シンプルにわかりやすく

軽快なJava―Better,Faster,Lighter Javaオライリージャパンこのアイテムの詳細を見る データアクセス層のプログラムを作成している時に 大規模プロジェクトでとにかく速く作らないといけないから、あまり綺麗に作ろうとせず一定の規則性を持たせて作ったほう…

replaceAllに気をつけろ。

StringクラスreplaceAllとreplaceFirstメソッドの引数は正規表現で指定しないと予期せぬ結果が返ってくることがある。 javadocにはreplaceAll(String regex, String replacement) 指定された正規表現に一致する、この文字列の各部分文字列に対し、指定された…

DBUnitで「data type not recognized」の警告がでる

DBUnitでテストを行ってるとWARNING - XXXテーブル名.XXXXフィールド名 data type (1111, ‘NVARCHAR2’) not recognized and will be ignored. See FAQ for more information. 2006-04-04 19:06:32,281 ERROR testcase.BaseDatabaseTestCase (BaseDatabaseTes…

クラスの直列化って???

クラスの直列化と聞いてもいまいちピンとこない。 Serializableインターフェイスを実装することってよく書いてあるがイメージがわかない。 最近見つけたこの↓ページにわかりやすい説明があったのでメモメモ JavaA2Z

LIKE 句でワイルドカード文字の検索

JAVAでSQLを実行する時、PreparedStatementを使ってます。 これを使ってると文字列連結してSQL文を組み立てるよりもセキュリティー的に安心だしエスケープ文字(シングルクォーテーション、パーセント...etc)も心配しなくていいし普通は問題ないのです。 JDBC…

過去の自分に出会う

現在、自分が半年前に作ったプログラムの修正をしています。 当時はJavaでプログラムを書くのがはじめてだったこともあり、見ているとなんでこんなことやってんの?的な箇所を多々発見してしまいます。 たとえば ArrayList list = new ArrayList(); とか。。…

jarファイル3分クッキング

隣の席のK君にjarファイルについていろいろと教えてもらったのでメモです。 圧縮方法 jar -mcvf MANIFEST.MFのパス名 jarの名前 圧縮したいディレクトリまたはファイル名mはMANIFESTを指定、cは圧縮、vはログを出力、fはファイル名を指定って意味らしいです…

ランク上のプログラムを目指して

Effective Java プログラミング言語ガイドピアソン・エデュケーションこのアイテムの詳細を見る この本にはかなりの影響を受けました。 無駄な継承をしないとか、効率のいいループの回し方などなど目から鱗な内容がたくさんありました。 難しいところもあっ…