Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2009, 16:11   #1
igorDanilov
Новичок
Джуниор
 
Регистрация: 14.10.2009
Сообщений: 1
Радость ClassCastException при разработке плагина

Проблема состоит в следующем. Пытаюсь написать ядро, к которому можно подключать плагины. Первым делом запускается класс Bosstrap который загружает интерфейс плагина в classloader, наследуемый от Boostrap classloaderа, самого корневого в иерархии. Этот classloader называется commonsLoader. Затем от commonsLoader наследуется еще один classloader, который называется appLoader. В appLoader загружаются ядро и плагины. Вообщем, интерфейс должен быть видим и ядру и плагинам. Схема:
Bosstrap -> commonsLoader(интерфейс) -> appLoader (ядро и плагины)
однако ядро (или основное приложение) состоит из нескольких классов(в том числе PluginInfo). а я загружаю в appLoader только один класс - Core. и когда в Core создается объект класса PluginInfo, он по-видимому загружается стандартным classloader java, который не видит интерфейс, так как наследован от Boostrap.
Соответственно возникает ClassCastException на строке кода (из класса) PluginInfo:

Код:
instance = (BasePluginInterface) pluginClass.newInstance();
Выход, о котором я подумал - это загружать все классы основного приложения в одном classloader, но здесь у меня снова ошибка - "Класс не найден", когда загружаю класс Core в класслоадер.
Вобщем вот Boostrap в первом варианте, когда загружаю только класс Core:

Код:
public class Boostrap { 

public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException { 

File commonsDir = new File("commons"); 

File[] entries = commonsDir.listFiles(); 
URL[] urls = new URL[entries.length]; 

for (int i = 0; i < entries.length; i++) { 
urls[i] = entries[i].toURI().toURL(); 
} 

URLClassLoader commonsLoader = new URLClassLoader(urls, null); 

URL binDirURL = new File("bin").toURI().toURL(); 
URLClassLoader appLoader = new URLClassLoader(new URL[]{binDirURL}, commonsLoader); 

Class appClass = appLoader.loadClass("programkernel_v01.Core"); 
Object appInstance = appClass.newInstance(); 

} 

}
Посоветуйте пожалуйста, что делать, чтобы подключить плагины.
igorDanilov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите в разработке shkipper Общие вопросы по Java, Java SE, Kotlin 5 08.04.2009 02:32
Реализация объєктно-ориентированого подхода при разработке программы (с использованием нотации Буча) Vikk22 Помощь студентам 3 18.11.2007 19:53