2012-05-08 10 views
2

私の質問は2倍です。まず、問題を説明し、次に、クラスローダーを実装することを前提とし、Webアプリケーションでこれを行う方法について説明します。Webアプリケーションリソースの読み込みをリダイレクトするためにClassLoaderを拡張する必要がありますか?

私の問題はこれです:私たちの会社は、他社のフレームワークを使用しています。 XMLファイルを使用してWebページを生成し、これらのXMLファイルは別のライブラリ(jarファイル)内にあります。これらのライブラリは頻繁に(毎週?)生成されるため、ダイナミックなものではありませんでしたが、フィールドの数、収集する情報のタイプ(日時、コンボボックスなど)などが決定されます。

これらのフィールドを動的に動かすことができるかどうかという疑問が私の会社によって提案されました(動的には、ページを更新してレイアウトの変更の効果を見るのが理想です)。

  1. ツールを作成します。私はそれが私は2つの可能性を持っていることを意味し、いくつかの予備試験を行なったし、これらのXMLファイルは、瓶に位置しているので、XMLを変更すると、しかし、ウェブページ上の所望の効果が得られないことを発見しました私のウェブアプリケーションの範囲外でjarを変更しますが、明らかに動的ではないことを意味します。さらに、私はツールを管理するためにWebアプリケーションとは別にインターフェイスを作成する必要があります。さらに、私はこれが信じられないほどハッキリなアプローチであるとの印象を揺さぶるように見えることはできません。
  2. 私はクラスローダー(具体的にはgetResourceAsStream)を実装しています。デフォルトの動作ではなく、そのようなxmlファイルをロードする呼び出しが表示されたら、必要に応じて元の情報に基づいてxmlファイルを生成し、 (この場合、サードパーティのフレームワークになる)呼び出し元へのリソース

最初の質問は、#2私の最善の選択肢ですか、または他のオプションが存在しますか(または私は#1に固執する必要があります)?

私の2番目の質問は、自分のクラスローダーを実装する必要があると仮定して、私のWebアプリケーションでこれを行うにはどうすればよいでしょうか?私はTomcat 7を使用していますが、可能であれば、私が使用しているWebコンテナとは独立したソリューションを提供したいと思います。

ご協力いただければ幸いです!

+0

フレームワークがクラ​​スパスから* XMLのみを読み込めるかどうかをまずチェックします。ファイルシステムの読み込みなどのために他の 'コネクタ'があるかもしれません。もしそうでなければ、他の 'コネクタ'を許可するようにコードを修正するのが簡単だろうと思います。どちらも可能でない場合、私はあなたのアイデアは有望なものだと思います。私は 'classpathコネクタ'しか提供していないフレームワークを扱っています。**非常に**迷惑です! –

+0

私はコネクタに精通していません。私は、xmlファイルがクラスローダーを使ってアクセスされていることを100%も確信していません。私はちょうどそれがクラスローダーが使用されているjarファイル内にあると仮定します。コネクターが使用されていないことを確認する方法はありますか?ご返信ありがとうございます、@PaulGrime! – Neil

+0

こんにちは、コネクター固有のものではありませんでした。コネクターは、アプリケーションにXMLコンテンツを提供するコードを意味していました。 –

答えて

0

私はあなたの質問を理解しているかどうかはわかりませんが、思考のxstream APIを使って試してみるといいでしょう。Javaオブジェクトを指定してxmlを生成できます。あなたのウェブページを生成する方法。 私はこの答えが非常にトリビュアであることを知っていますが、これがあなたの目的を十分に果たしたと思われる最小の騒ぎでxmlを生成する新しいアプローチに移行するのに役立つ新しいAPIにつなげることができれば、

+0

私はあなたがどこにいるのか理解していますが、私の問題はオリジナルのXMLを変更しているほどWebページの世代ではありません。私はできるだけ "ウイング"してxmlをゼロから作ることはできませんが、サードパーティライブラリが私のためにやっているので、できません。 – Neil

1

おそらく、jarをクラスパス上のディレクトリに展開して、その場でXMLファイルを更新することができます。これは、アプリケーション内の内部キャッシュを考慮しません(もしあれば、それは別の問題です)。しかし、それは実装するのが簡単で、セーナナガンで満たされたClassLoaderビジネスにあなたを入れません。

+0

私はそれを実際には考えていませんでした。クラスパスのリソースの1つが絶えず変化するのを見た場合、Webコンテナがパニックに陥ることはありませんか? – Neil

+0

私は、XMLをキャッシュするクラスローダーと、明示的なアプリケーションキャッシングを考慮する必要があると思います。クラスローダーは、それらを介してロードされるリソースをキャッシュすることがよくあります。したがって、XMLファイルを変更しても、クラスローダーがそれらを再ロードすることはありません。 –

+0

クラスローダーはクラスをキャッシュする傾向があります。クラスローダーはクラスを間接的にキャッシュする傾向があります(単純にクラスをロードして「キャッシュ」として使用するため)。しかし、通常のリソースの場合、可能な限り、キャッシュ可能なコンテンツを想定するか、キャッシュに入れたいと思うようなことはあまりありません。明らかに、クラスローダーは「何でもできます」。キャッシングは、ファイルベースのローダーよりもネットワークベースのローダーのほうがはるかに理にかなっており、クラスローダーが期待どおりに動作するかどうかを自分でテストする必要があります。しかし、私の経験では、クラス以外の部分はかなりうまくいく傾向があります。 –

関連する問題