Java Spring Framewor ..
[2ch|▼Menu]
669:デフォルトの名無しさん
06/01/31 10:23:30
>>659

>うだつのあがらん社内SE
お前様はオレですかw

疑問に思ったことを二つ。

>見易さ、改修性の高さ、開発規模から
>ServiceはInterfaceを使わずに実装しました。

何故だよ? facadeした方がP層から見たときに理解しやすいし、
実装ロジックを意識しないで済むと思うのだけど。あと例えば
君がAPI定義して、君の手下が実装する、なんて作業も
スムースになると思うのだけど。

あと、その場所にSpringのTransaction制御は適用してるの?
それとも君達でゴリゴリ書いているの?
そこがSpringの一番美味しい所だと思うのだが。



670:デフォルトの名無しさん
06/01/31 10:24:23
<連投>

>流行のSpringと扱い慣れているStrutsでと思っています。

扱い慣れているとはいえ、何故に死滅が確定している
現verのStruts? 同じ社内SEの立場として言うが、
それって将来に禍根を残すんじゃないの?
特に、struts-taglibを使うのは忌むべきことじゃないのか?

高度にクリティカルじゃなくてもいいなら、素直にJSFを
採用すりゃいいじゃん。もし、strutsじゃなきゃ人材を
確保できねぇと言うなら、せめて
org.springframework.ui.velocityパッケージの研究を
してから決定した方がいいんじゃないの?



671:デフォルトの名無しさん
06/01/31 12:13:28
死滅とかはNG Wordに入れてる人も居るから避けたほうが吉。

JSF はもう少し枯れてからの方が良くない?
今のところ、Velocity でやっちゃうのが一番直感的に思う。

672:デフォルトの名無しさん
06/01/31 12:24:21
うちで使ってるアプリケーションサーバーはJSPしか動かねぇ
Servletすら使えない

673:デフォルトの名無しさん
06/01/31 15:42:57
釣りには屈しない

674:デフォルトの名無しさん
06/02/01 09:47:13
おぉ、まだ居る方が。

>>669
ServiceのInterfaceについては、いかに害虫がオブジェクト指向を知らなくても
オブジェクト指向らしいJavaになるか考えてこうなりました。
まずあの方達はクラスを上手く切り出せないんです、最初は。
で、下手にInterfaceやって使いまわしなんて考えると開発中の手入れが
恐ろしいことになり、ある意味好き勝手にやってもらいました。
で、DAOについてはメソッドが明確なんでInterface切ってやってもらってます。
iBatisを使ってるんですが、こいつだとDAOの中のみでTransaction制御できるんで
助かります。
これだと統合テスト中にこっちでクリティカルな部分がすぐいぢれるんで楽なんですよ。

675:659
06/02/01 10:14:07
書き忘れですが、674 = 659です。

Strutsについては、JSFでの置換えも検討しましたが、
今回、自分以外はJavaでWebやるの初めてなんですよね。
やはりブラウザからRequestをServletで受けて、というのを実感
し易いのはStrutsかなぁ、と思います。
JSF、VBちっくにドラッグ&ドロップでできてしまうんで、最初からこれだと
裏の理解が薄く後々に生きない気がします。
それと社内SE的にはもう少し枯れてからで良いかなと、正直思います。

Taglibについては、個人的にこれ以上覚えられるかー、ということで
beanとlogicにのみ制限しています。
まあ多少beanを拡張はしていますが。。。

個人的には、Struts → JSFで行きたいなと、Viewについては。


676:669
06/02/01 10:53:44
>>659

>DAOの中のみでTransaction制御

これって複雑なことをやろうとすると破綻しないかい?
複数のテーブルを更新するのもDaoのメソッド単位になる、
従って肥大したDaoImplを書かざるを得なくなる、という原因で。

オレのやり方だとこんな感じだ。

<ServiceLayer>
public void deposit(Account account, Money increasedMoney){
  accountDao.update(account);
  revenueDetailDao.insert(account, increasedMoney);
}

で、トランザクションはあくまでserviceLayerに置く。つまり上の
depositメソッドに対してPROPAGATION_REQUIREDを設定する。

オレはさらに、dao層、上の例ではaccountDao.updateと
revenueDetailDao.insertに対しては
PROPAGATION_MANDATORYをかけている。
これによりserviceLayerを通さずにDaoに触ったら即座にアポーン。

君の「DAOの中のみでTransaction制御」だと、上の二つの
メソッドを一つにまとめないと原始性を維持できないのでは?
勘違いだったらスマソ。

677:659
06/02/01 12:13:46
>>669
DAO単位で考えれば原始性を維持できない可能性は仰る通り存在します。
でも、実際の使用で考えれば、多少複雑なデータはユーザに紐付いているわけで、
2重ログインを防げば、問題無しという訳です。
美しくないことは、確かですが。

Springでのトランザクション管理は、まだ読んだだけですけど、実装も含めスマートですね。
トランザクション属性なんか、いかにも楽できそうで。
DAOは何を使われてるんですか?
今回はHibernateが親和性も高く、情報も多いんで使おうかと思ってます。

678:669
06/02/01 13:12:05
う〜ん、オレにはそれはチョト怖く感じる。

更新が途中で落ちる可能性なんてゴロゴロしてるワケだし。。。
(オレには納得いかんが)落ちる可能性を完全無視するとしても、
その場合は最低でもペシミスティックロックで組まんとイカンと
思うのだけど。。。

頼む、トランザクション管理層をserviceLayerに持ち上げとくれ。
Spring使えばチョチョイのチョイだ。

iBATISは好きだぉ。


679:デフォルトの名無しさん
06/02/01 16:24:19
>>669
仰ってることが分かってきました。
自分が話しをごっちゃにした予感です、害虫さんと自分の立場を。

害虫さんのトランザクション管理は、はっきり言って、信用してません。
で、問題があった際にDAOとServiceを引っ張って考えるのはしんどいんで
DAOについてはiBatisのAutoCommitにして、自分はServiceに集中できるように
している、という話です。

読み返してみると、確かに訳分からん話してますね、自分。

そういえば、SpringとベストマッチなDAOって何でしょ?
iBatisもいけるようだとネットに載ってた気がしますが、やはりHibernateですかね?
他に面白いのないでしょうか。



