国産DIコンテナSeasar その8
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/12/08(金) 07:48:39ってどうよ?みんなもう使ってるの?
使用経験とか、実戦配備情報とか、つかえねーよボケ、とかいろいろ書いてね。
本家 seasar.org
http://www.seasar.org/
Seasar Projectグループ
http://seasarproject.g.hatena.ne.jp/
ひがやすをblog
http://d.hatena.ne.jp/higayasuo/
前スレ
その1 http://pc5.2ch.net/test/read.cgi/tech/1092044210/
その2 http://pc5.2ch.net/test/read.cgi/tech/1098885253/
その3 http://pc8.2ch.net/test/read.cgi/tech/1102862221/
その4 http://pc8.2ch.net/test/read.cgi/tech/1119608621/
その5 http://pc8.2ch.net/test/read.cgi/tech/1135986150/
その6 http://pc8.2ch.net/test/read.cgi/tech/1148204750/
その7 http://pc8.2ch.net/test/read.cgi/tech/1153060167/
関連スレ
Java Spring Frameworkを語るスレ
http://pc8.2ch.net/test/read.cgi/tech/1077465099/
Dependncy Injectionを語るスレ
http://pc8.2ch.net/test/read.cgi/tech/1099827125/
Java⇔RDBのMapping-Frameworkを語るThre Vol.4
http://pc8.2ch.net/test/read.cgi/tech/1134701684/
0357デフォルトの名無しさん
2007/01/05(金) 11:56:31この前買ってきたばかりだよ
0358デフォルトの名無しさん
2007/01/06(土) 03:05:55>>356
あるいは、sansaiとかoribeとかねw
結局、便乗カキコorz
0359デフォルトの名無しさん
2007/01/06(土) 03:37:110360デフォルトの名無しさん
2007/01/06(土) 04:06:460361デフォルトの名無しさん
2007/01/06(土) 16:39:07わび茶の精神ってすげーな。
YAGNIやDRYみたいにWABIとか流行らせてぇw
0362デフォルトの名無しさん
2007/01/06(土) 16:49:030363デフォルトの名無しさん
2007/01/06(土) 18:33:120364デフォルトの名無しさん
2007/01/06(土) 18:46:320365デフォルトの名無しさん
2007/01/07(日) 00:38:33でもそういうことじゃないと思うんだよなー
0366デフォルトの名無しさん
2007/01/07(日) 01:24:20あれは客寄せ
0367デフォルトの名無しさん
2007/01/07(日) 01:47:340368デフォルトの名無しさん
2007/01/07(日) 01:51:52日本語でおk
0369デフォルトの名無しさん
2007/01/07(日) 14:36:270370デフォルトの名無しさん
2007/01/07(日) 15:33:18そう思うなら、理由を書かないと。
blogにトラックバックしてやり込めればヒローかもよ。
0371デフォルトの名無しさん
2007/01/07(日) 18:18:54そんなに外れてないと思うけど。
どのあたり?
0372デフォルトの名無しさん
2007/01/07(日) 20:05:35って部分は違和感を覚えるところかも。
ただ、使い勝手としていちいちエンティティ定義をしないと
マッピングしてくれないのはメンドイと思うのはその通り。
0373デフォルトの名無しさん
2007/01/07(日) 20:35:270374デフォルトの名無しさん
2007/01/07(日) 21:14:44>。最悪は、Entity以外にマッピングする場合で、・・・
Entity以外に@SqlResultSetMappingする場合、ってことじゃね?
0375372
2007/01/07(日) 22:21:49逝ってるんだと思ったけど。
でもそれは、JPAが扱うものはエンティティであるという前提だからという事なら
別におかしくも無い。
という風に思えば違和感を覚えるだろう、という意味のレス。
0376デフォルトの名無しさん
2007/01/07(日) 22:43:59Objectの配列でかえるってのはJPAの仕様ではないはずだからこれは嘘かと
コレクションで返す実装もあるし、そもそもマッピングするためのAPIだしねぇ
マッピング作るのが面倒ていってもIDE使っていれば問題ないだろ?
まさかメモ帳あたりですべて手作業でやってるのか?
0377デフォルトの名無しさん
2007/01/07(日) 23:03:53アホ杉
0378167
2007/01/07(日) 23:05:04Doltengの気軽さは確かに「サクサク感」がある。定義書からDDLを吐き出すツールは山ほどあるので、書類としてはそっちを使って整えてDAO/DTOはDBから作ってしまえという考え方はある程度納得できる。
が、やはりDBからFKの情報を得るのは難しいのだろうか? このあたりはS2Dao-CodeGenの方が気が利いてる。が、今度はDDLをどーやって作るかが問題だ(^^;
それとも今の流行はActivity Based Datamodelとやらで、FKなんか使うなっつーことなのだろうか?
それはそれとして、とりあえず両方ともS2DAO_Tigerへの対応をしてほしいと思う今日この頃(^^;
0379デフォルトの名無しさん
2007/01/07(日) 23:31:54JPA勉強して
0380デフォルトの名無しさん
2007/01/08(月) 00:00:25SeasarはTomcatがappサーバとwebサーバを兼ねてる。
Seasar使ってる人たちはTomcatだけなのか?
そもそもApacheとTomcatを連携させるのは遅れてる?
0381デフォルトの名無しさん
2007/01/08(月) 00:32:02サンプルがそうなだけじゃね?
0382デフォルトの名無しさん
2007/01/08(月) 00:37:29JPAの勉強が必要なのはお前だろw
> Objectの配列でかえるってのはJPAの仕様ではないはずだからこれは嘘かと
もうアフォかと。
select e.id, e.name from Emp e
この結果はObjectの配列で返ってくるんだよ。
0383372
2007/01/08(月) 00:55:20例えばこんなの
・・・
List results = session.createSQLQuery("select empno,ename,dname from emp, dept where emp.deptno=dept.deptno")
.list();
Itarator it = results.iterator();
for(int recno=1 ; it.hasNest() ; recno++){
Object[] record = it.next();
System.out.println("recno="+recno);
System.out.println(" empno="+record[0]);
System.out.println(" ename="+record[1]);
System.out.println(" dname="+record[2]);
}
・・・
テーブルから自動生成したEmpエンティティやDeptエンティティをaddEntityで追加して
取得する事もできるけど、1つのクラスで受けたい時はempno、ename、dnameを持つクラスを
エンティティ登録しないとマッピングしてくれないってのは如何なものか?
IDEを使おうがメモ帳を使おうが、XMLをゴリゴリ書かなきゃいかんのは生産性が悪いといわざるをえん
0385デフォルトの名無しさん
2007/01/08(月) 09:44:36addEntityってHibernateじゃねーか。
JPAにはそれすら無いよw
Hibernateなら、登録してないBeanも戻り値として使えるし
今はJPAのアノテーション使えばXML書く必要もないけど
0386デフォルトの名無しさん
2007/01/08(月) 11:20:370387デフォルトの名無しさん
2007/01/08(月) 11:37:230388380
2007/01/08(月) 11:56:05hello.htmlとかteeda用のhtmlファイルを
apache側に置くことは可能なのか?
サンプルがあれなんでさっぱりわからん。
0389デフォルトの名無しさん
2007/01/08(月) 12:30:26いくらでもあるだろ。
0390デフォルトの名無しさん
2007/01/08(月) 12:31:39それは、teedaのサンプル以前の話かと。
ApacheとTomcatの連携についてわかってないだけじゃね?
0392デフォルトの名無しさん
2007/01/08(月) 12:53:151.4じゃそもそもJPAは使えない訳だがw
0393デフォルトの名無しさん
2007/01/08(月) 12:55:44なんかDiconエディタとか設定画面が開けなくてエラーになるんですけど
0394デフォルトの名無しさん
2007/01/08(月) 14:19:25そのマップや結果セットベースの用途ならRowSetを使うのが普通
そしてObjectの配列でかえるわけではない
リファレンス実装のTopLinkはVector使ってる
どっちにしろ使いにくいが、IDE使えばXMLかいたりとか面倒な作業なしにEntityクラス作れるだろ
オブジェクトに注入するのがJPAなんだからそれ以外なら別のを使う
本当はMapインターフェースでかえってくるともっといいんだがね
キーをカラム名にして、存在しないキーを参照するとException発生させるようなMapはどこの開発チームでも作ってるよね
0395デフォルトの名無しさん
2007/01/08(月) 14:28:06使えるよ、バージョン1.1.2になってるかな。
0396デフォルトの名無しさん
2007/01/08(月) 14:43:24>本当はMapインターフェースでかえってくるともっといいんだがね
>・・・どこの開発チームでも作ってるよね
そうか?
0397デフォルトの名無しさん
2007/01/08(月) 15:39:24TopLinkでもObject配列だが?
結果のListとしてVector返すのと勘違いしてない?
あと、RowSetはろくな実装がないので俺は使ってないな
0398デフォルトの名無しさん
2007/01/08(月) 15:52:16> そしてObjectの配列でかえるわけではない
しつけーなw
仕様書P68最初のパラグラフを100回嫁
0399デフォルトの名無しさん
2007/01/08(月) 18:01:210400デフォルトの名無しさん
2007/01/08(月) 18:19:25getResultList()した場合はそう
getSingleResult()ならそのままObject[]が返る
Listの話なんてしてねーのに>376=379=394w
0401デフォルトの名無しさん
2007/01/08(月) 19:51:230402デフォルトの名無しさん
2007/01/08(月) 21:26:000403デフォルトの名無しさん
2007/01/08(月) 21:40:02>Employee emp = (Employee) obj[0];のような感じでキャストして使うのです。
ここが違うということでは?
0404デフォルトの名無しさん
2007/01/08(月) 21:47:31だからどっかいけ粘着
0405デフォルトの名無しさん
2007/01/08(月) 22:06:23違ってない。JPQLだと
select emp, dept from Employee emp, Department dept
でそうなる。同じようなSQLで
@SqlResultSetMapping(name="higa", entities={@EntityResult(entityClass=Employee.class), @EntityResult(entityClass=Department.class)})
でもそうなる。
0406デフォルトの名無しさん
2007/01/08(月) 22:19:08Seasar使ったって事ドキュメントに書いてる?(S2DAO,S2JSFを利用とか、そのバージョンとか)
書いてる場合は、diconファイルの設定状況とかも書いてる?
0407デフォルトの名無しさん
2007/01/08(月) 22:30:14日本語でおk
0408デフォルトの名無しさん
2007/01/08(月) 22:34:08ふつうかくだろ
0409デフォルトの名無しさん
2007/01/08(月) 22:41:500410デフォルトの名無しさん
2007/01/08(月) 23:23:16宿題は終わったか?>コミッタ共
0411406
2007/01/08(月) 23:36:020412デフォルトの名無しさん
2007/01/09(火) 06:08:140413デフォルトの名無しさん
2007/01/10(水) 00:06:53書いた所でDQNだろ?
0414デフォルトの名無しさん
2007/01/10(水) 00:07:50http://www.eclipsewiki.net/eclipse/index.php?%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3%C6%FC%CB%DC%B8%EC%B2%BD%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3#m01d247c
どういう意味か訳してくれ。
0415デフォルトの名無しさん
2007/01/10(水) 00:25:47AOPの実装といえばほぼAspectJしかなかった時代を知らんだけだろ
0416デフォルトの名無しさん
2007/01/10(水) 01:18:23発想はおもしろいと思うがあのpleiades-config.xml見ちゃうとな…
0417デフォルトの名無しさん
2007/01/10(水) 07:33:42どの分野でも必ず出てくるね。
0418デフォルトの名無しさん
2007/01/10(水) 19:20:560419デフォルトの名無しさん
2007/01/10(水) 22:00:020420デフォルトの名無しさん
2007/01/10(水) 23:17:05↓
目的に応じた手段が増える
↓
覚えることが増える
↓
複雑化する
↓
結局、標準のクラスライブラリの焼き直し?
複雑なJ2EEの再構築とか言っているが、再構築したものも複雑。
「再構築」ではなくて、「非標準化」だろw
0421デフォルトの名無しさん
2007/01/10(水) 23:39:59再構築ではあるんじゃない?
0422デフォルトの名無しさん
2007/01/10(水) 23:50:42newするインスタンスをコンテナが管理して
必要に応じて設定で変更できるってことだろ。
翻訳はどうでもいいが、普通にnewしたインスタンスを管理できるなら
それにこしたことはないんじゃねーの。
0423デフォルトの名無しさん
2007/01/11(木) 00:23:22LiQに続いてPleiadesと引き合いに出される方になってきたなw
0424デフォルトの名無しさん
2007/01/11(木) 00:43:21JDK5以降ならクラスのロードをフックできるので、
Hogeというクラスのロードが要求されたら、
フックした側でバイトコードを換えればよい。
例えばHogeインターフェイスとHogeImpl1とHogeImpl2があれば、
テスト時はHogeImpl1で本番時はHogeImpl2という風にも可能。
これは既存のDIでも出来る話であるが、利用コード側が、
Hoge hoge = new HogeImpl1();
か、
Hoge hoge = (Hoge)container.getComponent(Hoge.class);
の違いではあるが、Hogeは業務に関係あるものでも、
containerは業務に無関係で、DIコンテナの為に仕方がなく使っているもの。
ぶちゃけ、Seasar2を使って組んだ業務システムをリプレイスするときを考えてみろ。
業務に関係ないコードが点々と存在して、
インスタンスのライフサイクルもコードからは追いかけられないんだぞ。
他人が作ったメソッドで取得したハッシュマップからインスタンスを取得するときに、
ライフサイクルとか、正しいインスタンスなのか、自信がもてないだろ。
0425デフォルトの名無しさん
2007/01/11(木) 00:52:16コンテナからルックアップするコードを
そこかしこに書いてるんですか?
俺のコードは setter injection が大前提だから
ルックアップなんて一切記述してないんですけど。
あとライフサイクルに注意が必要なクラスは、
ドキュメント(javadoc で十分だが)に記述しませんか?
てか記述されてなかったら俺は怒りますけど。
記述がなければ自信なんて持ちようがないです、俺は。
0426デフォルトの名無しさん
2007/01/11(木) 00:56:130427デフォルトの名無しさん
2007/01/11(木) 00:56:50ルックアップするコードが一箇所でもあればだめなんだろ。
0428デフォルトの名無しさん
2007/01/11(木) 01:04:18コンテナのコードがないほうがいいんじゃね?
ってことだろ。EclipseにPleiadesのコードなんか入ってないからな。
0429424
2007/01/11(木) 01:30:12そうそう。
フレームワークを使うってことは、
確かに実装コードがフレームワークに依存するし、
多少の実装コードの汚れは仕方がないかもしれない。
話がちょっと変わるが、Pleiadesのようなアプローチであれば、
各種フレームワークをSeasar2で動くようにする、
ラッパーライブラリは全くいらないと思う。
S2StrutsのようにStrutsのコードだけ使って
Strutsの流儀を無視したものを提供したければ話は別だが。
さっきの発言はちょっと痛かったかもしれないけど、これだけは言わせてくれ。
ぶっちゃけ、Seasarの中の人たちって、ちょこちょこポリシーが変わる気がする。
「進化」じゃなくて「変わる」だけね。
しかも変わるのが利用するアプリケーションの設計にかかわる部分でもある。
つまりね、安心してアプリの設計ポリシーをSeasar2に任せられないってこと。
俺もSeasarを使ってはいるが、フレームワークではなくライブラリ的な使い方だけ。
セキュリティ目的でバージョンアップすると、設計思想や使い方まで変わると困るから、
差し替えが可能な使い方までしかしていない。
#ブログに書きたいのだが、中の人たちから粘着攻撃されそうで、
#言いたいことが全然書けないよ。
0430デフォルトの名無しさん
2007/01/11(木) 01:45:410431デフォルトの名無しさん
2007/01/11(木) 02:40:32特定シマスタ
0432デフォルトの名無しさん
2007/01/11(木) 02:41:43Eclipse そのものがPleiadesのようなアプローチであれば・・・
plug-in 同士が連携するってのはもう絶望的に感じますが。
なんつーか Java でそれをするか?って感じがするんですよ。
もっと動的な言語使えばスッキリ行くだろうに
なんで無理にJavaでやりたがるんだろうって。
0433デフォルトの名無しさん
2007/01/11(木) 11:27:35ロードのフックってjavaagentのこと?
あれ、一見便利だが、動的に作成したClassLoaderとの相性が最悪じゃね?
0434デフォルトの名無しさん
2007/01/11(木) 12:54:50あ、それクライアントとウチの上司の好きな言葉だ。
そして次の言葉は「但し、納期はそのままね。」
0435424
2007/01/11(木) 23:13:17ClassFileTransformerをきちんと設計すればおk。
ロードしようとしたクラスローダが引数に渡される。
(実際にはdefineClassを実行したクラスローダ)
ブートストラップクラスローダの場合はnullが渡されるが。
動的に作ったクラスローダでdefineClassを行えば、
引数にそのクラスローダが渡されるので、
変換したくなきゃreturn null;でおk。
変換したけりゃ、新しいバイト列を作って返せばいい。
クラスローダとの相性はあまり関係ないと思われ。
ちなみに、Instrumentationのインスタンスはpremainで渡されるが、
その後は好きなところで使用してもいいので、
premainで適当なクラスのstaticフィールドに格納するのもよし。
後からアプリケーション側でロードのフックの実行の制御するのも可能。
0436デフォルトの名無しさん
2007/01/12(金) 00:46:19ライフサイクルに関してはそういうのがメンドイから、pleiadesの奴もデフォは
prototypeのほうがいいって言ってんじゃね?
setter injectionも環境依存とかの本当に必要なとこだけにして、
あとは普通にファクトリとかインタフェースを設計すればいい。
テストのためにsetter injectionを正当化するのはおかしいと思わね?
まー、newするインスタンスを動的に変えれる前提だけどな。
だけど、動的に変えまくってしまうとコード追えなくなるのは同じ希ガス。
0437デフォルトの名無しさん
2007/01/12(金) 00:48:12例えばfoo.warとbar.warをTomcatにデプロイしたとして
両方に同じjarファイルがあるとしてその中のクラスを
foo.warの方だけbar.warに影響なく変換とかできる?
0438デフォルトの名無しさん
2007/01/12(金) 00:58:52> だけど、動的に変えまくってしまうとコード追えなくなるのは同じ希ガス。
DIコンテナだとnewするコードがないから何が来るか分からないってことはすぐ分かる
pleiadesだとnewするコードがあるのに見たとおり動くとは限らない
ソースをメンテするならpleiadesは辛い気がする
0439424
2007/01/12(金) 01:02:17できるよ。
そもそもfoo.warとbar.warでは使用されるクラスローダが違う。
同じJarでもWEB-INF/libのJarファイルはWebAppClassLoaderでロードされるから、
それぞれが別クラス扱いだよ。
そもそもVMで「同じクラス」という認識は、
クラス名が同じかつ、クラスローダが同じということだ。
違うクラスであれば、ClassLoader#defineが可能。
0440デフォルトの名無しさん
2007/01/12(金) 01:07:550441424
2007/01/12(金) 01:14:32それも一理ある。
っつーか、各種コンテナの共通アダプタを作ればよくね?
コンテナ依存の機能は使えないようにするか、
エミュレートするようにすればいいし。
Jakarta Commons-DI Containerっていうのがあれば、最高じゃない?
Commonsなら捺印ナビリティもアップだろ。
過度なDIは避けてCommonsの提供するAPIレベルでのみDIを行うようにすれば、
Seasar2がこけてもSpringがあるし、特定のコンテナに依存するのがヤダってのも回避できる。
0442デフォルトの名無しさん
2007/01/12(金) 01:15:32信者か中の人だけだろ。
0443デフォルトの名無しさん
2007/01/12(金) 01:17:11違うクラス扱いになるのは分かる
問題はClassFileTransformerにその区別ができるか?
foo.warのWEB-INF/lib/xxx.jarとbar.warのWEB-INF/lib/xxx.jarの
どっちもWeebAppClassLoader(インスタンスは違えど)でロードされるわけだが
foo.warのWEB-INF/lib/xxx.jarの中のクラスは変換するが
bar.warのWEB-INF/lib/xxx.jarの中のクラスは変換しない
ってことができるのか?
0444424
2007/01/12(金) 01:36:24提供されているAPIではできない。
ハック技としては、URLClassLoaderにキャストして、
getURLs()でリアルなjarの位置から判断するのもある。
現実的な方法はtransform.propertiesに
transform = true
とか書く。
transform.propertiesをWEB-INF/classesに置いて、
transformメソッドの引数のクラスローダを使用して、
ResourceBundleを作るかPropertiesを作って判定すればいい。
引数のクラスローダで読み込めば、foo.warのクラスローダとbar.warのクラスローダで
それぞれ別々のリソースが読める。
クラスローダはクラスをVMにロードするだけじゃなく、
バイトコードを含む「リソース」をロードするのも1つの機能。
0445デフォルトの名無しさん
2007/01/12(金) 01:46:33> transform.propertiesをWEB-INF/classesに置いて、
なるほど
それならWar単位にカスタマイズできるね
0446424
2007/01/12(金) 01:48:29例えばクラス名がhoge.Piyoだとすると、
transformメソッドの中で、
URL url = loader.getResource(className.replace('.','/') + ".class");
とやれば、クラスをロードせずに、そのクラスのリアルな位置がわかる。
urlの中身はfile:///c:/xxx/yyy/WEB-INF/lib/hoge.jar!hoge/Piyo.class
とかになっているはず。(ごめん、URLは適当だけど。)
このときのyyyがコンテキスト名にならないかな?
0447デフォルトの名無しさん
2007/01/12(金) 01:54:29それよりは>444の方がいいね
pleiades-config.xmlみたいな設定ファイルをwarなりjarなりに入れておけば
それが見えるクラスローダの範囲だけカスタマイズできれば扱いやすそう
0448デフォルトの名無しさん
2007/01/12(金) 01:56:05pleiades的には基本はnewの変更はなしだろ。
基本はソースコード上のままでちょこっとテスト用のクラス入れ替えたり、
ソースがいじれないときに入れ替えたり。
だからファクトリとか普通に設計しれってことなんかと。
0449424
2007/01/12(金) 02:09:12Seasar2だけ覚えたその後、きっと不幸なプログラマになるぞ。
「クラスにフィールドを書いてセッターを書けば、
よくわかんないけど、勝手にインスタンスが入るんだよね」
「勝手にロールバックしてるみたい。
中でなにやっているのかよくわかんないけど・・・」
「インターフェイスってよく知らないけど、
こうやって書けばいいみたい」
くらいの認識のやつらが業界にウロチョロするぞw
0450デフォルトの名無しさん
2007/01/12(金) 02:21:44IPLとか割り込みとか知らない奴らが不幸とは限らん
0451デフォルトの名無しさん
2007/01/12(金) 07:53:06449で挙げてる不幸なプログラマが
pleiades使ってもやっぱり不幸になるよ。
(不幸になるのはそいつじゃなくて周りな。本人は自業自得。)
「後から中身替えられるからどうでもいいよ。」
「変更かかるかどうか分からないけど全部interfaceで宣言してしまおう。」
0452デフォルトの名無しさん
2007/01/12(金) 07:54:00どう見てもアンカーミスです。本当にごめんなさい。
0453デフォルトの名無しさん
2007/01/12(金) 07:57:27アンカーってなんだ?って所から勉強してみようか
0454デフォルトの名無しさん
2007/01/12(金) 08:50:52テスティングフレームワークを一式揃えてから宣伝してくれw
>>429
>俺もSeasarを使ってはいるが、フレームワークではなくライブラリ的な使い方だけ。
ここは同感というか、そもそも現状のJavaフレームワークでポリシーまで含めて
全て賛同できるものが存在しない。
Javaの弱点は、標準が失敗(J2EE1.4まで)したせいで、
まったく統一感がなくなってしまったことだと思ってる
開発現場を変わる度に、作り方もポリシーも全然違ってくることがざらにある。
Javaで開発の度に新たなフレームワークを覚え続けるよりは、
統一感のある他の言語環境に移ったほうがマシかなと最近はよく思ってる
0455デフォルトの名無しさん
2007/01/12(金) 09:02:48代案がC#とASP以外になんかあるか?
速度犠牲とメモリ管理の煩雑さからチームを守れる選択肢って他にないじゃん。
0456デフォルトの名無しさん
2007/01/12(金) 09:14:27現状ならC#(.net)かRubyだな
速度犠牲はシステムの要求速度にもよるだろ
■ このスレッドは過去ログ倉庫に格納されています