Как (на уровне реализации) Java RMI загружает + определяет классы? - PullRequest
3 голосов
/ 14 декабря 2011

Когда RMI (реализация sun.rmi в виртуальных машинах Sun) десериализует объект, как часть параметров или возвращаемого значения удаленного вызова, он должен идти от имени класса (строка в сериализованном виде данные) к Class объекту. Как RMI решает, какой ClassLoader использовать для определения класса?

1 Ответ

2 голосов
/ 14 декабря 2011

По умолчанию десериализация Java ищет в стеке первый не системный класс и использует его загрузчик классов (то есть первый загрузчик классов, не равный NULL). RMI добавляет аннотации к последовательному потоку, чтобы указать местоположение (URL), откуда следует загружать классы. По умолчанию загрузчики классов RMI используют это местоположение для поиска дополнительных классов. Есть системное свойство, чтобы отключить это поведение (неплохая идея).

...