680:デフォルトの名無しさん
06/02/01 20:56:14
HibernateはDBを一から設計するっていうならおすすめ
既存のDBがからむならiBatisの方が無難だとおもう

害虫さんがいてiBatis学習コストが気になるっていうなら
Spring JDBCでもいいんじゃない?


681:デフォルトの名無しさん
06/02/02 01:17:25
>>675
>Taglibについては、個人的にこれ以上覚えられるかー、ということで
>beanとlogicにのみ制限しています。

Strutsでやるんなら最低限必要なStrutsタグはhtmlタグのみで、後はJSTLで置き換えるのがお勧め
JSTLはJava EE5に含まれることが決定しているし、JSFも1.2からはJSTLと連携出来るようになる

682:デフォルトの名無しさん
06/02/02 01:36:23
お勧めとかではなく、beanとかlogicを使うべきではない、という感じだな。

683:659
06/02/02 10:15:36
>>680
既存DB、IMSもRDBもわんさかあるんで、これまではiBatisだったんですよね。
オブジェクトベースでのDB考えるなら、Hibernateというイメージは確かに強いですよね。
そんな幸せな開発はやったことありませんが。

>>681、682
z/OS中心の製造業社内SE的には、Webのプレゼンテーション層については過渡期に
感じるので、枯れ果てた技術で十分かなと思います。
新しい技術を入れても今後メンテする人が大変なだけですよ、うちのような環境では。

JDKにしても既存のものは1.4.Xが限度で、5にすることなんてありえません。
ぶっちゃけ、手間の割にメリットがあんまり考えられません。
それよりも新しいWASには5を導入する方向で考えると思います。

個人的にはJSFの熟成を期待しつつ、ちょっと複雑になりそうだったらリッチで、
と行ければ良いなぁ。

・・・今はこんなこと考えている自分が、ちょっと嫌。
Javaを始めて勉強してた頃はオブジェクト指向に感動し、新技術マンセーだったのに。
他に居ないのかな、こんな方。






684:デフォルトの名無しさん
06/02/02 11:17:28
>682
beanを使うべきじゃないとは言っても、
messageはなかなか避けられないような。

685:669
06/02/02 11:31:58
おいおい、そんな後ろ向きになるなよ。

新技術に対する感動を忘れたらオレらの仕事はつまらなく
なるばかりだぜ。つーか、今でもspring・iBATIS・hibernateって
やってるんだろーが。何でviewだけそんなに野望を失うのさ?

struts-taglibは、数年後には非推奨API(あるいはそれに準じた
無体な扱いを受ける立場)になるんだぜ? 君は後進に
非推奨APIのメンテをさせる気かい?

JSF怖くないってw つーかあれ便利だぞ。少なくてもstrutsに
比べりゃね。なんつったて同じ作者の二番煎じなんだから。
JSF自体がDI持ってるからSpringとの組み合わせもし易いしね。
練れてなくて意味無い所で苦労を強いられるのは認めるけど。

な〜んて書きながら、オレ自身もJSFマンセーには
なりきれないのだけどね。初期の頃に宣伝されたリッチ
クライアント対応とか全然進んでねぇし。(JDNCは実質
ポシャったみたいね) 早いとこJSPの呪縛から抜け出して
欲しいと思っているのに、なんか全然別の方向に逝こうと
しているみたいだし。。。

愚痴スマソ


686:デフォルトの名無しさん
06/02/02 11:44:00
JSFも悪くないと思うけどね、まだ出来たてのせいか
ちょっとこなれてない感じ。 EL式とかアレだし。
sunのより高機能なんでmyfaces使っても、バグが結構あって
DataTableとか微妙な挙動をする場合がある。

1.2待ちかな

687:デフォルトの名無しさん
06/02/02 13:02:24
>>684
messageは使うね。

>>686
2年もたってるのに、出来立てはないとおもう

688:659
06/02/03 12:37:57
>>669
Viewも野望だけはあるんですけどね。
ただWebだと、JSFにしても色々あり過ぎて、決め手に欠けます。
それにお偉方の説得材料が足りません。
もう暫くおとなしく待って、淘汰されてから選んで良いかな。

Viewはお偉方にも分かってしまうんで、ここ以外は、好き勝手やれるんだけどねぇ。



689:デフォルトの名無しさん
06/02/03 13:49:52
正直jsp2.0で十分な気が

690:デフォルトの名無しさん
06/02/15 15:03:14
Hibernate3初心者ですが、ちょっと教えて下さい。
many-to-one のマップで、もし該当データが存在しなくても怒られない方法、
知りませんか?
例えば

<class name="item">
<id name="id"/>
<many-to-one name="bid"/>
</class>

<class name="bid">
<id name="id"/>
<pro name="amount"/>
</class>

これで
from Item item left join fetch item.bid をやって、
取得したリストを表示させると、bidを取得できなかったitemの
item.bid.amountをgetすると、
LazyInitializ E org.hibernate.LazyInitializationException TRAS0014I: 次の例外がログに記録されました。 org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
と、アボンです。

session閉じて分離オブジェクトになってんだから、良いじゃん、
と思うんだけど、教えて下され。


691:デフォルトの名無しさん
06/02/15 15:11:12
>>690
スレ違い
スレリンク(tech板)


692:690
06/02/15 15:56:38
>691
スマソ

693:デフォルトの名無しさん
06/03/07 11:35:44
保守、というか1.2.7記念。

694:デフォルトの名無しさん
06/03/07 12:03:36
EJB3.0 のどこが DI なのかと思い始める今日この頃。

695:デフォルトの名無しさん
06/03/07 12:49:55
つまり、勉強不足?

696:デフォルトの名無しさん
06/03/07 23:10:38
@EJBアノテーションによるフィールドインジェクションだが?

697:デフォルトの名無しさん
06/03/07 23:40:25
まぁ勉強不足なのは確かだが。

結局クライアントコードに依存性を書いてる辺りが、
確かに従来のJavaの文法じゃないけど
アノテーションと言う名前のただの lookup じゃん、とか。

(DIとは関係ないが)@Statefulも
アノテーションと言う名前の implicit な interface になっただけで
同じことをするのに書法のバリエーションが増えただけで
Perl のガラクタ折衷主義を思い出したり。

