あなたはEJBの中のファイルシステムへのアクセスからを禁止している理由は、あなたのアプリケーションは、(JavaのEE)内で実行する方法を制御することはできませんということですコンテナ。たとえば、アプリケーションがサーバーのクラスター全体で実行されている場合、あるサーバー上のディレクトリーにオブジェクトを保存することはほとんど役に立たない可能性があります。 (もちろん、ネットワークファイルシステムを使用している可能性がありますので、制限が適用されない場合があります)。
1つのオプションは、使用あなたコンテナが付属していますJNDI実装であることができます。あなたはおそらく、あなたが常にオブジェクトの直列化形式を下に救うことができるので、いくつかのJNDIの場所で生byte[]
配列を保存することができます:
ByteArrayOutputStream baos= new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(myObj);
//Now save into JNDI
new InitialContext().bind("path/to/myobject", baos.toByteArray());
これは、後に見上げると、あなたのオブジェクトに再変換することができます。
byte[] bs = (byte[]) new InitialContext().lookup("path/to/myobject");
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bs));
MyObj myObj = (MyObj) ois.readObject();
代わりにあなたがJNDIにそれを保存するXML文字列として、あなたのインスタンスをエンコードするためにjava.beans
永続XML(すなわちXMLDecoder
、XMLEncoder
)を使用することができます。
データベースにBLOBを持つ必要はありません。 SQL Server 2008では、ファイルをデータベースサーバーのフォルダにダンプしますが、データベースを介して公開します。 http://blogs.msdn.com/rdoherty/archive/2007/10/12/getting-traction-with-sql-server-2008-filestream.aspx – pjp