2008年10月8日水曜日

CISCO社見学

1.Unified Solutionについて
・自分たちの製品をまず自分たちが使う
-->働き方を変える
-->その経験をお客様に伝える営業スタイル
(CISCO on CISCOという事例集をたくさんWEBに載せて、営業にも使っている)
・テレワークの推進

2.CISCO社員の一日(ビデオ)

3.社内見学
・テレプレゼンスルーム
UIデザインは非常にしっかりしている。米国本社にデザインチーム。
映像・音声の圧縮技術がものすごい。
値段も高いがエクスペリエンスもすごい、という売り方。営業力に自信があるからか。
・Infillを利用したフロア
弊社より使い方がうまい。新川4Fもこれくらいかっこよくするべきなのでは。

org.apache.commons.validator

GenericValidatorクラスにいろんなvalidationをしてくれるメソッドがある。
http://www.jajakarta.org/commons/validator-1.0.2/ja/withPrimary/org/apache/commons/validator/package-summary.html#doc.Usage
・org.apache.commons.collections
・org.apache.commons.digester
・org.apache.commons.logging
のダウンロード&インストール
・XMLパーサはjavax.xml.parsers.SAXParserがJ2EEに入ってる
・サンプル
http://634.ayumu-baby.com/commons/oss_jakartacommons_validator_sample.html
・ValidatorResourcesInitializer
サンプルにあるValidatorResourcesInitializerクラスが、最新リリースの1.3.1にない。
1.1.4まで遡ったらようやくあった。
とはいえ、ValidatorResourcesInitializerは非推奨になっているみたいだったので、
英文のJavadocみて、1.3.1を用いてやってみる。

バリデートルールのXMLのデプロイ場所、DTDのありかが不明でかなり手間取った。
デプロイ場所は参照元のクラスと同じパッケージの中。
DTDは以下に発見した。
http://commons.apache.org/dtds/
あと、設定XMLファイルのサンプルがなく、書き方が不明な点が多い。
他にもいくつか引っかかったが、それらは比較的簡単に解決できる。
全体に資料が非常に少ない(日本語はもちろん、英語のドキュメントもない)ため、
ひとつひとつのステップを確認しながらとなった。
基本的にStrutsの中にあるものに近いようだ。

正規表現がマッチしない。。。

JSPとheadタグ, CSS

・やっぱりJSPは入れ子にしても最終的にきれいなHTMLが生成されるべきらしい。
・それと、CSSが複数あって、それらにまたがるdivがあったりときは、idで指定するんじゃなくてクラスで指定しておいた方がいいみたいだ。

JNDI(Java Naming and Directory Interface)

http://www.javaroad.jp/opensource/js_tomcat8.htm
http://www.thinkit.co.jp/cert/article/0708/2/9/3.htm
環境に依存する(かつアプリケーション内で共通して使用する)情報をアプリケーション上で一元的に管理する
個々の「.jsp」「.java」ファイルにいちいち接続情報を記述する必要はなくなる
・server.xmlの設定
・Tomcat web.xmlの設定
http://www.thinkit.co.jp/cert/article/0708/2/9/3.htm
・web.xmlの

このあたりの設定をしようとすると、Tomcatの勉強をそれなりにしないといけなくなる・・・
もうちょっと実装してから勉強したいなあ。
http://www.jajakarta.org/tomcat/tomcat5.0/ja/docs/tomcat-docs/jndi-datasource-examples-howto.html
http://commons.jakarta.jp/dbcp.html

DBUtils

http://www.atmarkit.co.jp/fjava/javatips/101java013.html
Connection、Statement、ResultSetの代わりになる。
close()を毎回書く&例外時にも書く、のをしなくてよくなる

2008年10月7日火曜日

あいまい検索

・preparedStatementのsqlのパラメータ部分を、
LIKE '%?%' → ps.setString(1, keyword) とするとうまく行かない。
?がシングルクオートで囲まれてるのがよくないようだ。
LIKE ? → ps.setString(1, "%" + key + "%")とすればOK.

beanをコレクションに入れて渡す

・スクリプトレットでアクセス
<%ProductBean p = (ProductBean)a.get(0);
String name = p.getName();
%>
<%=name%>
・ELでアクセス
${a[0].name}
・JSPの中でbeanの扱いが楽みたいなのは、jsp:usebeanタグとbeanのマジックパワーのおかげなのかと思ったけど、がんばっているのはむしろELみたいだ。