698:デフォルトの名無しさん
06/03/08 22:01:48
"アノテーション使ってるからDIじゃない"っていいたいの?

interfaceがメソッドに付けれますか、と。
"ただのlookup"ではないしな。
結局アノテーションどうこうとゴネてるやつって、変化を受け入れれないだけなんだよな。

699:デフォルトの名無しさん
06/03/09 01:38:51
クライアント側でリソース名を明示的に書いているから
DIとはいいがたいと思ってます。

>"ただのlookup"ではないしな。
どんな嬉しさがあるか、教えていただけないでしょうか。
煩雑な記述が減る程度しか思いつきません。

>interfaceがメソッドに付けれますか、と。
@Stateful はメソッドに付かないと思うけど。

700:デフォルトの名無しさん
06/03/09 03:37:13
>>699
> クライアント側でリソース名を明示的に書いているからDIとはいいがたいと思ってます。

つまり、DIをわかってないと。

701:デフォルトの名無しさん
06/03/09 13:01:15
そっか。DIの定義が変わったのか。

702:デフォルトの名無しさん
06/03/09 22:20:05
>>701
変ってないだろ。
君が勘違いしてるだけ。

703:デフォルトの名無しさん
06/03/11 15:16:19
2.0になってどう?
近い将来でseasar使うか2.0使うか迷ってるんだが、
Spring側の利点が見つからない・・・

両方つかってみたけど、seasarだとXMLをかなり省けるから
楽なんだが・・・

誰か意見ください。

704:デフォルトの名無しさん
06/03/13 13:14:45
>702
DIって、クライアント側で明示的にリソース指定した部分が
コンテナが注入するようになって素敵だよって流れだと思ってたんですが。
で、勘違いのない本当の定義とは?

>703
利点が見つからないならSeaser2使えば良いかと。
とりあえずXMLが省けることは多分大した利点にならんよ。

705:デフォルトの名無しさん
06/03/13 21:56:40
横槍スマソ

>>704
そもそもEJB3のDIは「明示的にリソース指定」はしないぞ

>とりあえずXMLが省けることは多分大した利点にならんよ。
その根拠は?
書かなくて済むのであれば書かないに越したことは無いし
XMLのメンテナンスだって馬鹿にならない

706:デフォルトの名無しさん
06/03/13 23:15:36
>>704
DIの最低限の定義は、自分でインスタンスをとって来ないで、よそから注入してもらうこと。

@EJBアノテーションつけたとしても、それなりのコンテナ使わない限りなにも影響はない。
そのままSpringやSeasar使えばそれなりに注入される。

707:デフォルトの名無しさん
06/03/14 10:32:53
DIに関して705氏と706氏の意見で納得。
確かに自分でインスタンスとってきてるわけではないね。
俺はとってくる情報が書かれてることそのものが嫌いなんですが
これはDIとは関係ないってことですね。

>その根拠は?
autowire 使えばそれなりに記述量は減るけれども
曖昧さが増えてかえって混乱を招くだけだった、との経験から。
Seasar2だと違うのかも知れない。
適当なこと言ってごめんなさい。

それにしても盛り上がらないスレですね。なんでだろ。

708:デフォルトの名無しさん
06/03/14 18:46:23
一部雑誌や新しいもの好きが飛びついてるだけで
現場ではほとんど使われてないから。

709:デフォルトの名無しさん
06/03/14 19:36:29
はい、飛びつきました

710:デフォルトの名無しさん
06/03/14 22:14:33
うちでは全部SpringかSeasar使ってるが、世間ではそうなのか?
トランザクションに関してはとても楽だが

711:デフォルトの名無しさん
06/03/15 17:34:47
>>707
いったん使い出せば、通常の範囲では質問もなにもないし、特に話題がないからかもね。

712:デフォルトの名無しさん
06/03/15 17:52:50
イイナー
うちで使ってるスゲー高いアプリケーションサーバーは
jspしか使えない

713:デフォルトの名無しさん
06/03/15 21:47:24
そりゃないんじゃね〜の?

714:デフォルトの名無しさん
06/03/15 22:14:35
>>712
BroadVision One-To-One
以前はC++しか使えなかった。マジで。

715:デフォルトの名無しさん
06/03/15 22:14:55
713宛てだった

716:デフォルトの名無しさん
06/03/15 22:30:54
「Portal,Commerceの価格は1CPUで810万円からとなっております。」
ΣΣ(゚д゚lll)

717:デフォルトの名無しさん
06/03/16 00:03:31
そういやあ、WebObjectsも昔は750万とかしたよなあ。。。。

718:デフォルトの名無しさん
06/03/16 00:05:24
製品カタログ見ても何をするものなのかが分からん。

719:デフォルトの名無しさん
06/03/16 02:13:23
JSPしか動かないTomcatみたいなの
ショボいDBのラッパーとかユーザー管理とかビジネスルールのライブラリとかがいっぱい付いてる
あと やたら高い

720:デフォルトの名無しさん
06/03/16 03:57:55
うちの会社で出してるゴミコンポーネントも945万円するお。
1年で1個売れれば万々歳だって。

721:デフォルトの名無しさん
06/03/17 16:09:08
そりゃむしろ、945万もするから売れるんだろう。
金を出す人間は、無料でしっかりしたモノを嫌がって
バカ高くてヘボいモノを好む傾向にあるから。

で、現場は地獄を見る、と。

722:デフォルトの名無しさん
06/03/17 17:20:41
無料だとちょっと問題が出るとすぐ捨てるけど、
金かけてると捨てるわけにはいかないからなあ

723:http://www.vector.co.jp/soft/win95/util/se072729.html
06/03/18 20:26:19
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?

724:デフォルトの名無しさん
06/03/25 12:11:47
なあ、参照しかしないクエリーでもトランザクション切ってる
なんて事ないよな?
サービスのインスタンス化時にトランザクション切るのをデフォルト
にしてるのを見たことあるぞ。。。
同時アクセス数増えたとき、大変な事になるのがわからんのじゃろうか。


725:デフォルトの名無しさん
06/03/27 10:58:31
AOPでトランザクション管理するなら、
READだけの処理では普通は開かんようにするはず。

726:デフォルトの名無しさん
06/03/27 14:11:08
>AOPでトランザクション管理するなら
してなかったりして

