- PR -

EJBにおけるjava.io禁止について

1
投稿者投稿内容
amuro
会議室デビュー日: 2002/12/13
投稿数: 5
投稿日時: 2003-05-20 11:41
こんにちは。

以前から一つ気になっていたことがあります。
EJBの規約(以下はポータブルコンポーネント規約第2版です)で、
「EJB仕様では、エンタプライズBeanのjava.ioパッケージを用いたファイル・ディレクトリアクセスを禁止している。設定ファイルの読み込みや実行ログファイルの書き出しなどを行う場合には、外部クラスに隠蔽することを推奨する。」
というjava.ioパッケージの使用禁止があると思います。

これが意味するところはEJBのBean内の処理においてjava.ioパッケージを使用するなということであってBeanの処理スコープ内で使うなということではないですよね?
つまりは、Beanから呼び出す通常のクラスにおいてはjava.ioパッケージを使用しても良いと考えていますが、問題はないでしょうか。

どなたか詳細をご存知でしたら教えてください。


[ メッセージ編集済み 編集者: amuro 編集日時 2003-05-20 11:45 ]
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-05-20 12:15
こんにちわ。

わたしも詳しく知っているわけではないのですが、
私は単純にファイルIO関連はマズイという意識のみでした。

なので、「やらない」よう心がけています。

>設定ファイルの読み込みや実行ログファイルの書き出しなどを行う場合には、
>外部クラスに隠蔽することを推奨する。」


この部分については 知りませんでした。

しかし、私が意識しているjava.ioを使用しない理由は以下の一点です。
・EJBのポータビリティ性が低下する。

したがって、外部クラスを使おうが、EJB自身の中で使おうが
環境依存部を作ってしまっては他の環境でもダメですよね。

要はそこらへんを隠蔽し、他環境でも一切の修正なしで
動くような外部クラス経由の仕組みを考えればOKってことでしょうか。

理想的ですが難しそうですね。

情報提供ではなくてすいません。

ではでは。
amuro
会議室デビュー日: 2002/12/13
投稿数: 5
投稿日時: 2003-05-21 09:53
こんにちわ。

引用:

しかし、私が意識しているjava.ioを使用しない理由は以下の一点です。
・EJBのポータビリティ性が低下する。

したがって、外部クラスを使おうが、EJB自身の中で使おうが
環境依存部を作ってしまっては他の環境でもダメですよね。

要はそこらへんを隠蔽し、他環境でも一切の修正なしで
動くような外部クラス経由の仕組みを考えればOKってことでしょうか。



バックエンド専用のフレームワークにのっけるモジュールを作成しなければ
ならなかったのですが、それがEJB側(ビジネス層)の拡張しか許してないので
どうしてもEJBの処理スコープ内でjava.ioを使用しなければならなかったのです。
java.ioを使うというのは既存システムから転送されたファイルを読み込む必要が
あったからです。

EJBの処理スコープ内でのjava.ioの真相は未だわからないのですが
少なくともポータビリティは失わないような設計にはしようと思います。

アドバイスありがとうございました。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2003-05-22 12:21
EJBの仕組みからして、ファイルを書き込んだときの EJB のインスタンスとファイルを
読み込むときのインスタンスが同じ JVM 、または同じサーバ上にあるとは限りませんよね?
なので、EJBから直接呼びだすライブラリにもこのルールは同様に考える必要があるかと思います。

ポータビリティ/J2EE準拠を考えるならば、少々面倒ですが JCA に準拠したリソースアダプタでライブラリをラップするのが正解ではないかと思います。

そもそもポータブルコンポーネント規約で「使用しないことを推奨」という表現が不思議
ですが、EJB2.0の仕様で明示的に禁止されておりますので、それに依存した不具合が生じ
ても EJB コンテナベンダのサポートを受けるのはむずかしいかもしれません。

その点をふまえて敢えてトライするならば、もちろんファイルの出力先をハードコードすることはせず、環境エントリにファイルの出力先を指定して、デプロイする際には共有ディスクを指定するようにするのが良いですね。

・Enterprise JavaBeansTM Specification,Version 2.0
24.1.2 Programming restrictions より引用
An enterprise bean must not use the java.io package to attempt to access files and directories in the file system.
The file system APIs are not well-suited for business components to access data. Business components should use a resource manager API, such as JDBC, to store data.

[ メッセージ編集済み 編集者: インギ 編集日時 2003-05-23 15:25 ]
1

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