2013-04-03 2 views
3

Мы недавно конвертировали наше приложение из сервлета 2.5 в сервлет 3.0, чтобы мы могли использовать динамическую конфигурацию сервлета.Websphere 8.5 и SpringServletContainerInitializer

Мы используем SpringServletContainerInitializer Spring для инициализации нашего приложения соответствующим экземпляром WebApplicationInitializer, который живет в нашем коде. Этот подход работает в Tomcat, но при развертывании в Websphere 8.5.0.1 SpringServletContainerInitializer не может найти реализацию интерфейса WebApplicationInitializer в нашем коде, поэтому наш сервлет диспетчера Spring MVC не создается.

Мы нашли one blog post онлайн, где автор не смог заставить его работать.

Мы попытались возиться с загрузчиком классов, загрузкой классов и проверить, что сервлет 3.0 работает в контейнере другими способами, и, похоже, с этим все в порядке. Используя средство просмотра загрузчика класса WAS, мы видим, что загружаются классы SpringServletContainerInitializer и интерфейс WebApplicationInitializer, но не наша реализация WebApplicationInitializer.

Кто-нибудь пробовал это в Websphere? Мы думаем, что это может быть проблемой загрузчика классов, но в конечном счете невелико.

+1

Пытались ли вы форум WebSphere? https://www.ibm.com/developerworks/community/forums/html/forum?id=11111111-0000-0000-0000-000000000266 – dbreaux

+3

Похоже, что мы можем избавиться от WebSphere. Это стоит нам неделей производительности (по таким вопросам) и, кажется, обеспечивает очень мало ценности, которую организация планирует использовать. –

+1

Я знаю, что это старый комментарий, однако - иметь websphere в наши дни, если вы на самом деле не находитесь в какой-то очень деловой среде и должны иметь сертифицированную среду (банки и т. Д.) Абсолютно бесполезны. Это просто замедляет работу разработчиков, а IBM RAD не помогает. Вы решили проблему? У меня такая же проблема при запуске приложения spring boot + vaadin в websphere 8.5 – Mejmo

ответ

1

У меня был точно такой же вопрос. Проблема заключается в дефекте в WebSphere, фиксированном следующим APAR http://www-01.ibm.com/support/docview.wss?uid=swg1PM85177. WebSphere создает кеш аннотаций & из-за дефекта, когда кеш заполнен, он отбрасывает ранее кэшированные аннотации, в результате чего SpringServletContainerInitializer не находит все реализации WebApplicationInitializer.

Этот APAR уже выпущен в 8.0.0.8 & запланирован на 8.5.5.2, который, в свою очередь, запланирован на 28 апреля. В то же время мне удалось увеличить размер кеша с его по умолчанию от 2000 до 16000 (он не работает на 4000 & 8000), после чего мое приложение начало работать. Один размер не подходит для всех, так как размер кеша переопределяется системным свойством JVM для узла WebSphere, соответствующий размер будет зависеть от того, какие приложения работают на этом узле &, как они (& их JAR) используют аннотации, поэтому он будет важно играть с этой настройкой до тех пор, пока не будет определено правильное значение для вашего приложения (ов).

Система виртуальной машины Java свойство я использовал -Dclassinfocachesize = 16000

3

Я только что видел это сообщение. При отладке проблем загрузчика классов WebSphere обеспечивает отслеживание, которое при включении может дать более подробную информацию о том, что происходит или не происходит. Он предоставляется в файлах, которые запрашивает IBM Support, если вы открыли PMR. Но читать и понимать результат достаточно легко.

http://www-01.ibm.com/support/docview.wss?uid=swg21196187#show-hide под "Сбор данных вручную" строка трассировки использовать это

com.ibm.ws.classloader. * = Все

Смежные вопросы