727:デフォルトの名無しさん
06/03/27 16:22:43
貼っとく

【BEA】Using the Java Persistence API with Spring 2.0
URLリンク(dev2dev.bea.com)

728:デフォルトの名無しさん
06/03/27 19:02:56
>>724
どうして大変な事になるの?

729:デフォルトの名無しさん
06/03/28 09:58:12
複数のテーブルを参照してひとつのデータを作るような場合は、
読み込みでもトランザクションきらないとまずいんじゃないの?


730:デフォルトの名無しさん
06/03/28 10:11:35
>>729
> 複数のテーブルを参照してひとつのデータを作るような場合は、
JOINではなくて、複数のSELECT発行って事?

731:デフォルトの名無しさん
06/03/28 11:05:09
>>730
ISOLATION_LEVELのデフォルトって普通はREAD_COMMITTEDじゃないの?
複数のSELECTまで考えるとISOLATION_LEVELをREPEATABLE_READに変更しないと駄目じゃない?


732:デフォルトの名無しさん
06/03/28 11:33:17
>>731
InnoDBのデフォルトはREPEATABLE_READみたいだなあ

733:730
06/03/28 11:45:37
>>731
>>732
DBベンダによってデフォルトが異なる。んで、大抵はREPEATABLE_READ(らしい)。

結論としては、複数のSELECTを発行するサービスのメソッドは
トランザクション制御しなきゃならんって事か。

734:731
06/03/28 11:59:04
>>732
Oracleのデフォルトは文レベルの読み取り一貫性(READ_COMMITTED)だったような...

>>733
>結論としては、複数のSELECTを発行するサービスのメソッドは
>トランザクション制御しなきゃならんって事か。

加えて以下の様に明示的にISOLATIONレベルを指定しないといけないのかな?
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED, ISOLATION_REPEATABLE_READ, readOnly</prop>
</props>
</property>

735:733(=730)
06/03/28 12:24:32
>>734
いささか古いが、
URLリンク(www.tomlauren.com)
によると、OracleのデフォルトはREAD_COMMITTEDみたいだ。
でも、REPEATABLE_READがNotSupportって事になると、
SERIALIZABLEしかないな。

最新の公式資料キボン。

736:731
06/03/28 14:16:43
>>735
Oracleで以下の操作をやると
conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);

java.sql.SQLException:
READ_COMMITTEDおよびSERIALIZABLEのみが有効なトランザクション・レベルです。
...
ってエラーが出るよ。

Oracleだと更新処理を伴うトランザクションでトランザクションレベルの読み取り一貫性を
保証したいのであればSERIALIZABLEを指定するしかないのでは?
※更新処理を伴わないのであればreadOnlyだけで大丈夫みたい

でも実際にSERIALIZABLEがどうしても必要になる局面があんまり無いような気も...

で、元の話は

>>724
> なあ、参照しかしないクエリーでもトランザクション切ってる
> なんて事ないよな?

ってことだけどこれって

読み取り一貫性を保証しなくて良い参照のみのトランザクションでAOPで管理せず、AutoCommitも無効にしている場合、
明示的にトランザクションを開始する必要があるのか?

という意味なのかな?


737:デフォルトの名無しさん
06/03/28 16:19:46
Strutsを使った場合の、AOPによる宣言的トランザクション管理について意見を聞かせてください。

(前提)
・サービスクラスの各メソッドはAOPによって宣言的トランザクション管理されている。
(処理)
・リクエスト->更新Action->表示Action->JSPとディスパッチする。
・更新Actionと表示ActionはサービスクラスのupdateHoge()やfindHoge()を呼び出す。

これだと、1回のリクエスト中に2つのActionが2回ビジネスロジックを実行するから、
トランザクションも2回発生してしまいますよね?(1操作=2トランザクション)

何となく腑に落ちませんが、これが当たり前なんでしょうか?

それとも、Facadeサービスから更新も検索もまとめて呼ぶべきでしょうか?
更新と検索の引数リストが全く異なる場合はFacadeしたくないんですが…

738:デフォルトの名無しさん
06/03/28 20:03:23
好きにしろとしか……
個人的には、更新作業の頻度次第で決める

739:デフォルトの名無しさん
06/03/29 11:26:28
本家よりコピペ

Spring 2.0 Release Party in Stuttgart (organized by JUGS)
Submitted by Juergen Hoeller on Fri, 2006-02-24 18:31. Event
Start: 2006-03-30 14:00
End: 2006-03-30 23:00
Timezone: -14400

いよいよ2.0が間もなく到来だぬ。

ところで2.0の目玉って何なのさ?(恥)

740:デフォルトの名無しさん
06/03/29 16:35:27
>>738
んじゃ、Action2つにする。

とりあえず、HibernateでOpenSessionInViewしておけばAction2つでも
1トランザクションになるよね?

741:デフォルトの名無しさん
06/03/31 23:11:17
>>740
トランザクションとHibernateのセッションの区別はついてますか?


742:デフォルトの名無しさん
06/03/32 00:26:43
これ、掻い摘んでいうと何?

743:デフォルトの名無しさん
06/03/32 01:38:39
軽量コンテナ

744:デフォルトの名無しさん
06/03/32 05:59:35
>>742
「Java2EEなんかクソくらえ」

745:デフォルトの名無しさん
06/03/32 06:03:37
今日は32日だ。うそをついていい日ではない。

746:デフォルトの名無しさん
06/03/32 10:39:20
URLリンク(www.2ch.net)
*エイプリルフール中止のお知らせ*
本年度、ITバブル崩壊の余波、またライブドア事件の混迷、楽天ゴールデンイーグルスぶっちぎり最下位など、
悪条件の重なりによる株価低迷が2ちゃんねる運営費にも多大なる影響を与え、
火の車である今の財務状況を鑑みるに、エイプリルフールの全面中止もやむなしという判断にあいなりました。
ご期待されていた皆様には大変申し訳ありませんが、どうぞよろしくご理解いただければ幸いです。
また、妄言民族と呼ばれ、近隣アジア諸国に多大なる苦痛を与えている日本国民としてこれを良い機会と考え、
例えエイプリルフールだとしても嘘を無くし、世界平和に貢献できる公明正大な言論の場を標榜すべく襟を正しつつ、
2ちゃんねるはエイプリルフールの根絶に今後とも邁進していく所存でございます。


