2011-02-04 28 views
11

アプリケーションをJBoss 4からJBoss 6にアップグレードします。JBoss vfs:/ URLを開くことができないのはなぜですか?

私たちのアプリケーションのいくつかは、異常な方法でクライアントに配信されます。アプリケーション内でjarファイルが検索され、サーブレットでは、特定のサポート機能を実行するためにクライアントがそれらを抽出します。

JBoss 4では、これらのjarファイルをclassloaderで検索し、jar:// URLを見つけてjarファイルを読み込んでその内容をクライアントに送信します。

JBoss 6では、ルックアップを実行するときにvfs:/ URLを取得します。私はこれがorg.jboss.vfsパッケージにあることを理解しています。残念ながら、このURLでopenStream()を呼び出してストリームから読み込むと、すぐにEOFが返されます(read()は-1を返します)。

何がありますか?このURLが参照するリソースを読めないのはなぜですか?

JBoss VFS APIを介してファイルを開くために、基礎となるVFSパッケージにアクセスしようとしましたが、ほとんどのAPIがプライベートであるように見えます.VFSから変換するルーチンが見つかりませんでした: VFS VirtualFileオブジェクトへのURLなので、どこにも行けませんでした。

私はJBoss内でディスク上のファイルを見つけようとしていますが、その方法はアップグレード時に非常に失敗する可能性が非常に高いと思います。

以前の手法では、Java Web Startを使用してjarをクライアントに配布し、Java Web Startのキャッシュ内でそれらを検索して抽出していました。しかし、それはキャッシュのレイアウトが変更されたため、Javaのすべてのマイナーアップグレードに敗れました。

+0

org.apache.commons.vfs。*;この輸入はこの点でも役立ちます。 –

+0

JBoss VFSとApache VFSの名前は同じですが、製品が異なると申し訳ありません。 Apache VFSクラスを使用することは、JBoss VFSの問題にはあまり役立ちません。また、Apache VFSのドキュメントを使用することはあまり役に立ちません。そしてJBossはVFSをうまく文書化していないので、あなたが見つけるドキュメントのほとんどはApacheのためのものです。 – skiphoppy

答えて

4

私は、おそらく私が使用できるVirtualFileをgetContent()メソッドが提供することを発見しました。それでもvfs:/ URLでopenStream()を実行できない理由については説明していません。

import org.jboss.vfs.*; 

URLConnection conn = new URL("vfs:/...").openConnection(); 
VirtualFile vf = (VirtualFile)conn.getContent(); 
InputStream is = vf.openStream(); 
10

以前の回答では、まだ読み込めないストリームが生成されます。

私は、VirtualFileが参照する物理的なファイルを取得できますが、返される結果は、実際のファイルが格納されているディレクトリ内のcontents /という名前のディレクトリを参照しています。だから:

import org.jboss.vfs.*; 

    String filename = ...; 
    URLConnection conn = new URL("vfs:/...").openConnection(); 
    VirtualFile vf = (VirtualFile)conn.getContent(); 
    File contentsFile = vf.getPhysicalFile(); 
    File dir = contentsFile.getParentFile(); 
    File physicalFile = new File(dir, filename); 
    InputStream is = new FileInputStream(physicalFile); 

どのような混乱。私はまだ私のオリジナルの質問を理解していないので、JBossが私に読めないURLを渡すのはなぜですか?しかし、少なくとも私は今のところ進むことができます。

関連する問題