ClassLoader исключений, которые запоминаются - PullRequest
0 голосов
/ 08 января 2011

Я пишу загрузчик классов для долго работающего экземпляра сервера.Если пользователь еще не загрузил определение класса, я выбрасываю исключение ClassNotFoundException;кажется разумным.

Проблема заключается в следующем: Есть три класса (C1, C2 и C3).C1 зависит от C2, C2 зависит от C3.C1 и C2 разрешимы, C3 нет (пока).С1 загружен.Впоследствии C1 выполняет действие, которое требует C2, поэтому C2 загружается.C2 впоследствии выполняет действие, которое требует C3, поэтому загрузчик классов пытается загрузить C3, но не может разрешить его, и выдается исключение.Теперь C3 добавляется в путь к классам, и последовательность перезапускается (начиная с первоначально загруженного C1).Проблема в том, что C2, кажется, помнит, что C3 не может быть загружен, и не беспокоит просьбу загрузчика классов найти класс ... он просто повторно выдает запомненное исключение.

Очевидно, что я могу 't перезагрузите C1 или C2, потому что другие классы могут быть связаны с ними (поскольку C1 уже связался с C2).

Я пытался выдавать различные типы ошибок, надеясь, что класс не запомнит их.К сожалению, такой удачи нет.

Есть ли способ предотвратить привязку загруженного класса к исключению?То есть я хочу, чтобы загрузчик классов мог продолжать попытки, если это не удалось в первый раз.

Спасибо!

1 Ответ

0 голосов
/ 16 января 2011

Нет, это невозможно.Раздел 2.17.2 спецификации JVM :

Если во время загрузки класса возникает ошибка, то экземпляр одного из следующих подклассов класса LinkageError будет брошен в любой точкев программе, которая (прямо или косвенно) использует тип:

...

  • NoClassDefFoundError: Соответствующий загрузчик классов не может найти определения для запрошенного класса или интерфейса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...