プラグインシステムをサーブレットに実装しようとしています。URLClassLoaderを使用してjarファイルをロードし、Class.fornameを使用してクラスをロードするプラグインをロードするクラスを作成しました。
これが私のコードです:
この部分はurlクラスローダーを作成します:
public PluginLoader(ServletContext context, String[] pluginName, String[] classToLoad) throws PluginLoaderException{
this.context = context;
urls= new URL[pluginName.length];
nameToURL(pluginName);
//create class loader
loader = new URLClassLoader(urls);
//loading the plug-in
loadPlugin(classToLoad);
}
これはURLを初期化します:
private void nameToURL(String[] pluginName) throws PluginLoaderException{
try{
for(int i=0;i<pluginName.length;i++){
urls[i] = context.getResource(pluginName[i]);
}
}
最後に、これはオブジェクトを作成します。
private void loadPlugin(String[] classToLoad) throws PluginLoaderException{
try{
iTest = (ITest) Class.forName(classToLoad[0],true,loader).newInstance();
}
catch(Exception e){
throw new PluginLoaderException(e.toString());
}
}
オブジェクトを操作して実装するインターフェイスを取得できるため、オブジェクトを作成できましたが、ITestでキャストしてアプリケーションで操作することはできません。ClassCastExceptiontplugin.toto.Totoをfr.test.inter.ITestにキャストできません。
TotoがITestを実装しているので不思議です。
誰かアイデアがありますか?
ありがとう