2011年8月29日月曜日

Javaで、文字列が空白かどうか調べたいときのTips


if("aa".trim().length() == 0) {
// 半角空白、全角空白、タブとか
} else {
// 文字が入ってる
}

入力チェックのときに使えるかもー

CSS属性セレクタ

input[type="text"] {
height: 16px;
}

的な感じで、属性指定できるんだ。
知らなかった

2011年8月27日土曜日

hibernateでauto increment使うとき

<generator class="native" />

をauto increment使いたいところに記述する。

更新系のクエリが発行されるときに、nativeが指定されているカラムはSQL文からスルーされるみたい
そしてスキーマで設定されているデフォルト値が、データベース側で使われる。

2011年8月24日水曜日

Javaで覚えなきゃいけないこと

来月ぐらいからJavaの業務に入る。
いろいろフレームワーク使っているみたいなので、お勉強する!
のでやらないといけないことを書き出してみる
  • Hibernate3
    • Hibernateが動くようにする
    • HibernateとStruts2が連携できるようにする
    • Hibernate Toolsを使えるようにする
    • HibernateでDB操作するもの作って自己満する
    • 奥深いらしいのでまずは入門する
  • Tiles
    • レイアウトテンプレート(エンジン?)らしい
    • View層の共通的な部分をテンプレート化
    • top,menu,footerをテンプレート化、コンテンツだけを更新する形
    • だと思う(多分)
  • PDFLib
    • 既存PDFを読み込んで、座標指定(?)で文字を埋め込みたい
    • 文字を書き込むサンプルは動かした
    • ドキュメント見ながらごにょごにょやればいけそう
    • 座標指定で埋め込むやり方がベストなのか不安
  • Struts2
    • 大体わかってきた
    • 初めは動かすだけで息切れ
    • CodeZineのドキュメントがあれば大概いける
    • ゼロコンフィギュレーションええのー
    • Validation便利
    • データアクセスは面倒見ない
    • Spring, Hibernateと組み合わせるのが普通っぽい
    • 細かいところで躓いたら怖い
  • jUnit
    • テストについては特に言われていないけど、急にテストケース書けとかいわれたら怖い
    • 自動ユニットテストするでしょjk、って感じがするので覚えないとまずい
    • カバレッジぬーさんきーさんプラグイン入れる
JavaはXMLすきだなぁ…
YAMLとかの方がイケメンじゃね?とか思ったり思わなかったり。

研修ではフレームワークの「フ」の字も出なかったのに、お仕事はすごい(こわい)。
いきなりこんなのやらせてくれるとかたまらんな!
がんばろうじゃまいか

2011年8月23日火曜日

実行時例外をうまく使うと便利だしコードがすっきりする!

RuntimeExceptionを知った

Java例外の種類

  • チェック例外
    • SQLExceptionとかIOExceptionとか
  • 非チェック例外
    • 実行時例外とか、RuntimeExceptionとか呼ばれるやつ。
  • エラー
    • 多分コンパイル時のエラーのことかな?
の三種類がある。

何かシステムを作るときは、階層に分けて作っていくのが普通だと思う。

データソースにJDBCを使用してアクセスするDAOを作ったとする。
そこで吐かれるSQLExceptionをどう処理するか?
例外を詰め替える、うん、、、何をスローしようか?

で悩んだ結果SQLRuntimeExceptionを使おう!ということにたどり着いた。
RuntimeException(実行時例外)を使えば、throwやcatchをする必要がなくなる。(強制されなくなる)

手元のEffective Javaさんから引用すると、
項目40「回復可能な状態にはチェックされる例外を、プログラミングエラーには実行時例外を使用する」
との事。

throwやcatchを強制しない例外があり、それを使ってもよい

マジで!それ便利!
っていうのが正直な感想!

自分が今やってるのが…
(Struts2)
 JSP ⇔ インセプター ⇔ Actionクラス ⇔ DAO ⇔ JDBC ⇔ DB
という、Struts2だけを使った構成

JDBCがSQLExceptionを吐き出しても、DAOは何もできない。
(もしかしてクラスタ構成組んでいたら別のDBに接続しなおすとかあるのかな?参照系はスレーブに飛ばすとか。そんなのアプリケーションレイヤーではやらないか)
かと言って、上までthrowし続けるのもだるい。
RuntimeExceptionを発生させた後は、Struts2のglobal-exception-mappingsあたりを設定して適切なページに飛ばせば良いと思っている。

DBエラーが出た=時間を置いて接続してもらうか、管理者に連絡ぐらいしか解決策のない、プログラムでは解決することができない問題はRuntimeExceptionを使うべきだ、ということがワカタ。
(ログは取るべきなんだろぅ)

既にベストな解決策はあるかと

SpringではJDBCを抽象化したSpring DAOってゆー機能があるらしい
Hibernate使えばその辺もやってくれるんだろうなーという気もする
が、上位技術を使う前にある程度足元の技術はしっかりと押さえなきゃ

Struts2は単体で使うのではなく、他のフレームワークと組み合わせて使うのが一般的だそうで。
それに、仕事で使うようなので、Hibernateを勉強しなくては…。

本気出す!