747:724
06/04/02 12:30:05
>読み取り一貫性を保証しなくて良い参照のみのトランザクションでAOPで管理せず、
>AutoCommitも無効にしている場合、明示的にトランザクションを開始する必要があるのか?
そうじゃ。RDBにもよるが、読み取り一貫性を実現するために、大体がテンポラリ領域に
データをコピーしている(OracleとSQL Serverは少なくともそう)。
この事から、一覧など頻繁に閲覧されてデータ量が多い場合、直ぐエラーになっちまう。
(同時アクセスが多いと、Tempがクリアされる前に次が来ちゃうからじゃ)
このエラーを受けてDB屋にTemp領域増やせっていうのはナンセンス。
もちろん、ビジネスロジック上大きなTempが必要な場合もあるからそれは、
ちゃんと見積もりをDB屋に伝えればいい。大きくするのに否定的な訳じゃなく
PGの手抜きに対して文句を言ってるんじゃ。

また、上記の事だけじゃないが、上記だけからでも結構コスト(負荷)
が掛かることは言うまでもないよな。

748:デフォルトの名無しさん
06/04/02 13:10:03
>>747
> そうじゃ。RDBにもよるが、読み取り一貫性を実現するために、大体がテンポラリ領域に
> データをコピーしている(OracleとSQL Serverは少なくともそう)。

オラクルは違うだろ。
データがコピーされるのは読み取り時じゃなくて更新時。
コピー先はテンポラリじゃなくてUNDO表領域。

> この事から、一覧など頻繁に閲覧されてデータ量が多い場合、直ぐエラーになっちまう。

頻繁に閲覧されてもそれだけじゃエラーにならない。
頻繁に更新されている時にのんびり読んでるとORA-01555
本当に理解して書いてるか?

749:デフォルトの名無しさん
06/04/02 15:04:58
> > この事から、一覧など頻繁に閲覧されてデータ量が多い場合、直ぐエラーになっちまう。
>
> 頻繁に閲覧されてもそれだけじゃエラーにならない。
> 頻繁に更新されている時にのんびり読んでるとORA-01555
> 本当に理解して書いてるか?

激しく同意。
付け加えるなら、Oracleではトランザクションの有無にかかわらず
文レベルの一貫性は常に保証しようとするから、
> 頻繁に更新されている時にのんびり読んでるとORA-01555
という状況はトランザクションの有無にかかわらず起こりうる。

だから、>747の主張は少なくともOracleには当てはまらない。

750:740
06/04/02 18:58:45
>>741
スマソ&サンクス
考えてみれば、サービス層でAOPトランザクション管理していると、
複数Actionが複数サービス呼び出す時点で複数トランザクションになる…
んでOpenSesseionInViewしてもHibernateのSessionが1つに保たれるだけですな。

結論すると、2Actionだと2トランザクションでいくしかないのか。

751:731
06/04/03 14:34:04
あんまりSpringと関係が無くなって来たような気が...

>>747
>>748
>>749
読み取り一貫性に関しての詳細は置いておいて元の話だとOracleでは
以下になるんじゃないかな?

必要な読み取り一貫性が文をまたがるのであれば読み取り専用の
トランザクションを明示的に開始する必要がある。

必要な読み取り一貫性が文レベルでよいのであれば明示的にトランザクションを
開始しなくても良い(コネクションを生成した際のトランザクションがずっと使われている)
但し、更新処理の前にはCommitを発行して明示的にトランザクションを開始する必要がある

どちらにしてもOracleで更新やロックを伴わないトランザクションでCommitを行っても
無視される(v$sesstatのuser_commitは増えない)のでパフォーマンスには大した影響を与えない

結局のところ空コミット(参照のみトランザクションでのコミット)のコストの話なのかな?


752:740
06/04/07 20:14:03
今さらだが、ようやくStruts+Spring+Hibernate
(DelegatingActionProxy、
StandardXAPoolDataSource、
JOTM、
OpenSessionInViewFilter、
JtaTransactionManager)
のアプリが作れたよ…

さて、次はSeasarも試してみるか…

753:デフォルトの名無しさん
06/04/07 23:51:41
Hibernateって使える?

754:デフォルトの名無しさん
06/04/08 06:37:50
Java標準になったくらい使える。

755:デフォルトの名無しさん
06/04/08 13:40:24
DB設計がしっかりしているならHibernate
DB設計が腐っているならiBATIS
どっちも便利であるのは間違いない。
適材適所で。

756:デフォルトの名無しさん
06/04/27 06:56:47
spring 使いたい。しかしEJBコンテナを捨てるには問題が。
リモート呼び出しやORM(hibernateで)は置き換えることが
できたけど、EJBのMessage Driven Beanを代替するものが
見つからない。MDB便利すぎる。

757:デフォルトの名無しさん
06/04/28 01:17:20
Struts+Springで
SpringのViewクラスを使用したい場合は
どうすれば良い?


758:デフォルトの名無しさん
06/04/28 21:03:44
それってStruts使う意味あんの?

759:デフォルトの名無しさん
06/04/29 20:34:44
>>757
既存システムとしてStrutsの部品があって
ExcelとかPDFを出力したいので
SpringのViewを使用する

760:デフォルトの名無しさん
06/04/29 20:36:33
つ POI

761:デフォルトの名無しさん
06/05/08 16:21:07
Struts(SpringのStrutsインテグレーション機能)とSpringMVCって同時に動作できないの?
web.xmlとXXX-servlet.xmlを調整すれば、実現できそうだけど?

762:デフォルトの名無しさん
06/05/09 09:52:00
1.2.8記念

って何なのこれ?

763:デフォルトの名無しさん
06/05/10 18:31:22
1.2.8 についてか、Spring についてか。>何なの

764:デフォルトの名無しさん
06/05/11 00:10:50
クラス属性に対応するbean定義の<property name>の値って、何でもいいんだな。
setterの名前さえ整合性が取れていれば。

765:デフォルトの名無しさん
06/05/19 09:53:31
貼っとく

Rodが語った2.0@JavaOne

URLリンク(www28.cplan.com)

user:contentbuilder
pass:doc789


766:デフォルトの名無しさん
06/05/19 14:31:03
>765
thx.

