バックエンドサーバーからバイト配列を取得するアプレットがあります。このバイト配列にはダイナミックライブラリ(アプレットが実行されているOSに応じてDLLまたはSO)が含まれており、ディスクに書き込んだ後、System.load()を呼び出してディスクからロードする必要があります。
ファイルがディスクに書き込まれた後、System.load()の呼び出しを通じてOSによってロードされる前に、ファイルが改ざんされていないことを確認する必要があります。ファイルがディスクに書き込まれているときにファイルの排他ロックを取得しますが、テストでは、System.load()を呼び出す前にこのロックを解除する必要があることが示されています。そうしないと、ライブラリの読み込みに失敗します。
ファイルをロードしている間、ファイルのロックを維持する方法はありますか?
サンプルコード:
File f = File.createTempFile("tmp", "");
RandomAccessFile raf = new RandomAccessFile(f, "rwd");
FileChannel channel = raf.getChannel();
FileLock lock = channel.lock(0, Long.MAX_VALUE, false);
// This would be where I write the DLL/SO from a byte array...
raf.write((int)65); // 'A'
raf.write((int)66); // 'B'
raf.write((int)67); // 'C'
System.out.println("Wrote dynamic library to file...");
// Close and release lock
raf.close();
System.out.println("File closed. Lock released.");
// This call fails if the file is still locked.
System.load(f.getAbsolutePath());
どんな助けでも大歓迎です。ソリューション(存在する場合)は、OSにネイティブである必要はありませんが、Javaでサポートされているすべてのプラットフォームで機能します。また、ソリューションがJava1.4と互換性があることも要件です。