@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

WebLogic8.1JでStrutsのApplication.propertiesが読み込めません

投稿者投稿内容
bbholic
常連さん
会議室デビュー日: 2004/02/17
投稿数: 21
投稿日時: 2004-02-17 18:40
初めて投稿いたします。

WebLogic8.1JにStrutsをのせたWebアプリを開発中ですが、
EJB.jarとWEBAPP.warをEAR.earに固めて/mydomain/applicationsに配置
したところJSPからstruts-configの<message-resources>に設定した
Application.propertiesが読みこめずに落ちてしまいます。
中身を見てみたところWARファイルはextract配下のjarfilesの
_wl_cls_gen.jarに生成されているようですが、それを解凍しても
やはりその中にpropertiesファイルはありませんでした。

_wl_cls_gen.jarにpropertiesファイルを含む方法、もしくは
その他いい方法をご存知の方、ご指摘よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-02-17 22:20
同様の現象に遭遇したことはないのですが、
Application.properties はどこに配置していますか?普通に WEB-INF/classes 以下に置いておけば問題なく読み込めると思いますが。

また、Struts のサンプルアプリケーションをデプロイした場合はどうでしょう?
普通に動きますよね・・・?

あと、サポートに問い合わせれば何か事例を教えてくれるかもしれませんね。

[ メッセージ編集済み 編集者: インギ 編集日時 2004-02-17 22:20 ]
bbholic
常連さん
会議室デビュー日: 2004/02/17
投稿数: 21
投稿日時: 2004-02-17 23:52
返信ありがとうございます。

確かに/WEB-INF/classesの配下に配置してあります。
ちなみにEARファイルが展開されたあとのWARファイルを解凍してもその中にありました。
しかしその後生成される_wl_cls_gen.jarには含まれていません。
そこで_wl_cls_gen.jarにApplication.propertiesを含めて作り直したものを
置いてもJSPで読み込めませんでした。
WARファイル単独でデプロイした場合は動くのですがEJBを含めたEARにすると
うまくいきません。
う〜〜ん どうしたもんだか・・・
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-02-18 00:26
>そこで_wl_cls_gen.jarにApplication.propertiesを含めて作り直したものを
>置いてもJSPで読み込めませんでした。
そんなこったことをする必要はないはずですので、切り分けをしましょう。
まず、Struts のサンプルアプリケーションは動きますか?
動いたら、それを EAR にまとめても動きますか?
さらにそれが動いたら、今のアプリケーションの違いはなんでしょう?

あと、関係ないとは思いますが、最新版の WLS8.1SP2 を使いましょうね。


[ メッセージ編集済み 編集者: インギ 編集日時 2004-02-18 00:35 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-02-18 00:46
私の環境で Struts のサンプル struts-example.war を ear にまとめてデプロイしてみましたが、うまく動きました。WLS 8.1 SP1 / SP2 共に問題なかったです。
-> WebLogic Builder を使うと簡単に ear 化できます

ご指摘の _wl_cls_gen.jar というファイルにはたしかに *.properties ファイルはありませんが問題なく動いています。

「Application.propertiesが読みこめずに落ちてしまいます。」とのことですが、どんな例外がでているのでしょうか?

[ メッセージ編集済み 編集者: インギ 編集日時 2004-02-18 00:46 ]
bbholic
常連さん
会議室デビュー日: 2004/02/17
投稿数: 21
投稿日時: 2004-02-18 10:24
インギさんありがとうございます。

確かにstruts-example.war を ear化したものは動きました。
ぱっと見た目私の作っているものと同じような構成になっていると思うのですが・・
ちなみにエラーは

javax.servlet.jsp.JspException: Missing message for key "title"
at org.apache.struts.taglib.bean.MessageTag.doStartTag(MessageTag.java:297)
at jsp_servlet.__login._jspService(__login.java:219)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
とこんな感じです。

もちょこっとtryしてみます。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-02-18 10:40
なるほど、すると
・"title"という名前の値がリソースファイルに存在するか
・リソースファイルの指定はパッケージ、大文字小文字共に正しいか
といった点でしょうか?
#といっても既に確認してますよね・・?

あ、もしかしてEAR にしたらうごかなくなるとのことなので、EJB jar ファイルや APP-INF/ 以下に同名のリソースファイルが存在するということはないでしょうか?
クラスローダの構造上、デフォルトでは重複している場合は APP-INF/lib,classes 以下や EJB jar 内のリソースが優先して読み込まれます。
・[WebLogic Server J2EE アプリケーション クラスローディング]
http://edocs.beasys.co.jp/e-docs/wls/docs81/programming/classloading.html

この場合は以下のいずれかの方法で回避できます。
1)weblogic.xml にて prefer-web-inf-classes を true に設定する
WEB-INF/classes,lib 以下のリソースを APP-INF/classes,lib や EJB jar 内のリソースに優先して読み込むようになります。
具体的には以下のように記述します。
コード:
<weblogic-web-app>

<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>


・[weblogic.xml デプロイメント記述子の要素]-[container-descriptor]
http://edocs.beasys.co.jp/e-docs/wls/docs81/webapp/weblogic_xml.html#1038823

2)重複しているリソースファイルをとりのぞく
もちろん必要に応じて配置しているとおもうので、単純に取り除くことはできないと思いますが。

3)重複しているリソースファイルのパッケージまたは名前を変える

4)APP-INF/ 以下に必要なリソースをマージしたファイルを一つだけ配置する
Ant の concat タスクなんか使うといいかもしれません。

このテの質問でも、BEA のサポートに問い合わせれば切り分けを手伝ってくれますよ。一度問い合わせてみることをお勧めします。


[ メッセージ編集済み 編集者: インギ 編集日時 2004-02-18 10:52 ]
bbholic
常連さん
会議室デビュー日: 2004/02/17
投稿数: 21
投稿日時: 2004-02-18 13:03
ご丁寧にありがとうございます。

ひとつになることがあったのですが、私の作成したモジュールをデプロイしたときに
log4j:WARN No appenders could be found for logger (org.apache.struts.util.PropertyMessageResources).
log4j:WARN Please initialize the log4j system properly.
とこんなメッセージが出ます。
しかしサンプルをデプロイした時には
2004/02/18 13:00:15 org.apache.struts.util.PropertyMessageResources <init>
情報: Initializing, config='org.apache.struts.util.LocalStrings', returnNull=true
となります。

ちなみにログはlog4jを使用していて普通に出力されます。
ひょっとしてStrutsでログ用の設定がなにかあってそのために
PropertyMessageResourcesが初期化されずプロパティも
読み込めないのでしょうか。

ここら辺でなにかご存知でしょうか?

アイティメディアの提供サービス

ホワイトペーパー(TechTargetジャパン/閲覧には会員登録が必要です)

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