- PR -

EJB上から外部ファイルへ書き込み

1
投稿者投稿内容
zet
会議室デビュー日: 2004/11/16
投稿数: 3
投稿日時: 2004-11-16 11:58
お世話になります。zetです。

サーブレットでは ServletContext#getRealPath()でwebappの絶対パスが取得できますが、EJB(sessionbean)ではどのようにして取得するのでしょうか?
J2EEサーバとしてはJBOSSを使用しております。
sessionBean上で作成したデータを外部ファイルへ書き出したいのですが、
できれば絶対パス指定でなく相対で書き出したいと思っています。
と言うのがその書き出したファイルをWEBAPPでブラウズしたいと思っているからです。
何かよい手をご存知の方ご教授お願いします。

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-11-16 12:05
EJBからローカルファイルシステムへのアクセスは禁止されています。
やってできないことはありませんが、デプロイするEJBの位置が限定されてしまいますし、互換性が損なわれる可能性がありますのでおすすめいたしません。
よってデプロイされている EJB jar や EAR のパスを取得するような API は用意されていません。
彷徨える開発者
常連さん
会議室デビュー日: 2004/07/15
投稿数: 31
投稿日時: 2004-11-16 13:11
引用:

zetさんの書き込み (2004-11-16 11:58) より:
お世話になります。zetです。

サーブレットでは ServletContext#getRealPath()でwebappの絶対パスが取得できますが、EJB(sessionbean)ではどのようにして取得するのでしょうか?
J2EEサーバとしてはJBOSSを使用しております。
sessionBean上で作成したデータを外部ファイルへ書き出したいのですが、
できれば絶対パス指定でなく相対で書き出したいと思っています。
と言うのがその書き出したファイルをWEBAPPでブラウズしたいと思っているからです。
何かよい手をご存知の方ご教授お願いします。





同じ様な問題に直面したことがあります。
JavaからPDFに帳票印刷するライブラリにSVFを使っているのですが、SVFの場合帳票デザインを定義しているファイル(*.frm)があります。これをEJBの中から絶対パス指定で開かなければならないのです。(そういうAPIだから)

デプロイをjar、class、JSP、その他とディレクトリにバラバラに配置している場合はzetさんのおっしゃるとおりServletContext#getRealPath()で取得できるのですが、earのひとつのアーカイブにまとめてデプロイした時に取得できなくて困ってしまいました。

結局、自分の場合はシステム持っている設定ファイルの中にその絶対パスを書いて、EJBの中からそれを参照するようにしました。EJBならEJBの環境変数も使えると思います
zet
会議室デビュー日: 2004/11/16
投稿数: 3
投稿日時: 2004-11-16 17:52
インギさん、彷徨える開発者さん、ご返答ありがとうございました。
通りで探しても探しても出てこなかったわけですね...。仕様をもっと読みます...。

彷徨える開発者さんの言われるとおり共通で使えるプロパティーファイルを作成して対応いたしました。
ありがとうございました。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-11-16 22:01
仕様で禁止されているのはセキュリティ上の懸念などが挙げられておりますのでやって動かないことはないですね。
現実的な妥協点としてはすでに挙げられている方法でよいと思います。
ただし、EJBの性質からして必ずしも毎回同じサーバ/JVMでメソッドが実行されるとは限りません。またJVMのポリシーでファイルI/O自体禁止されている可能性もあります。
ポータビリティの保障されない実装方法ですので特にクラスタ化した場合などご留意ください。

行儀の良い実装方法としてはファイルにアクセスする箇所を JCA のアダプタとして実装することになります。
1

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