2012-03-13 18 views
2

WEB-INF/libフォルダに配置されていない外部JARファイルをロードするには、org.apache.catalina.loader.WebappLoaderクラスを拡張してカスタムローダークラスを作成しました。カスタムTomcat Webapp Loaderを使用して埋め込みリソースにアクセスする

起動時に、フォルダ(私の場合はcataline_home\plugins\)をスキャンし、このフォルダ内のすべてのクラス/ jarをWebアプリケーションのクラスパスに追加します。

これはすべて正常に動作しています。使用可能なすべてのクラスがロードされ、アプリケーションから実行することもできます。何らかの理由でこれらのクラスはJAR内のプロパティファイルにアクセスできません。

は、私は、このJAR内の私はプロパティファイルはsms.propertiespluginsms.jarと呼ばれるJARと呼ばれてきていると私は、このファイルを読むためにResourceBundle resource = ResourceBundle.getBundle("sms");を使用しています私は、スタンドアロンとしてそれを実行すると、それは完全に正常に動作しますと言うが、私は私の中でそれをロードしようとすると、 Webアプリケーション(カスタムWebappLoader経由で)throw:Resource Not Found Exception。下記の

は私WebappLoaderのソースです:

public class PluginLoader extends WebappLoader { 

    @Override 
    public void setContainer(Container container) { 
     StandardContext ctx = (StandardContext) container; 

     try { 
      File pluginFolder = new File(System.getProperty("catalina.home"), 
        "plugins"); 

      for (File file : pluginFolder.listFiles()) { 
       if (file.isDirectory()) { 
        continue; 
       } 
       if (file.getName().endsWith(".jar")) { 
        addRepository(file.toURI().toString()); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     super.setContainer(container); 
    } 
} 
+0

私が推測して賭けなければならないのなら、これはクラスローダーの委任の問題だと言います。プラグインJARを見ることができないシステムクラスローダーにリソースバンドルを作成しようとしています。 – Perception

+0

これは、デフォルトのクラスローダーを自分でオーバーライドする必要があると思われますか? – Waqas

+0

@Waqas 'Perception'は正しいと思います。アプリケーション/ WEB-INF/classesにsms.propertiesを入れてみてください。それが動作しているかどうかを確認します。または[この質問の選択された回答](http://stackoverflow.com/questions/2815404/load-properties-file-in-jar)でロジックを使用することができます。 –

答えて

0

私の推測では、あなたの財産ファイルはWEB-INFまたはWebContentフォルダー内に存在し、相対パスを使用して、あなたにプロパティファイルにアクセスしていることは何ですか。このプロパティファイルを使用するJARファイルでは、このパスが表示されないため、この例外が発生します。私はプロパティファイルの静的パスを使用することをお勧めします。私はあなたを助けることを願っています。

関連する問題