Message-Driven POJO なんて構想もあったのか。初めて知った。

Extensible XML Confinguration は
俺様設定が乱立しそうでちと怖いな。

767:デフォルトの名無しさん
06/05/19 14:32:45
>>761
そりゃできるだろ。


768:デフォルトの名無しさん
06/05/19 16:50:26
では757は解決だな

769:デフォルトの名無しさん
06/05/20 00:21:20
ソースコード上でAppicationContextを利用してBeanを取得するしかない
場合、どうしてます?
いい方法を考えているうちにgetBean("BeanId")のコードがいっぱいできた
まんまプロジェクト終盤にきてしまった。。。

770:デフォルトの名無しさん
06/05/20 00:56:56
そんなに気にしなくていいと思うけど、
getBeanId()のメソッドを用意して静的にアクセスできるようにはしてる。


771:デフォルトの名無しさん
06/05/20 00:59:34
もちろんID取得もSpringで管理するんだよな?


772:デフォルトの名無しさん
06/05/20 01:01:22
そもそも、自分でgetBeanしなくていいように作ります。
StrutsならDelegatingActionProxy使えばいいし
TapestryもSpringと連携させてコンポーネントにInjectしてもらえるし。

773:デフォルトの名無しさん
06/05/20 06:12:45
それができない場合はルックアップするしかない。
どこからでもルックアップできてしまうので収集がつかなくなるおそれはあるけど、
>>770 のように bean の種類ごとにルックアップするメソッドを用意しておけば
いく分見通しもよくなると思われ。

774:デフォルトの名無しさん
06/05/20 08:56:55
それただのサービスロケータになってる
別にいいけど

775:デフォルトの名無しさん
06/05/20 12:58:25
サービスロケータだと何がダメなの?

776:デフォルトの名無しさん
06/05/20 13:05:37
DI自体がサービスロケータ

777:デフォルトの名無しさん
06/05/20 15:56:24
>>775
サービスロケータに依存してしまうからですよ。

778:デフォルトの名無しさん
06/05/20 15:59:55
ただ、サービスロケータはコンパイルエラーでミスを検地できるので
単純にどっちが上とかはいえない

ってDIってネーミングつけた人いってなかったっけ?

779:775
06/05/20 16:13:32
>>777
なるほどー。ありがとうございます。
となるとそれくらいの依存は気にならないなー。
元レスは注入できない場合の話だし

780:769
06/05/20 16:55:15
かといって他の解決方法もないのですよね。たぶん。
ドメインモデルとは相性が悪いのでしょうか。やはり。
いまさら設計をトランザクションスクリプトにできないし。。。
まっ宣言的トランザクションだけでもかなり有効であることには
変わりないわけだし。

781:デフォルトの名無しさん
06/05/20 22:52:38
>ソースコード上でAppicationContextを利用してBeanを取得するしかない
場合

ってどういう場合なんだろう?
素朴な疑問。

782:デフォルトの名無しさん
06/05/21 03:47:30
私が使っているフレームワークにはイベントリスナを登録しておくと
コールバックしてくれるという機能があるけど
イベントリスナには依存性注入のチャンスがないのでApplicationContextを使う。

783:デフォルトの名無しさん
06/05/21 07:33:25
>>782
ここで解説されているみたいなことをやるべし
URLリンク(www-128.ibm.com)


784:782
06/05/22 00:01:56
>>783
自分でインスタンスを生成する必要がある場合の話です。



785:769
06/05/22 15:49:50
getBeanを利用する主な場面とは。。。
たとえば親子関係をなすドメイン(請求書と請求明細)などは
ロジック上で画面の内容をドメインに変換する必要があるのですが
明細クラスのような1クラスで複数インスタンス必要になる場合は
betBeanで必要数分インスタンスを生成する必要がある。
みたいな場面です。

786:デフォルトの名無しさん
06/05/22 16:54:00
>>785
内部でインスタンスを生成する必要があるロジックの場合は、
そのインスタンスを生成するFactoryクラスをインジェクトする
ってのをよくやる。

787:デフォルトの名無しさん
06/05/23 22:20:49
てかドメインモデルとはめちゃ相性悪い。
アナパタ時代の設計にDI使おうとすると死ねる

788:デフォルトの名無しさん
06/05/24 11:41:00
よくわからんが、
higaタソが提唱しているシンドメインモデルならドメインロジックだけDIにして、ドメインモデル(データ)
だけ通常の手段(new)で生成すればよいのでは?
URLリンク(d.hatena.ne.jp)

789:デフォルトの名無しさん
06/05/24 13:07:20
▽どっちが速いSeasar2 VS Spring
URLリンク(cm.thinkit.co.jp)

790:デフォルトの名無しさん
06/05/24 14:00:57
>>788
オレもそうしてる。ドメインのPOJOは自分でnewする方がOOしてる気分になるね。
DIに生成させるのはServiceLayer〜DataStoreLayerのドメイン『操作』クラス達だぬ。

>>789
キャハキャハ。なんかヒガタソ最近人格が変わった? JavaOneでイジメでもくらったのかな。

PowerdBySpringのフレームワークがこんなにポコポコ誕生している現状を見れば、
1.2.xとスピード競争やった所で焼け石に水ダヌ。
AspectJが推奨スタイルになる2.0のこと知らぬ訳ではないだろうにね。

別にRodファンではないけどさ。

791:デフォルトの名無しさん
06/05/24 15:39:44
785が考えるケースで getBean() することはない。
データは普通に new したらいい。
なんで getBean() しようとしたのか教えてくれ。
メリットが何一つ思い浮かばない。

792:788
06/05/24 17:02:50
>データは普通に new したらいい。
激しく同意。

ビジネスロジック周りでDIしたいと思うなら、
ドメインビジネスとしてクラスを切り分ければいいのでは?と思った次第。

793:769
06/05/24 22:06:40
>シンドメインモデル

>ドメインビジネスとしてクラスを切り分ければ。。。

ということは、私の思うトランザクションスクリプト + DAOという
組み合わせがDIでは有効という考えと同意と考えられます。
そちらのほうが合っているという結論ですよね。結局は。
DIを利用する上では状態をもつドメインはミスマッチであるということですね。


