2010-03-17 4 views
2

У нас есть несколько военных файлов, развернутых внутри файла уха. В некоторых военных файлах есть класс, который кэширует статические данные из нашей системы PLM в одиночных точках. Поскольку некоторые из классов занимают несколько минут, чтобы загрузить, мы используем загрузку на запуск в web.xml, чтобы загрузить их раньше времени. Все это работает нормально, пока мы не попытаемся повторно развернуть приложение на наших производственных серверах. (WebLogic 10.3) Мы получаем исключение из нашего PLM API о уже загруженной dll. Наш поставщик PLM подтвердил, что это проблема, и заявил, что они не поддерживают использование нагрузки при запуске. Это также огромная проблема в наших коробках разработки, где мы постоянно переставляем приложение. Большинство из нас, когда мы не работаем над одним из приложений, использующих кеш, заставили их закомментировать. Очевидно, мы не можем это сделать для производственных серверов. Прямо сейчас мы передаем ухо на производственный сервер, развертываем его в консоли, дождитесь его сбоя, закройте экземпляр сервера приложений и снова запустите его.Загрузка файла класса сразу после запуска

Мы должны найти способ обойти это ...

Одно из предложений было создать сервлет, который мы можем назвать после загрузки сервера, которые будут загружаться различные кэши. Пока это будет работать, я ищу что-то немного более чистое. Есть ли все-таки, чтобы обнаружить, как только сервер запустится, а затем запустите методы?

Спасибо.

ответ

1

Как использовать прослушиватель жизненного цикла контейнера сервлетов, например ServletContextListener?

Example on how to use.

EDIT: Извините, после повторного чтения вашего вопроса я не думаю, что это сработает. Вы хотите что-то, что будет загружаться только один раз на сервер, а не на срок службы. Методы ServletContextListener будут вызываться каждый раз, когда приложение будет развернуто, точно так же, как сервлет загрузки на запуск (который, кажется, вы используете). Мое предложение будет делать то же самое по-другому.

Я бы попробовал предложение Криса Нава.

EDIT2: Похоже, что у tomcat есть lifecycle listener (s). Похоже, что документация разрежена, но это потенциально позволит вам что-то сделать при запуске сервера только один раз.

EDIT3: Да, слушатель жизненного цикла tomcat - это путь. This link очень хорошо объясняет, как установить его. Должно быть довольно прямолинейно. Если вы проигнорируете часть добавления транзакции в tomcat, она довольно подробно описывает, как добавить слушателя жизненного цикла.

+0

Похоже, что это должно сработать ... Я сделаю это. Благодарю. – Striker

1

У нас была аналогичная проблема с драйвером сторонних JDBC, который загружал родную DLL. При повторном развертывании приложения драйвер столкнется с ошибкой, сказав, что DLL уже загружена. Решение (если можно так выразиться) заключалось в том, чтобы переместить драйвер из lib в lib. Таким образом, драйвер был глобальным для сервера приложений и не нуждался в перезагрузке, когда приложение было перераспределено.