У меня есть агент Java, который использует байт-код. Я использую приставку apis в java 6, чтобы позволить пользователям динамически загружать агент и инструмент и код деинструмента с помощью моего java-агента. Я использую атрибут атрибута Boot-Class-Path, чтобы убедиться, что мои классы javagent находятся в пути класса загрузки, так что мои пользователи могут обрабатывать классы, такие как ArrayList и т. Д.Выгрузка класса Javaagent
Однако проблема связана с управлением версиями. Допустим, пользователь динамически присоединяет версию 1 моего агента. Затем я дал ему версию 2. Теперь, когда его сервер приложений никогда не закрывается, так как он прикрепляет версию 1 моего агента, классы версии 1 все еще загружаются.
Мне нужен такой способ, чтобы при моей клиентской версии 2 javaagent версия 1 была выгружена.
Я знаю, что одним из способов было бы написать загрузчик классов для классов javaagent и установить ссылку на загрузчик классов на null. Однако в этом случае я не буду в состоянии классов инструментов в пути к загрузке, так как мой загрузчик классов будет ниже в иерархии от загрузчика загрузчика и, таким образом, мои пользовательские классы инструментов, такие как ArrayList, потому что, если я добавлю вызов внутри методов ArrayList к одному из методы моих агентов, загрузчик загрузочного класса не сможет их увидеть.
Итак, есть ли способ решить проблему с загрузкой класса и выгрузить классы предыдущего агента?
Возможно, вы захотите взглянуть на JavaRebel (http://www.zeroturnaround.com/javarebel/), который является коммерческой реализацией того, что вы пытаетесь сделать. Это может дать вам указание на то, что есть и что невозможно. – skaffman