- PR -

JSF、managed-bean-scopeの設定がJBossで反映されない

1
投稿者投稿内容
つちつち
会議室デビュー日: 2004/10/21
投稿数: 17
投稿日時: 2005-07-13 12:20
皆さま、よろしくお願いします。
現在、JSF+EJBを使用したJ2EEアプリを作成しております。

その中で、マネージドビーンのスコープ設定がJBoss4.0.2サーバー上で反映されず困っています。
(日立のCosminexusサーバー上ではうまく動作するのですが。。。)
皆さまのアドバイスが頂けたらと思います。

内容
データベースより部署の一覧を取得し、ドロップダウンに設定しております。
スコープ設定を「none」にしてあるのですが、データベースの値を変更しても
一度表示されたドロップダウンの値がリアルタイムに反映されません。
一応、セッションが切れるもしくはサーバー再起動で反映されます。

(JSFのソース)
---------------------------------------------------
<h:selectOneMenu value="#{DeptData.dept_cd}">
<f:selectItems value="#{DeptItems}" />
</h:selectOneMenu>
---------------------------------------------------

(マネージドビーンのソース)
---------------------------------------------------
public class DeptItems extends ArrayList {
public AllDeptSelectItemList() {
try {
Context initial = new InitialContext();
Object objref = initial.lookup("java:comp/env/ejb/Display");

DisplayHome home =
(DisplayHome) PortableRemoteObject.narrow(objref, DisplayHome.class);
Display disp = home.create();
Collection c = disp.allDepts();
for (Iterator i = c.iterator(); i.hasNext() {
DeptDTO p = (DeptDTO) i.next();

SelectItem item = new SelectItem();
item.setValue(p.getDept_cd());
item.setLabel(p.getDept_name());
add(item);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
---------------------------------------------------

(faces-config.xmlの設定内容)
---------------------------------------------------
<managed-bean-name>DeptItems</managed-bean-name>
<managed-bean-class>sample.DeptItems</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
---------------------------------------------------

ということで、faces-config.xmlにてスコープを「none」にしているにもかかわらず
JSFのドロップダウンがリアルタイムにデータベースと連携して表示されません。
何度もいいますが、日立のCosminexusサーバーにデプロイするとうまく動くのですが、
JBossサーバー上ではうまく動きません。

皆さまのご協力をお願いいたします。

環境
 JBoss 4.0.2
 JSF 1.1.01
 JDK 1.4.2_05
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2005-07-14 09:58
よく知らないので恐縮ですが,CosminexusやJBossは独自のJSF実装を提供しているのでしょうか?
もしSunの参照実装をそのまま提供していて,かつ動作が異なるとしたら,EJB側の違いですね.

仮に本当にスコープ設定の問題であれば,DeptItemsそのものをArrayListにするのではなくて,DeptItemsのプロパティとしてArrayListを毎回作成して返せばよいのではないでしょうか? 例えば:
public class DeptItems {
public ArrayList getList() { ... }
}

<f:selectItems value="#{deptItems.list}"/>
つちつち
会議室デビュー日: 2004/10/21
投稿数: 17
投稿日時: 2005-07-16 17:15
よしだひろゆき さま
ご回答ありがとうございました。

アドバイスいただいた方法で動かしてみます。
結果はまたご連絡いたします。
つちつち
会議室デビュー日: 2004/10/21
投稿数: 17
投稿日時: 2005-07-23 10:47
みなさま、こんにちは

CosminexusやJBossのJSFの実装についてですが、JSFは両方ともSun提供のライブラリを使用しており、共通の動きをするはず・・・ということで、EJBを使用しないかたちで確認してみました。

・現在の構成
 JSP(JSF)→マネージドビーン→EJB(session)→EJB(entity)→データベース

 状況: JSFのスコープがJBossで反映されず???


・JSFの動作確認構成
 JSP(JSF)→マネージドビーン

 状況: JSFのスコープがJBossで反映されました!


ということで、JSFのmanaged-bean-scopeの設定はJBossでもちゃんと動くことが確認できました。

これからはEJBの動作および設定に焦点を絞って調べて行きたいと思います。
EJBコンテナ側でスコープ設定もしくはキャッシュのような働きをする設定等があるのでしょうか?
CosmiのEJBコンテナではJSFのスコープ設定「none」でリアルタイムにデータベースの値を取得できるのですが、同様の構成でJBossではリアルタイムとならないのでそう感じました。
JBossサーバーを再起動するか、一定時間(数分)経過(内部でタイムアウトが発生しているらしく)するとデータベースの値を取りに行ってくれます。

EJBに関してはまだまだ勉強中なので知識が少なく申し訳ありません。
ご協力よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-07-25 17:49
Entity BeanはCMPでしょうか。でしたらキャッシュを使用する設定になっていないでしょうか。
キャッシュを使う設定になっている場合、更新をCMPを使って行っていれば反映されるでしょうが、
直接RDB側で更新した場合は反映されないと思います。
1

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