Разница между classpath и папкой lib - PullRequest
1 голос
/ 26 июня 2011

Одна вещь, которую я не смог выяснить (всего 4 месяца опыта в J2EE), это область действия classpath и lib (WEB-INF / ...) Почему 2 места для загрузки классов? Во время запуска сервера, какие классы «читаются» первыми? Почему загрузки всех классов в classpath будет недостаточно?

Спасибо

1 Ответ

2 голосов
/ 27 июня 2011

Сервер приложений будет сначала искать в каталоге lib модуля, а затем в глобальном пути к классам - если вообще.

Как правило, классы, загруженные через глобальный путь к классу сервера приложений, не могут быть заменены во время выполнения.,Это означает, что вам нужно остановить и перезапустить весь сервер приложений, чтобы обновить или заменить код, что часто недопустимо в производственных средах.Это также означает, что классы и файлы JAR вашего приложения или модуля могут конфликтовать с собственным кодом сервера приложений или с другими приложениями, развернутыми на том же сервере приложений.

Документация сервера приложений, который вы используете, вероятно, будетлибо запрещать, либо строго запрещать изменение глобального пути классов.

Серверы приложений обычно создают отдельный экземпляр загрузчика классов для каждого приложения.Это позволяет серверу приложений изолировать кодовые зависимости каждого приложения и позволяет перезагружать или даже выгружать модули.

Текущая модель загрузчика классов, которая была с Java с самого начала, может быть трудной для пониманияи быстро приводит к очень сложным вопросам.К сожалению, многие из этих проблем часто впервые встречаются в тестах интеграции и производственной среде.Такие фреймворки, как OSGi , пытаются решить некоторые из этих проблем, и в рамках процесса JCP существуют различные инициативы по улучшению загрузки классов и управления зависимостями, а также в рамках спецификаций Java.

...