- PR -

beansについて

投稿者投稿内容
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2003-01-22 08:48
忙しかったので遅めの書き込みです。

引用:

masakiさんの書き込み (2003-01-18 11:00) より:
 最近はSingleton+Factoryで管理クラス(コンテナ)を作るのが流行って(?)いるようですが、他のBeanを管理するようなコンテナをわざわざ自作するくらいなら素直にEJBコンテナ+Session Beanを使ったほうがはるかに楽なような気がするのですが、どうなんでしょう?
 苦労して管理コンテナを自作するよりは、既に高機能で安定したコンテナが提供されているのであればそれを使ったほうが、バグも少ないだろうし、車輪の再発明のようなことをしないで済みますよね?
 それに機能的にも、管理コンテナを自作してもインスタンス数の管理(プーリング)くらいは簡単に実装できるでしょうけど、EJBの持つejbActivateやejbPassivateのようなライフサイクルの管理機構を自作で実装しようとするとかなり大変だと思います。(たぶん規約付けられたインターフェイスを実装したBeanに対して定期的にコールバックを発行するような形になると思いますが)
 EJBは「大規模案件でなければ不要」とよくいわれますが、コンテナの管理機能を使うだけでも利用価値は大いにあると思っていますが、どうでしょう?


私が思うにEJBがその力を発揮するのはミドルウェアとしての独立性が求められた時だと思います。たとえば、Servletやクライアントアプリケーションなどなど、ネットワークを介してEJBにアクセスする場合などの分散オブジェクト的な例があげられます。

ところが、用途が特定されるような小規模なプロジェクトではEJBとEJBにアクセスするクライアントが同一サーバーにあることが多く、分散オブジェクト用にデザインされているEJBでは力を持て余すかと思います。

大は小をかねるといいますので使うなとは言いませんが、個人的には KISS - Keep It Simple (& Stupid) が好きなのでいらない機能はつけたくないですし使わないようにしています。

>苦労して管理コンテナを自作するよりは、既に高機能で安定したコンテナが
>提供されているのであればそれを使ったほうが、バグも少ないだろうし、
>車輪の再発明のようなことをしないで済みますよね?
そこまで「苦労」をするほどのものを作るのであれば、提供されているコンテナを使った方がいいでしょうね。ただ、EJBの仕様で規定されているすべてを実装するわけではないですからそんなに面倒とは思いません。また、自作のコンテナもどきは別のプロジェクトで再利用可能です。(きちんとしたデザインであればですが・・・)

ところで、些細なことですがデータベースへのコネクション管理ってコンテナの一種なのでしょうか?

まぁ言いたいことは、何でもかんでもすぐにEJBを使うのはどうかな?ということです。良薬も使いすぎると副作用が出ますし、アンチパターンでも確か「打ち出の小槌」とかいうのがありますよね。
tasuku
常連さん
会議室デビュー日: 2001/08/11
投稿数: 28
投稿日時: 2003-01-22 12:44
引用:

まぁ言いたいことは、何でもかんでもすぐにEJBを使うのはどうかな?ということです。良薬も使いすぎると副作用が出ますし、アンチパターンでも確か「打ち出の小槌」とかいうのがありますよね。


また、脱線してしまいそうですが...。

何処かで、J2EE開発におけるEJBのシェア?を調査した記事があったと思いましたが
結果は「2割程度」。 で、その回答が、シェアが低いのではなく、EJBを必要と
するような開発は元々そんな物。

となっていたような記憶が...。

それに、WebSphereのようなEJBサポートの有名どころの商用ミドルウェアが
100万以上、という状況ですから、そもそも小規模開発では使うな!
と言っているも同然のような気がします。

masaki
常連さん
会議室デビュー日: 2001/12/10
投稿数: 26
投稿日時: 2003-01-22 21:09
 スレッド名からはずれまくった雑談スレになってしまいそうですが・・・。

> ところが、用途が特定されるような小規模なプロジェクトではEJBとEJBにアクセスするクライアントが同一
> サーバーにあることが多く、分散オブジェクト用にデザインされているEJBでは力を持て余すかと思いま
> す。

 この問題(=EJBは分散オブジェクト通信を前提としている為、同一VM・同一サーバ上のオブジェクト間通信の場合にもIIOPオーバヘッドがかかってしまう)に対処すべく、EJB 2.0からローカルインターフェイス(RMI over IIOP通信を行わない)が登場していますね。

> また、自作のコンテナもどきは別のプロジェクトで再利用可能です。(きちんとしたデザインであ
> ればですが・・・)

 もちろん拡張性の高いコンテナを作成して、後はプロパティの調整だけで再利用ができるような形に仕上がっていれば良いと思います。別に自作コンテナを否定するつもりはありません。