794:769
06/05/24 22:24:03
>なんで getBean() しようとしたのか教えてくれ。
>メリットが何一つ思い浮かばない。

785であげた例も悪かったですが。。。
1.getBeanするドメインが他のドメインを持っている。
オブジェクトグラフの一気取りが可能(Factory作ればすむという話もあるが)
2.やはりInterfaceを実装する実クラスをコードに書かなくてよい
この2つはかなりのメリットです。

もちろん前提がドメインロジックとデータの分離であれば、データに対して
getBeanするメリットが何もないというのは理解できますが。

DIを利用する上では状態をもつドメインはミスマッチである
けれども
上記の理由があるためドメインモデルでもDIを採用しました。
けれども
getBeanする部分をもっといいやり方はないですかねーという質問でした。

795:デフォルトの名無しさん
06/05/25 01:09:09
Hibernate等のORマッパでドメインモデルを取得すれば、
one-to-manyなんかの関係は勝手に構築してくれる。
1の芋づる式にとりたいというだけでgetBeanするのはDIの役割とは違う希ガス。
(もしかして、DAOが生成するデータが≠ドメインモデルな設計?)

>2.やはりInterfaceを実装する実クラスをコードに書かなくてよい
はちょっと意味が理解できん。スマソ。解説キボン。

>DIを利用する上では状態をもつドメインはミスマッチである

>上記の理由があるためドメインモデルでもDIを採用しました。
は納得できないなぁ。
そう考えた理由は?

あと、ビジネスロジックを切り出しただけでトランザクションスクリプトって呼ぶの?
SQLで記述するのか、呼び出し側の言語で記述するのか、が
ドメインモデルとトランザクションスクリプトの最大の相違だと思ってた。
URLリンク(capsctrl.que.jp)

796:デフォルトの名無しさん
06/05/25 01:14:00
うーん、ドメインモデルとかDIとかいろいろいじった結果一時DIに傾倒したが....

結局ところ、ドメインモデルのサポートとしてDIを使うくらいにしておきたいと
思った。
もしどうしてもどっちかを取らなくちゃいけなくなったら、サービス層を内製しても
ステートフルなドメインモデルを選択したい。Hibernateとか使うと、リッチなJava
オブジェクトをそのままDBにマッピングできたりするし。

それに、そっちのほうがオブジェクト指向っぽい感じがするから。

797:デフォルトの名無しさん
06/05/25 15:57:44
精読したが
> 上記の理由があるためドメインモデルでもDIを採用しました。
の結論に至った理由が理解できなかった。

実際何を getBean() したのかが分からない。
getBean(リテラル文字) まくりな状況より
new した方が可読性高いし変なキャストもせずに済む。
設定ファイルで singleton="false" を書き忘れる心配もない。
どうしても生成部分を隠したいなら、
簡単な Factory を作って、そいつを DI でセットしたらいい。

798:デフォルトの名無しさん
06/06/29 07:36:24
RC2あげ

799:デフォルトの名無しさん
06/07/04 09:35:38
過疎スレ保全

つか、2.0期待sage

800:デフォルトの名無しさん
06/07/04 20:58:53
時給1000円でJava教えてくださるかたを募集します
場所 所沢(池袋・高田馬場から直通)
よろしくおねがいします
i−want−to−study−java@hotmail.co.jp
(アドレスは全角で書いてあるので半角に直してください)

801:デフォルトの名無しさん
06/07/05 03:49:26
コンビニのバイトより安いですが、よろしくお願いします。

802:デフォルトの名無しさん
06/07/05 16:53:11
おひおひ、1,000\/h っていくら何でも安すぎだよ。
それじゃ労働しようとする意欲湧かねぇな。

君が♀なら別。

803:デフォルトの名無しさん
06/07/05 17:12:10
javaを教えると一言に言っても色々あるしな

804:デフォルトの名無しさん
06/07/05 19:13:48
Springと関係ないな

805:デフォルトの名無しさん
06/07/05 19:33:12
>>804
つーかスレタイにJavaが含まれているスレに無差別絨毯爆撃しているだけだから無視するのがよろしいかと

806:デフォルトの名無しさん
06/07/05 22:35:28
しかし以外にたくさんあるんだな。
>つーかスレタイにJavaが含まれているスレ
ブックマークしていながら、今回のマルチが出るまで気づかなかった。

807:デフォルトの名無しさん
06/07/07 15:39:40
Spring WS のドキュメントが結構揃ってきたすね。
前は XML-Object Mapping の章しかなかったのに。
そろそろまじめに調べ始めるかな。

808:800
06/07/17 21:33:22
教える対象は超初心者です。

専門学校などでJavaを勉強されていて夏休みだけ教えたいという方も歓迎です

809:デフォルトの名無しさん
06/07/18 12:06:26
javaの前に常識って物を勉強したほうが良いと思います^^;

810:800
06/07/18 12:49:11
常識も教えていただければと思います。

811:デフォルトの名無しさん
06/07/18 14:19:48
ここで聞いても学べません

812:デフォルトの名無しさん
06/07/20 22:25:56
もはや完全にSeasarに押されてるな。

813:デフォルトの名無しさん
06/07/21 00:57:25
>>812
獄長乙

814:デフォルトの名無しさん
06/07/21 23:57:04
WebMVCのSimpleFormControllerで、
フォームのパラメータ名とCommandのフィールド名を
任意にマッピング(バインド)する方法がわからない…

815:デフォルトの名無しさん
06/07/24 17:54:58
spring:bind使ってないの?

816:デフォルトの名無しさん
06/07/26 12:31:58
Java World 2006/09 特集

2.0 とか関係なしに
・EJB3.0 に懐疑的
・ORM は最終的に JDBC に回帰する
な姿勢が良かった。

あと Acegi の記事が後で役に立ちそう。

817:デフォルトの名無しさん
06/08/01 13:18:00
漏れJavaWorld斜め読みした所。詳しくはこれから読む。

豆蔵が書いたのねコレ。漏れは以前、長谷川ダンナの話を
聞いたことがあるのだが、

「Hibernateは確かに優れたプロダクトだが万能じゃない。
 陥りやすい穴もあるから慎重に検討してから導入した方がいい。」

って言ってた。禿同だったんだけどね。今回の記事もその思想が
根底に流れているみたいだね。

JPAマンセーな流れの中でこういう視点は貴重だと思う。

