2009-11-24 5 views

答えて

16

を見て最善のページには、このいずれかになります。http://www.oracle.com/technetwork/java/restrictions-142267.html

それは詳細でJava EEプログラミングモデルを超える制限をカバーしています。

は別に、セキュリティ、移植性、クラスタリング、スレッド上でmentionned点からも、(ファイルシステムがトランザクションではありません)トランザクションとエラーハンドリングを検討してください。

ありJVMで何が起こって何の黒魔術は、しかし、ではない、あなたは、(限り、あなたは、対応する権限を持っているとして)ファイルを作成する静的変数を使用して、あなたは何をやっている知っている場合、スレッドを作成することができます。これらの制限に準拠しているのためにJCAコネクターをジャンプして書くことよりも、通常は提案されている理由をより良い

は理解するのに時間がかかります。

+4

には「黒魔術」、コンテナのJVMのセキュリティマネージャがそのファイルの作成がリンクが壊れている –

+2

ことはできませんように設定されている可能性は存在しないかもしれないが、愚かなのOracleの人々はこのリンクはと非常によく似ていますBorisŠuš[email protected] Javaの –

+1

を殺しますオリジナル:http://www.oracle.com/technetwork/java/restrictions-142267.html – ewernli

31

Java EEコンテナにはすべてを実行する必要があります。ファイルシステムに一貫性のあるアクセスがあることは確実ではありません。これには多くの理由から、最も明白にはコンテナ内で実行中のアプリケーションを持っているだろうということではありません。

  • EJBの後続の呼び出しは、でも同じにアクセスして、同じ物理サーバー上だろうという確信がファイル(クラスタリング時に例えば)/ファイルシステム
  • 互いに干渉する可能性のない(複数のアプリケーションが同じファイルに書き込もうと)
  • なしセキュリティ上の問題(1つのアプリが別のアプリが読むことができる機密データを書き込む)

また、あなたはいけないことを想定する必要があります(コンテナがあなたのためにこれを管理します独自のスレッドを作成

  • 。あなたが独自に作成する場合は、CPU時間のコンテナ内の他のアプリケーションを飢えさせること)
  • 利用ソケット-IOは(もすることができます分散システムで、あなたはファイルシステムへのアクセス権を持っている場合でも、セキュリティ上の問題)
5

を持っています次にメソッドが呼び出されたときに、そのメソッドがファイルが書き込まれた同じマシンで処理されることを確認してください。

1

Java EE仕様では、ファイルを書き込むためのAPIが提供されていないためです。もちろん、通常のJava IO APIを使用してファイルを作成することはできますが、このコードがスレッドセーフであること、誰かがファイルをクリーンアップすること、ファイル名が次のBeanに渡されること、ファイルがあなたのBeanがクラスタ内の別のノードに移動されたときにマイグレーションされます。

実際には実行できますが、実際にはJava EEのファイルを扱うのが難しくなります。

+0

ナンセンス - J2EEの仕様では、このような場で画像の生成など、多くのことのために、独自のAPIを提供していません。 –

+0

あなたのポイントは?イメージ生成APIがJ2EEと互換性がある場合は、すべて正常です。それがローカルファイルを作成していないときは、困ったことになります。 IO APIはJ2EEに準拠していないという事実です。 –

3

インスタンスがクラスタ化されていない場合や、すべてのインスタンスでネットワークドライブを使用できることが保証されている場合、ファイルapisを使用してファイルを読み書きすることは実際問題ではありません。ただし、適切な方法でパスを正しく取得し、クリーンアップするように注意する必要があります。多くの場合、実際にファイルを書き込む必要はありませんので、もう一度考えてみてください。ほとんどの人が主な理由は、クラスター内の異なるサーバーが同じファイルを参照していないということです。結局のところ、多くの小さなアプリケーションはこのようなクラスタでは動かない...

4

Java EE仕様では、EJBは「リソースマネージャ」(JDBC、JNDIなど)以外の方法で外部リソースにアクセスすることを厳しく禁じられています。 JCAなど)、これには特に、java.ioパッケージのクラスによるローカルファイルシステムへのアクセスが含まれます。さらに、アプリケーションのクラスパスからプロパティファイルをロードするなど、そのようなアクセスにはClassLoaderも使用できません。このため

理由は、すでに他の回答に与えられている:

  • セキュリティ上の問題
  • ポータビリティが
  • クラスタリングが
  • スレッドが最終的に

、のための最適なリソース発行発行発行しますこれらの事項はデータベースです。

3

あなたは、エンタープライズ情報システム(EIS)としてファイルシステムを検討すべきです。次に、データベースにアクセスするJDBCアダプタと同様に、このEISにアクセスするResourceAdapterを作成できます。仕様はここにあります:http://java.sun.com/j2ee/connector/download.html。つまり、ファイルへのアクセスは可能ですが、はるかに複雑です。この仕様では、Workと呼ばれる何らかの「スレッド」を作成することさえできます。

1

従来の非j2eeシステムと相互運用するために、ソケットI/O、ファイルへの書き込みなどの「悪いこと」を行う必要があることがあります。j2ee仕様は、厳密にはそれに従っていますが、便宜を図り、仕事を終わらせるために、人々はいつもj2ee以外のものから離れています。これらのものを安全かつ慎重に取り除く方法があります。

関連する問題