EJB(初心者歓迎)
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGかなり複雑です。
そこでマッタリとEJBを語りましょう。
特にプログラミング技法など)
0237デフォルトの名無しさん
NGNGJBでもできるんだけど
0238233
NGNGいや、知らないも何も、プロジェクトで使ってから
三年くらいになりますが・・・
>>236
J2EE仕様が最初に発表されてから5年くらいたちますが、
どのアプリケーションサーバベンダーも、いつまでたっても
パフォーマンス面の不安を解消できていません。
そのことについてどう思います?
特に、EJBのCMPは仕様自体に無理があると感じることはありませんか?
0239デフォルトの名無しさん
NGNGどの辺に無理があると思うの?
0240233
NGNGデータベースのテーブルとのマッピングです。
テーブルのJoinをうまく表現できてないように思えます。
結局、1テーブルに単純に一行挿入したり、更新したりするのは
簡単にできますし、パフォーマンス的にも悪くないのですが、
複雑な構造をもったテーブルの検索にはうまく対処できません。
0241デフォルトの名無しさん
NGNGJBuilder Enterpriseと、WebObjectsを比べてるのか。
開発効率と実用的な運用まで考えたらJBは、WOに遙かに及ばないよ。
知名度と技術者確保に関しては、WOはJBに遙かに及ばないけど(w
0242デフォルトの名無しさん
NGNGうちのプロジェクトがまさにそう。
開発やってる人間にDDのここの設定
直してください。
って言っても、ハァ?って答え。
その辺も面倒見れるだけの、人数が
基幹チームにいればいいだが、
どうしても手が足りないところとか、
力作業は開発にお願いすることになり、
結局なにもわかってない人相手にするのは
疲れるわけで。
嫁とはまだやってないわけで。
0243デフォルトの名無しさん
NGNGなんでもかんでも、
・複雑なテーブル構造
・SQL文
で解決しようと考えていることが間違い。
0244デフォルトの名無しさん
NGNGだからといって、EJBが最適とは言い切れないだろうけどな。
0245デフォルトの名無しさん
NGNGWIN版ないの
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNG更新系はCMP-EB、参照系はSLSBからDAOコールというのが、
EJBの定石らしいぞ。まあ、通信に伴うネゴシエーションが
時間コストの大部分だということが分かっていれば、そう
するのが当たり前だという結論には当然達するはずだが・・・
なんで、そうしないヤツラがおおいんだろうね?
0248247
NGNGあと、EJB2.0のCMP仕様は、RDBのOuterJoinをCMPで表現
するらしいぞ。試してみたら?
0249デフォルトの名無しさん
NGNGEJBコンテナ環境とか、呼び出す為のクライアントとか。
やっぱJ2EE RIだのJBossだのフリーで軽いAPサーバを各開発PCに入れてそこでデプロイして、
わざわざドライバ作ってそこからアクセス?
0250デフォルトの名無しさん
NGNGこの前のJavaOneで、そのあたりの話があってたね。
(結局良くわからんかったけど。)
0251デフォルトの名無しさん
NGNGそーだす。
0252デフォルトの名無しさん
NGNG私は JBuilder Ent版 を使っているので、付属のBorland Enterprise Server
をJBuilderIDE内から起動しています。
0253デフォルトの名無しさん
NGNGOptionAというものもあるようですね
http://bdn.borland.com/article/0,1410,29074,00.html
http://bdn.borland.com/article/images/29074/transaction_commit_options.pdf
0254デフォルトの名無しさん
NGNGBorlandEnterpriseServerで、WebserviceパーティションにWebServiceを配布して
StandardパーティションにEJBのjarを配布させて、WebServiceからEJBを呼ぶ際に
Log4j.propertiesが見つからないってなExceptionが発生するんですが。
あと、CORBAのBAD_PARAMってなExceptionも。
すげー困ってるんでわかる方、教えてください。
BESの設定の問題?
とりあえずwarに、必要なライブラリは含めて配布してます。
0255デフォルトの名無しさん
NGNGC:\BorlandEnterpriseServer\var\servers\yourhost\adm\properties\partitions\standard\partition.properties
に、container.auto.expand.wars=true という行を追加しましょう。
webservicesパーティションにはこの行が追加されていることに注目しましょう。
この行があると、
C:\BorlandEnterpriseServer\var\servers\yourhost\partitions\standard\tmp
に、展開用のディレクトリが作成されます。
あと、
http://info.borland.com/devsupport/bes/faq/5.0/webfacilities/web_container.html#no_cgi
にも、目を通してください。
0256デフォルトの名無しさん
NGNG「CORBAのBAD_PARAMってなException」は、何が例外が出るようなことを
しているのでは?
0257デフォルトの名無しさん
NGNGちと勘違いしました。
Log4j.propertiesが見つからないというのは、ApacheAXISの設定の問題ですね。
ApacheAXISのマニュアルなどを参考にしてください。
0258デフォルトの名無しさん
NGNG貴重なアドバイスありがとうございます!
warを解凍して実行するプロパティはTrueを指定したつもりだったのですが
もう一度確認してみます。
CORBAのExceptionの方がよくわからないのですが、EJBもWebServiceの
クラスもSerializableインターフェースを実装させているのですが、
そーいうたぐいのエラーなのでしょうか?
ちなみにJBuilder上でTomcatを起動している場合はEJBの呼び出しも、すべて
うまくいっています。
Log4jの件も、Axisのマニュアルを確認してみます。
ありがとうございます!
0259デフォルトの名無しさん
NGNGLog4j.properties の件は、AXISのライブラリをwarに含めるのではなく、
パーティションのlibディレクトリに置いたほうが良いかもしれません。
また、CORBAのException の件は、パーティションのクラスローダの設定
が関係しているかもしれません。
http://info.borland.com/devsupport/bes/faq/5.0/webfacilities/web_container.html#classcast
が参考になるかも。
0260デフォルトの名無しさん
NGNG問題の件は無事に解決させてきました。
非常に参考になり助かりました。
ありがとうございました!
0261デフォルトの名無しさん
NGNG0262デフォルトの名無しさん
NGNGあれ登録すると何がどうなるの?今は参考書の言われるままになんとなく書いているんだけど。
あれ書くとコードの中で"ejb/xxxxxx"とか直打ちしてるのが必要なくなるとか?
0263デフォルトの名無しさん
NGNG> DD書く時に出てくるJNDI名とかJNDI名の参照って何ですか?
EJBを(名前を付けて)登録してるの。
> コードの中で"ejb/xxxxxx"とか直打ちしてるのが必要なくなる
なくならないよ。その名前で呼びだせるようになるだけ。つうか、その
直打ちは、client側のコードでしょ。
0264デフォルトの名無しさん
NGNGコードの中に直打ちしたJNDI名がそのまま使われると、
あとでJNDI名の変更がやりにくいから、DDでマッピングする
仕組みが導入されたんだと思われ。
0265264
NGNG0267262
NGNG確かJNDIを意識する必要があるのが、
・JAR自体につけるJNDI
・WARでつけるJNDI参照
・EARでつけるJNDI参照
・クライアントの直打ち
の4箇所だったと思うんだけど、
「JAR自体にJNDI名をつけてJNDIに登録して、クライアントからその名前で呼ぶ・・・というのは
分かるんだけど、WARやEARにJNDI参照をつけるのには何か意味があるのかなー?って
思ったわけです。コンテナがこの情報を使って何をしてるのかが分からないんです。
これって特に指定しなくても動作するものなのですか?
あと、リソース参照というのも分かりません。JDBCのDataSourceとかもここに登録するの?
今はコードのlookupで"jdbc/xxxxx"を決め打ちしてて、これで特に問題ないから気にしてないんだけど、
DDに記述すると何か挙動が変わるんでしょうか?
うーんどうやら根本的な知識が不足しているようだ。
0268263
NGNG少し遠まわりになるけど、
http://www.wakhok.ac.jp/%7Emaruyama/j2ee/j2ee/
とかで少し勉強することをおすすめする。
ちみなら、3〜4時間もあれば読み終る。
0269デフォルトの名無しさん
NGNGlookup(java:comp/env/jdbc/hogeDatasource)
でルックアップしている場合は、そのENC(環境ネーミングコンテキスト)内の
jdbc/hogeDataSource
はDDの中で宣言しておかなければいけないのよ。
そのjdbc/hogeDataSource を、実際のアプリケーションサーバーで定義されているDatasourceの
JNDI名(myappli/fooDataSource)とbindingしなければいけないのよ。
jdbc/hogeDataSource -> myappli/fooDataSource
bindingの仕方はアプリケーションサーバーによって異なるのよ。
直接、lookup(jdbc/hogeDatasource)
のようにするのは、もう古いやりかたなわけよ。
0270262
NGNG大変参考になります。当方たった1人でJ2EEの調査やらされてるもので。
で、あまり頭よくないお馬鹿さんなので、もう少し質問させてください。
教えていただいたサイトはとりあえずJNDIの項目だけ読みました。
自分なりに以下のような手順になるのかな?と考えたんだけど、これであってますか?
(たぶん間違ってるだろうなぁ)
1.まずDDにJNDI名とその実体をバインディングするように記述する。
EJBであればEJB-JARのDDに、実体クラス名「samplepackage.HogeHogeHome」とJNDI名「ejb/HogeHoge」のマッピングを登録する。
JDBCであれば??????のDDに、定義Datasource名「sampledatasouece/HogeHogeDB」とJNDI名「jdbc/HogeHoge」のマッピングを登録する。
2.続いてDDにJNDI名と参照するクライアント側の変換マッピングを記述する。
EJBであればWARとEARに、使用するJNDI名「ejb/HogeHoge」とLookup名「sampleapp/ejb/HogeHoge」のマッピングを登録する。
JDBCであれば???????に、使用するJNDI名「jdbc/HogeHoge」とLookup名「sampleapp/jdbc/HogeHoge」のマッピングを登録する。
3.コードの中ではLookup名でNamingContextからオブジェクトを取得する。
EJBであれば、lookup( "sampleapp/ejb/HogeHoge" )とする。
JDBCであれば、lookup( "sampleapp/jdbc/HogeHoge" )とする。
??????の部分は分かりませんでした・・・
0271263
NGNGJDBCドライバをJNDI名にバインドするのは、各アプリケーションサーバによって違う。
基本的にはサーバの設定ファイルか、APIで設定する
0272262
NGNGそういえばJDBC設定はJ2EE RIではconfファイルに、WASでは管理コンソールからリソース設定した記憶があります。勘違いですスミマセン。
「jdbc:oracle:thin:servername:sid|jdbc/HogeHogeDB」とかいうヤツですよね?
てことは1のステップでどこかにJDBC設定を行う必要はないってことですか?(APサーバとして既に設定されているから)
で、2のステップが、
「JDBCであればEJB-JARに、使用するJNDI名「jdbc/HogeHoge」(APサーバに登録済)とLookup名「sampleapp/jdbc/HogeHoge」のマッピングを登録する。」
となるんでしょうか?
0273263
NGNG良く見ると微妙に勘違いしてそう。基本は、jndi名でlookupするんだけど。
あと、earのDD(application.xml)ではJNDIの設定なんて無いけど。
0274デフォルトの名無しさん
NGNGsunのドキュメントとかネットの解説ページのEJBのサンプルって有りますよね。
あれってほとんどが同じVM上でクライアントのプログラムを実行してるじゃないですか
で、そのクライアントプログラムを別のVM上で実行しようとしてるんですが
それについての詳しい資料がみつかりません。
ネットで探したり本屋で立ち読みしたり(金がないんで)してどうやら環境変数を
設定して実行すればいいのかなとは思ったんですが(java -D…って感じで)
もう少し詳しい資料、もしくは環境変数の設定のし方を教えていただけませんか?
0275262
NGNGあれ?そうなんですか?JDBCの話ですよね?
てゆうか今は実際にAPサーバに登録しているJNDI名をクライアントコードに
ハードコードして呼び出しているんだけど、
>>269では「直接書くのは古いやり方なのでDDでマッピングしたものを使うべき」
のようなコメントがあったので、むりやりそうしてみたんですけど。
> あと、earのDD(application.xml)ではJNDIの設定なんて無いけど。
「リソース参照」とかいうところがJDBC Datasourceのそれなのかなぁ?って思ってました。
これから会社に行ってもう一度見直してみます・・・。
0276デフォルトの名無しさん
NGNGその仮の名前を実際のアプリケーションサーバーで定義されているJNDI名にマッピングさせるのがbinding。
bindingの方法はアプリケーションサーバーによって、異なる。
SUN J2EE RI なら sun-j2ee-ri.xml (だったっけ?)にその情報は書かれるし、
WebSphere なら ibm-ext-bnd.xmi に書かれる。
0277デフォルトの名無しさん ◆MSEEFfect2
NGNG「DD」の意味とか調べたいのですが、何を参考にされていますか。
よろしくだゴルァ
0278デフォルトの名無しさん
NGNG本当に必要なんでしょうか?
どういった時に必要、もしくは威力を発揮するのでしょうか?
0279デフォルトの名無しさん
NGNG無駄にコストがかさむような気がするな。。。必要以上に複雑になるような。
メンテ性に悪い気もする。
0280デフォルトの名無しさん
NGNG279さんが書くコードよりはメンテナンス性は良いし、拡張性も良いと思います。
0281デフォルトの名無しさん
NGNG分かってる人が適切なツール使ってれば。
不勉強な人がviとか秀丸で作業してるようならお勧めできないが。
0283デフォルトの名無しさん
NGNG単純にServlet+JSP+JDBCでやったほうが効率いい場合ってありますよね?
0285デフォルトの名無しさん
NGNGパフォ悪いってことでつか?
0286デフォルトの名無しさん
NGNGまさかとは思いますが、あなたは効率のみに注目しているのですか?
0287デフォルトの名無しさん
NGNGじゃ、OREILLYのEJB第3版はどうよ。
0288デフォルトの名無しさん
NGNG処理異常で RemoteException を返すのはよいとして、
obj の値の組み合わせによって作業を継続できないような場合、
何を返すのが妥当なんでしょう?
public Object[] getXxx(Object obj)
0289デフォルトの名無しさん
NGNG呼ぶ前に例外がでないように検証する。
or RemoteException派生クラスを送出。
or RemoteExceptionを送出。
or nullを返す。
0290デフォルトの名無しさん
NGNGRemoteException を EJB内からthrowしちゃだめ。
これ常識。
ユーザー例外 か EJBException をthrowしましょう。
0291デフォルトの名無しさん
NGNGRemoteException派生クラスなんてもってほか。
ユーザー例外は、RuntimeExceptionやRemoteExceptionから派生しちゃだめ。
0292288
NGNG教えていただいたことで検索してみました。
EJB から throw した EJBException をコンテナが RemoteException に置き換える(らしい)から
RemoteException を使うのはだめ。
EJBException は RemoteException に置き換えられる(らしい)から
特定の例外を返すには向いていない気がしました。
となると、java.lang.Exception を継承した ユーザ例外を作成するのが
よいんでしょうか。
0293デフォルトの名無しさん
NGNGはい。java.lang.Exception を継承したユーザ例外を作成してください。
0294デフォルトの名無しさん
NGNGただし、ユーザ例外の場合には自動的にはRollbackが掛からないから
気をつけてください。最終的にはEJBExceptionで包んだほうが良いかも。
0295デフォルトの名無しさん
NGNGユーザー例外をthrowする前に、EJBContext#setRollbackOnly() を呼ぶという
のもオススメです。
0296289
NGNGどもです。勉強になりますた。
0297288
NGNGコンテナ上で返す例外は、色々気をつけなければいけない事があるのですね。
勉強になりました。ありがとうございます。
0298デフォルトの名無しさん
NGNG結局、EJBが持つデフォルトのJNDI名をそのまま使って呼び出しても問題はないわけね?
というか、今作っているシステムはそのまま素のJNDI名前でlookupかけていて、
WARからEJB参照は一切記述していないんだけど。
そもそもそのJNDI名自体が普遍的で変わることなんてなさそうだから。
(そもそもわざわざ別名をつける必要があるほど名前がコロコロ変わるシチュエーションなんてあるの?)
それによってパフォーマンスが落ちるとかはないんでしょ?
0299デフォルトの名無しさん
NGNGやめとけ。
悪い癖とわかっていながら、なぜそれを続ける?
名前が変わるからとかそんな単純な理由だけではないぞ。
NamingContextがDistributedなApplication Serverの場合、対応できないぞ。
そもそもSpecで直接lookupするやり方は完全にDeprecatedとされている。
0300デフォルトの名無しさん
NGNGあなたの環境は知らないがだいたいやることは。
・クライアント用JDNINamingContextFactoryが入ったjarを入れる。(アプリケーションサーバについてるぞ)
・EJBのスタブを入れる。(インターフェースだけでも結構です)
・InitialContextのコンストラクタにJndiのパラメータを突っ込んでnewする。(アプリケーションサーバ依存)
あとはおんなじ。
PotableRemoteObject.narrow()でキャストすんのを忘れんなよ!
0301デフォルトの名無しさん
NGNGそんなに悪い癖では無いとおもうよ。
EJBのクラスタリングに対応出来る可能性が大きいしね。
0302274
NGNGありがとうございます。
InitialContextのコンストラクタに引数を与えるということをしていませんでした
どこかの本にInitialContextには引数を与えないほうがいいみたいなことが書いて
あったような気がして(勘違いかも)…
とりあえず300ゲトおめでとうございます
0303デフォルトの名無しさん
NGNG逆だろ?
対応できなくなる可能性があるぞ。
0304
NGNGEJBを極めるにはJNDIをEJBとは個別に勉強しなきゃならないの?
0305デフォルトの名無しさん
NGNGJ2EE専用の技術ってわけじゃないよ。
名前とリソースの関係を扱う一般的な技術。
一応チュートリアル貼っとく。
http://java.sun.com/products/jndi/tutorial/getStarted/index.html
0306デフォルトの名無しさん
NGNG詳しく説明してください
0307デフォルトの名無しさん
NGNG確かにコンテナ内でEJBがInitialContextを呼び出すときは、デフォルトコンストラクタを使うのが良いです。
まず問題ないし、ポータビリティが増すからね。
対してEJBクライアント単体ではどのコンテナにつなぐかわからないから、引数つきでも良いんだと解釈しています。
実際そうしないしないと、呼べないし(藁)。
0308デフォルトの名無しさん
NGNGクラスタ環境だと、deploy時に特別なJNDI名とbindingしなければいけないってことはよくあることだよ。
例をあげると、WebSphere V5の場合
cell/cluster/clustername/ejb/yourHome
のようにね。
アプリケーションサーバー依存のこういうことを、
コード中で意識したくはないでしょ。
0309デフォルトの名無しさん
NGNGWebSphere V5 以外には?
0310デフォルトの名無しさん
NGNGへー。
ちなみに Borland Enterprise Server だと、
・JNDI名直接
・java:comp/env/ejb/XXXX による環境変数
のどちらでも、勝手にクラスタリングやフェイルオーバーが掛かりますね。
特別なJNDI名にしなきゃいけないのは使えないですね。
0311デフォルトの名無しさん
NGNGBESってCORBAだと実績のあるVisiBrokerベースだし、
WASより使い勝手いいと思うんだけど、普及しないね。
やっぱ某の営業がヘタだからかな(藁
0312デフォルトの名無しさん
NGNG直すのがめんどくさいだけなんでしょ。
勝手にすればいいじゃん。
0314デフォルトの名無しさん
NGNGどこが?
0315288
NGNGint 値は基本データ型なので、クライアントに送信できますが、
String は参照型なので、セットする XxxException(String code) のような
コンストラクタでセットした値は null になってしまいました。
この String をクライアントに送信するにはどうすればよいのでしょうか?
0316デフォルトの名無しさん
NGNGどのようなユーザー例外を作成したのですか?
具体的に書きましょう。
0317288
NGNG以下のように実装されている Exception に対し XxxException(Throwable , int) でインスタンスを生成した時、
EJBを呼び出しているクライアントで getCode() をすると、設定した int 値を返すのですが、getCause() は null を返すのです。
EJB の中でこの Exception を catch した後に getCause() した時は Exception を取得できます。
public class XxxException extends Exception {
private Exception detail;
private int code = NULL;
public XxxException() {}
public XxxException(Exception e) {
this.detail = e;
}
public XxxException(Exception e, int code) {
this.detail = e;
this.code = code;
}
public int getCode() {
return code;
}
public Exception getCause() {
return detail;
}
}
0318288
NGNG0319デフォルトの名無しさん
NGNG> private int code = NULL;
NULLとはなんですか?
正確に書きましょう。
0320288
NGNGint型の定数の -1 です。
private static int NULL = -1;
0321デフォルトの名無しさん
NGNGBorland Enterprise Server 5.1 にて試しましたが、以下のようになりました。
うまく行っているようです。
---- EJB実装 --------
try {
... // lookupを意図的に失敗させる
} catch (Exception ex) {
throw new mypack.MyException(ex, 99);
}
---- EJBクライアント --------
try {
remote.foo(); // EJBを呼び出す
} catch (MyException ex) {
System.err.println(ex.getCause()); // javax.ejb.ObjectNotFoundExceptionと表示
}
0322288
NGNG結論からいうと、うまく動きました。
321さん。深く感謝します。
うまく動いていないと思ったのは、
EJB から返ってきた XxxException を JSP でデバック出力していたのですが
デバック出力するスタックトレースが失敗して発生していた例外と、
Servletで表示していた getCause() の例外を見誤っていた。
コーディングミスで throw new XxxException(e) したのを再 catch していたみたいで
思っていたエラーが表示されない→XxxException が動いていない、
と思ってしまったのが原因でした。
0323デフォルトの名無しさん
NGNG・EnterpriseBeanからRuntimeException/RemoteExceptionおよびそれを継承した例外をスローしてはならない。
・EJBExceptionはEJBコンテナによってRemoteExceptionに置き換えられる。
・基本はEJBExceptionをスローすることだが、EJBExceptionだけでは自由度が高くない為、Exceptionを継承したカスタム例外クラスを作るとよい。その場合、カスタム例外クラスはRemoteExceptionから派生してはならない。
以上を受けて…
・Homeインターフェイスについては、CreateExceptionとRemoteExceptionをスローする。
・Remoteインターフェイスについては、RemoteExceptionまたはカスタム例外をスローする。
・EnterpriseBeanについては、EJBExceptionまたはカスタム例外をスローする。
・但しコンテナがコールバックするメソッド(ejbXXXX)はRemoteExceptionをスローする。(ejbCreateのみCreateExceptionとEJBExceptionをスローする)
・EnterpriseBeanからカスタム例外をスローする場合(つまりEJBExceptionをスローしない場合)は、rollback処理を自己責任で実装する。(EJBContext#setRollbackOnlyを呼ぶ等)
こんな認識で合ってます?
0324JNDIワケワカラン
NGNG(使っているのはWebSphereだが、まずJ2EE RIから確認してみようと思っている)
で、まずEARのsun-j2ee-ri.xmlに以下を記述。
<enterprise-beans>
<ejb>
<ejb-name>HogeHogeBean</ejb-name>
<jndi-name>sample/HogeHoge</jndi-name>
:
</ejb>
</enterprise-beans>
これでHogeHogeBeanがsample/HogeHogeという名前でJNDIに登録されるようになる(はず)。
次にWARのweb.xmlに以下を記述。
<ejb-ref>
<ejb-ref-name>ejb/HogeHoge</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>test.sample.HogeHogeHome</home>
<remote>test.sample.HogeHoge</remote>
</ejb-ref>
これでWAR内のプログラムからejb/HogeHogeという名前で呼び出せるようになる(はず)。
0325JNDIワケワカラン
NGNG最後にEARのsun-j2ee-ri.xmlに以下を記述。
<web>
<ejb-ref>
<ejb-ref-name>ejb/HogeHoge</ejb-ref-name>
<jndi-name>sample/HogeHoge</jndi-name>
</ejb-ref>
</web>
これでWAR内のプログラムからejb/HogeHogeをlookupすればsample/HogeHogeにバインディングされて登録されているEJBが呼び出せる(はず)。
なのに実行するとjavax.naming.NameNotFoundExceptionがでてしまう。
なんか設定間違ってる?
JNDI関係はマニュアルが少ないからよく分からん。
0326デフォルトの名無しさん
NGNGejb/HogeHogeというのはweb.xmlとsun-j2ee-ri.xmlを結びつけるためのもので、
lookupすべきはsample/HogeHogeかと。
>323
た、多分それで…
0327デフォルトの名無しさん
NGNG>・Homeインターフェイスについては、CreateExceptionとRemoteExceptionをスローする。
CreateExceptionとRemoteException だけとは限らないですよね?
>・Remoteインターフェイスについては、RemoteExceptionまたはカスタム例外をスローする。
RemoteExceptionまたはカスタム例外 だけとは限らないですよね?
>・EnterpriseBeanについては、EJBExceptionまたはカスタム例外をスローする。
EJBExceptionまたはカスタム例外 だけとは限らないですよね?
>・但しコンテナがコールバックするメソッド(ejbXXXX)はRemoteExceptionをスローする。
RemoteException だけとは限らないですよね?
0328デフォルトの名無しさん
NGNG可能かどうか?ではなく、それが推奨されているかどうか、EJB作法として一般的かどうか?
について考察しているから、「〜だけに限らない」のであれば、その「限らない」ものが何か?
そしてそれがどのくらい一般的で意味のあるものかどうかを書かなければ相手にされませんぞ。
0329デフォルトの名無しさん
NGNG「限らない」=「いくらでもある」ということでは?
0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNG>ejb/HogeHogeというのはweb.xmlとsun-j2ee-ri.xmlを結びつけるためのもので、
>lookupすべきはsample/HogeHogeかと。
話の流れとはあまり関係ないが、lookupする名前はejb/xxxxxxにして、実際に登録する名前をsample/xxxxxxにするのが良いと聞いたことがある。
PetStoreもJNDI名はestore/xxxxxxにしてlookupはejb/estore/xxxxxxみたいな感じだったよね?
勘違いならスマソ
0332デフォルトの名無しさん
NGNGStateless Session Beanで、リクエストの実行数を制御することは可能?
具体的には、1つ1つのStateless Session Beanに対して、
・デフォルトで実体化されていてリクエストを待ち受けているインスタンス数を設定する
・大量リクエスト要求による負荷アクセス時に、最大同時リクエスト処理数(=インスタンス数)の
上限を設定しておき、残りのリクエストについてはキューイングする
といったことが行いたいのだけど、こういうのってEJBコンテナの設定で可能なのかなぁ?
0333デフォルトの名無しさん
NGNGStateless Session Beanって、最大リクエスト数=インスタンス数には
ならないのではないでしょうか。
たいていはスレッド数の上限を設けることで制限すると思うけど、
個々のBean毎にそれが設定できるアプリケーションサーバは
あんまり見たことないような。私が知っているものは限られているので
あるのかもしれませんが。
っていうか、そういうことってマニュアルに書いてないですか?
0334デフォルトの名無しさん
NGNGできるよ。
InfoCenterみてみなよ。
0335age
NGNGよくショッピングカートを例にして「カートはStateful Session Beanにしましょう」なんていってるサンプルあるけどさ。
そんなのすべてStatelessにしてデータを取得したら全てVOにしてServlet側のSessionに格納したほうがはるかに便利じゃない?
0336デフォルトの名無しさん
NGNGWebApplication作るときにもHttpSession使わず、Statelessな仕組み
のみで行くの?
■ このスレッドは過去ログ倉庫に格納されています