У меня есть Java-агент, который использует байт-код.
Я использую apis attach в java 6, чтобы позволить пользователям динамически загружать код агента, инструмента и инструмента, используя мой java агент.
Я использую атрибут манифеста Boot-Class-Path, чтобы убедиться, что мои классы javagent находятся в пути к загрузочному классу, чтобы мои пользователи могли использовать такие классы, как ArrayList и т. Д.
Однако проблема заключается в управлении версиями.
Допустим, пользователь динамически подключает версию 1 моего агента.
Тогда я дал ему версию 2. Теперь, так как его сервер приложений никогда не выключался, так как он подключил версию 1 моего агента, классы версии 1 все еще загружены.
Мне нужен какой-то способ, чтобы, когда мой клиент версии 2 javaagent, версия 1 выгружалась.
Я знаю, что одним из способов было бы написать клиентский загрузчик классов для классов моего javaagent и установить ссылку на загрузчик классов равной нулю.
Однако в этом случае я не смогу использовать классы инструментов в загрузочном пути к классам, так как мой загрузчик классов будет ниже в иерархии от загрузчика загрузочных классов, и, таким образом, мои пользователи не смогут использовать классы инструментов, такие как ArrayList, потому что, если я добавлю вызов внутри методов ArrayList к одному из моих методы классов агента загрузчик классов загрузчика не сможет их увидеть.
Так есть ли способ решить проблему пути к загрузочным классам и все же выгрузить классы предыдущего агента?