ただ再利用の際にコードに手を入れるような作りになっているのであれば、プロジェクト毎に似て非なるコンテナが氾濫することになってしまい、管理上良い結果にはならないでしょう。

> ところで、些細なことですがデータベースへのコネクション管理ってコンテナの一種なのでしょうか?

 コンテナという用語自体の定義が難しいのですが、「他オブジェクトの生成やライフサイクル管理を行うstaticな(=VMプロセス上に常駐している)Factoryオブジェクト」であるものがコンテナだと私は思っています。(「Servletを管理するServletコンテナ」「EJBを管理するEJBコンテナ」etc)
「JNDIコンテナ」という言い方は聞いたことないですが、「リソース接続を管理するJNDIコンテナ」という言い方はできるのでしょうか?これについては識者の見解を待ちます。

 なお、JNDIはEJBHomeインターフェイスやJMSのバインドを行う性質上、普通はEJBコンテナに組み込まれることが多いようですが、TomcatみたいにServletコンテナに組み込まれる場合もあるみたいですね。正直Tomcatが4.0からJNDIをサポートするとは思っていなかったのですが、この機能を知らない人はまだ多いのでしょうか?(将来的にEJBコンテナもTomcat 6以降で組み込まれたりすると面白いかも、なんて思ったりしてます。)

> 何処かで、J2EE開発におけるEJBのシェア?を調査した記事があったと思いましたが
> 結果は「2割程度」。 で、その回答が、シェアが低いのではなく、EJBを必要と
> するような開発は元々そんな物。

 以下は私見ですが、そもそもJ2EEはあくまでも中規模以上かつある程度の信頼性(業務トランザクションや、コンポーネント指向によるメンテナビリティの維持等)が求められるWebアプリケーションをターゲットとした技術だと思います。だからこそMVCスタイルを採用しているのでしょうし。
小規模サイト開発であれば、競合技術(CGI、PHP、ASP、ASP.NET)がかなり充実していますし、これらはコンパイル不要、デプロイ不要等、「スクラップ&ビルト開発」に非常に適している技術の為、コストパフォーマンス上J2EEよりはるかに採用メリットがあります(J2EEでもJSPのみであればこれらと同等の手軽さはありますが)。

 そもそもJ2EEのデファクトパターンであるMVCという発想自体、明らかに中規模を意識した「複雑な」開発スタイルです(J2EE開発者がEJBを「煩雑で大規模用」と考えているように、PHP開発者はJ2EE with MVCそのものを「煩雑で大規模用」と考えています)。
私も正直、トランザクションを必要としないレベルのWebアプリケーションであれば、むしろPHPを使ったほうが開発生産性の面から見ても優れていると思います。

> それに、WebSphereのようなEJBサポートの有名どころの商用ミドルウェアが
> 100万以上、という状況ですから、そもそも小規模開発では使うな!
> と言っているも同然のような気がします。

 WebSphereエントリ版(Express)とJRunは20万程度です(DBMS市場でいうところのMS SQL Server程度の価格)。他にも本家Sun ONEの無償版、オープンソースのJBoss(Tomcatと併用して使うようになっている)等があります。いずれも商用利用は可能のはずです。
例えばDBMS市場でシェアNo.1のOracleだけを見て「DBMSは小規模開発では使うなと言っているも同然」と考えたりはしませんよね?
エントリレベルであれば安価な製品はちゃんと存在します。普及させようという動きが少ないのが現実ですが。
少なくとも「高価だから使わない・使えない」という状況ではなくなってきているかと。

 なんかすっかりEJB擁護派の発言になってしまいましたが、結局この手の話題(「JavaBeansかEJBか?」とか「ビジネスロジックはStatefulかStatelessか?」etc...)は設計思想に近いものがあるので、答えはでないと思います。
ただEJBに対して「食わず嫌い」であることだけは良くないと思っています(EJBを使わない為の逃げ文句にはもううんざり)。もちろんここでレスしている方々はEJBを使用したことがある上で発言していると思いますが。

 かくいう私も昔は「EJB恐怖症」で、理由をつけては勉強するのを避けていたのですが、PHPによってロウエンド開発現場から押し出されるような形で業務系Webに携わるようになり、そこで初めてEJBを使い出しました。で、やってみたら「なんだ恐れることはなかったんじゃないか」と。

 個人的にはEJBが今後敷居が低くなって普及するか、それともDCOMやCORBAといった複雑になりすぎた分散オブジェクト技術と同じ運命を辿るかは興味があります。

スキルアップ/キャリアアップ(JOB@IT)