普通のaタグのリクエストをPOSTで送る方法が分からない。。

さっぱり分からなかったので、とりあえずGETにしておいてみる。
もしくはHTTPリクエストのヘッダか何かで、遷移元のページがどうにかして分かればよかったんだけど・・・。

Iteratorは、Collectionのiterator.

でもインデックスを指定する役割はない。

2008年10月2日木曜日

DAOの中にロジックが入ってきてしまう

どのようなSQLを発行するかはビジネスに依存するのだから、はっきりと切り分けにくいのは本質的に仕方ない。
インタフェース(引数、戻り値)が安定していればよい?
あまりDAOを純粋にすることにこだわりすぎても、逆に大変になってしまう(デザインパターンの意味がない)。

DAOパターン

sqlはどこに書くべき??
結論としてはやっぱりDAOの中がいい。
最近ではDataAccessMethodパターンというのがあるらしい。
http://codezine.jp/article/detail/349?p=1

例を書くときはexample.com

http://ja.wikipedia.org/wiki/Example.com

JSTL(coreライブラリ)入門

使わなくても実装はできるけれど、せっかくの研修の機会なので、coreライブラリくらいは試してみることにした。
http://www.javaroad.jp/opensource/js_taglibs2.htm
・taglibs
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
のuriが、たいていの解説Webに載っているのは
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
になっている。
しかし、JSTL1.0から1.1になってディレクトリが変わったらしく、そのままだと
「TLD又はタグファイル中のattribute指示子に従って属性valueはどんな式も受け付けません」
というエラーが出てコンパイルできない。
以前同じ問題にはまった香川さんに教えてもらって解決。

2008年10月1日水曜日

JavaBeans

使いこなせるようになるのは今回は難しそう。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html
まずはあまりJavaBeansのことは考えずに実装を進めてみる。
そのうち自分自身の理解のキャパシティに余裕ができたら、Beansに突っ込んでいってみたらいいかもしれない。

header部の条件分岐

ユーザ名、権限はsessionにしまっておくとして、他にはどんな条件があるのかな?
それぞれ、どこにパラメータしまっといたらいいのかな。
session, request, , ...

認証処理の流れ

・servletは値を受け取って認証処理するクラスに渡す
・認証処理クラスはDAOにbean返させる、認証チェック、servletに可否を渡す
・servletは結果次第でそれぞれのJSPにforward
・成功用JSPはuseBean?
てゆう流れのがいいのかな。ロジックとコントローラと分けた感じだ。

【ログインしているかしていないか&ユーザ権限の種類】の状態保持

ログインしたら->sessionにしまっておく
ログアウトしたら->sessionの属性変更(削除)

・とりあえずsessionに。
>>この辺りまでどうにか。
・権限別にJSP表示
・ログインできなかったとき
・(このあたりでServletが大変なことになってきたら下記処理)

insert したらそのレコードのidを返してほしい

returning
postgresとoracleでは使える
(香川さん情報)

Filter

sessionやrequestからgetAttribute
何か処理
(基本的にservletでしてる前処理)
必要なら条件分岐でデフォルトとは別のページ(エラーページなど)へforward
chain.doFilter(req, res);
(次のfilterがあれば移動、もうなければもともとのアクセス先(servlet)へ)
(チェーンの順番はweb.xmlで指定。)

ServletからJSPにBeanを渡す。

・BeanのクラスはJSPのpageディレクティブのimport属性でimportする必要がある。
なので、Beanは無名パッケージではなく、何かしら名前のあるパッケージに入れる必要がある。
このとき、Servletはそのパッケージに入れると使えなくなるので入れない。
Servletの最初でそのパッケージをimportする。
・request.setAttribute("u", u)の属性名とのオブジェクトIDはそろえる。
・Beanは、sessionとかrequestに乗っていれば、JSPがincludeタグで入れ子になっていても、JSP間で渡す処理をする必要はない。
Beanが必要なJSPでuseBeanタグを書けばいい。

JSP表示

・forwardするとき、ServletContextは通しても通さなくてもいい。
通す必要が今回出てくるのかは分からないけれど。ロギングしないし。
・getRequestDispatcher()の引数は、"/ファイル名"でいいっぽい。
"/WebContent/ファイル名"だとうまくいかなかった。。