У нас есть проект, где сторонняя DLL-библиотека доступна через JacoZoom в приложении Tomcat. Очевидно, DLL утечки памяти (подтверждено поставщиком), но поставщик не намерен это исправить. Утечка памяти вынуждает Tomcat регулярно перезагружаться, что, естественно, является большим неудобством для пользователей.
Как лучше всего обойти эту проблему? Один из вариантов, который мы рассматриваем, - иметь два экземпляра сервера Tomcat и регулярно перезагружать другой, а также перенаправлять пользователя на другой.
Редактировать: решается путем создания другой библиотеки DLL, которая при необходимости убивает и воссоздает библиотеку поставщика. В основном эти три вызова kernel32 были использованы для реализации функциональности:
Private Declare Function GetModuleHandle Lib "kernel32.dll" Alias "GetModuleHandleW" (ByVal DllName As Long) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
К счастью, JAR-файл JacoZoom, похоже, не против того, чтобы DLL была уничтожена и воссоздана.