818:デフォルトの名無しさん
06/08/09 01:22:18
Servlet依存のコード(JSFバッキングBeanも含む)とサービスメソッド
のデータ受け渡しってPOJOでもDTO使った方がいいのかな?
直にビジネスオブジェクト受け取った方がコーディングが楽なんだが・・・

819:デフォルトの名無しさん
06/08/10 09:35:55
>>818

URLリンク(www.atmarkit.co.jp)
から抜粋

このように、POJOをそのままEntity Beanとして扱うことができれば、従来のEJB開発で
Web層とのデータ交換に利用されてきたDTO(Data Transfer Object)パターンはもはや
不要となる(実のところ、J2EEパターンの多くはEJBの使いにくさを緩和するために
生み出されたアンチパターンであるという見方もある)。


820:デフォルトの名無しさん
06/08/15 22:23:19
うーん、結局、「Web層」って、BCE でいうと、どこになるんだろか。
「Web層」がBだけの役割であれば、M に B を依存させないために、
DTO(のようなもの)は必要のような気がする。

表示で使うPOJOを直接永続化するということは、
逆に永続化の都合に(N:N関係は扱えないとか)、
表示部のロジックが依存してしまう、ということになるんじゃないの?

821:デフォルトの名無しさん
06/08/16 10:13:12
この本の書評たのむ。

URLリンク(www.amazon.co.jp)

特にオレが知りたいのは、

・2.0を紹介してるか。

・JPAを使ったWebApp例で、マンセー記事ばかりではなく
 注意点やアンチパターン的な解説もしているのか。

・SpringWebServiceの解説あるのか。

・SpringRichClientとかAcegi(SpringSecurity)の解説あるのか。

でも、読んだ印象でも何でもいいから知りたい。

822:デフォルトの名無しさん
06/08/17 11:01:55
>820
> 表示で使うPOJOを直接永続化するということは、
> 逆に永続化の都合に(N:N関係は扱えないとか)、
> 表示部のロジックが依存してしまう、ということになるんじゃないの?
シンプルなアプリなら問題ないと思うんだが。
ただ、発想としては「永続化するPOJOを直接表示する」が正しいかと。

どうしても気になるなら、
サービス層で永続化用DTOからプレゼン用DTOへ変換してやれば良いと思う。(higaタソのシンドメインモデルってやつね)
問題は、プレゼン用DTO・変換ロジックを実装するコストに対して価値があるかどうか。では?

823:822
06/08/17 17:21:40
間違い。
× シンドメインモデルってやつね
○ Dxoってやつね

あと
URLリンク(capsctrl.que.jp)

824:デフォルトの名無しさん
06/08/22 09:50:14
貼っとく

【IBM】Introduction to Spring 2 and JPA
URLリンク(www6.software.ibm.com)


825:デフォルトの名無しさん
06/08/25 23:20:47
URLリンク(www.sssg.org)
Seasarの連中もキモイけどこれもイタイ。

826:デフォルトの名無しさん
06/08/25 23:23:36
>>824
ログインパスワード教えて

827:デフォルトの名無しさん
06/08/26 09:06:37
>>825
ゆるされるはんいじゃない?

828:デフォルトの名無しさん
06/08/26 10:29:20
回答がおもろい。

829:デフォルトの名無しさん
06/08/26 23:38:21
仲間由紀恵でなく蛯原友里にすべき

830:デフォルトの名無しさん
06/08/27 23:31:05
>>829
仲間由紀恵は沖縄出身

831:824
06/08/28 09:30:04
>>826

ごめんごめん、先に米IBMの会員登録してくれ。
無料&誰でもOKね。

URLリンク(www.ibm.com)


832:デフォルトの名無しさん
06/08/28 12:16:59
抜粋くらいないとわざわざ会員登録してまで見ようとは思わない。

833:デフォルトの名無しさん
06/08/28 12:43:34
ここでそんな文句言われても…

834:824
06/08/28 18:21:41
序文

Java server applications need not be difficult and tedious to create.
Now in its second generation, the lightweight Spring framework adds a large suite of features
that make it simple for even new server application developers to use.
One key enhancement is Spring 2's integration with the Java Persistence API (JPA),
a cornerstone of the Enterprise JavaBeans (EJB) 3.0 specification. In this tutorial,
learn how to create server applications from scratch using the Spring 2 framework.


835:824
06/08/28 18:26:13
その次

Before you start

For almost a decade, the "proper" way to build a robust and
maintainable server-side Java application has been the exclusive domain
of the Java 2 Enterprise Edition (J2EE) platform.

J2EE applications are built using Enterprise JavaBeans (EJB) technology
and run on servers that facilitate deployment and provide rich container services
(such as the management of database connections and pooling).

These servers also add value by providing deploy-time declarative control of
important features such as security and transactions. Although versatile,
the J2EE development process involves many tedious and repetitive tasks
and the creation and maintenance of large numbers of source code files.

Many lightweight Java frameworks claim to simplify server application development,
but none matches the Spring framework in maturity and popularity (see Resources).
Now in version 2, Spring was designed from day one to simplify the server application
building process.



836:デフォルトの名無しさん
06/08/28 18:26:48
その次

Instead of approaching development from an all-in-one container perspective,
Spring aims to provide just enough support for an application's requirements
without the burden of a full-fledged container environment. Spring eliminates code bloat:
you can code and test business objects completely outside of any container,
letting your business-object code remain simple, testable, maintainable, and reusable.

With the arrival of Java EE 5 and EJB 3.0, the J2EE community is poised to meet
the Spring developer community. EJB 3.0 supports the notion of lightweight POJOs
(Plain Old Java Objects) as EJB components and introduces the Java Persistence API (JPA),
a persistence mechanism that can run externally to the container.

This persistence mechanism automates the movement of information between business objects
and external relational databases.

Version 2 of the Spring framework has continued its evolution and also leverages JPA
as a persistence mechanism.

In this tutorial, you will work with Spring 2 and JPA persistence.
You'll create a server application using the Spring 2 framework, complete with access
to a DB2 Express-C database. The Eclipse IDE facilitates the development of the Java application
and enhances your exploration of the Spring 2 framework.

これ以上は面倒見ない。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4919日前に更新/243 KB
担当:undef