Выпущен GlassFish V3, и нет ничего лучше, чтобы отпраздновать новорожденного, чем опубликовать несколько советов о лучшем контейнере Java EE. Как вы заметите, когда загрузите и установите GlassFish V3 , сервер очень прост в настройке и запуске. Но после некоторой начальной эйфории вы также пропустите некоторые функции — для меня самые упущенные из них:
-
Безопасность : диспетчер безопасности отключен по умолчанию, что означает, что вы можете запускать « любое приложение, кроме стандартных Java EE ». Удивительно, не правда ли? Я полагаю, что причина, по которой инженеры SUN решили использовать эту стратегию, связана с историческими причинами: ни один из популярных серверов не оснащен включенной защитой, что способствует быстрому внедрению серверов, а также облегчает фазу разработки. Последствия этой простоты хорошо известны: большинство разработчиков не могут понять или настроить сервер производственного уровня. Я писал об этом раньше, и нет смысла сильно подчеркивать эту тему, это так.
-
Веб-настройка из коробки : сжатие и заголовки HTTP по умолчанию отсутствуют, и вы вынуждены создавать свои собственные пользовательские фильтры, чтобы сделать ваши страницы быстрее. Это еще одна пропущенная функция на любом сервере, доступном сегодня, и я хотел бы, чтобы где-нибудь в административном графическом интерфейсе была кнопка, чтобы сказать: « Пожалуйста, активируйте наиболее распространенные параметры настройки для развертывания веб-приложений ». В качестве эксперимента я предлагаю вам развернуть ваш любимый проект на Glassfish, а затем использовать YSlow.чтобы проверить, как производительность этого приложения. На первый взгляд вы увидите, что отсутствуют некоторые очевидные функции, такие как сжатие GZip, и, как новичок, вам нужно будет провести расследование, чтобы выяснить, как включить это. Заголовок Expires — еще одна классическая пропущенная функция, и я хочу, чтобы HTTP-коннектор Glassfish когда-нибудь предоставил набор общих HTTP-фильтров. Слишком специфично для контейнера? Слишком специфичен для абстрактной архитектуры? Конечно, но мир разработки Java EE — это большинство веб-разработок, и настоятельно рекомендуется иметь волшебную кнопку где-нибудь, чтобы активировать эти опции.
-
Готовые плагины : я кратко описал концепцию здесь , но поскольку у нас есть готовый к работе DataSource, JavaMail и другие ресурсы, нам нужны другие вещи в нашей повседневной деятельности, такие как интеграция с Twitter, webdav и т. Д. Итак, если мое приложение будет уведомлять пользователей Твиттер, где я могу настроить ресурс Twitter? где я могу скачать и подключить такой ресурс, чтобы он был доступен для всех моих приложений? А там есть фейсбук, гугл вейв и все другие ажиотажные коммуникации и социальные сети? Это код уровня приложения? конечно, но почему бы не сделать это доступным в моем контейнере как можно более простым способом? Что-то на будущее, я думаю …
Чтобы проиллюстрировать мой список пожеланий, я покажу вам, как развернуть приложение Hudson на Glassfish с включенным менеджером безопасности.
Включение диспетчера безопасности GlassFish V3
Нет ничего проще, чем включить менеджер безопасности GlassFish, у вас есть два варианта:
-
ASADMIN CLI : с помощью командной строки вы можете активировать менеджер безопасности следующим образом:
asadmin create-jvm-options —user adminuser -Djava.security.manager
-
Административный графический интерфейс : вы можете получить доступ к административному пользовательскому интерфейсу Glassfish по адресу http: // localhost: 4848 , а затем вы должны найти опцию «Безопасность» в левом меню и затем включить «Менеджер безопасности» в окне проверки, доступном в центральном показано на рисунке ниже.
После включения диспетчера безопасности необходимо перезапустить сервер, чтобы изменения вступили в силу. А теперь, если вы захотите развернуть и запустить приложение Hudson, вы будете удивлены исключением из системы безопасности, показанным на рисунке ниже.
Прежде чем перейти к техническим деталям, стоит упомянуть странное сообщение на этой странице ошибок:
… если вы не знаете, что такое диспетчер безопасности, то самый простой способ решить проблему — просто отключить диспетчер безопасности …
Серьезно, я не мог представить более печальное предложение, потому что Менеджер безопасности отключен по умолчанию, и если он включен, то по какой-то причине. Предлагать начинающему разработчику отключить защиту только для того, чтобы запустить Hudson, несколько странно — и IMHO, что сообщение должно быть удалено или заменено чем-то менее опасным. На самом деле нетрудно раскрыть Хадсона в диспетчере безопасности, поэтому я не вижу веской причины предлагать пользователям какие-либо действия с непредсказуемыми побочными эффектами, особенно когда речь идет о функциях безопасности. Позвольте мне показать вам правильный способ решения проблемы безопасности Гудзона.
Включение Hudson для работы с включенным Security Manager
Безопасность Hudson реализована на уровне приложений, поэтому Hudson не пострадает и не получает прибыли от функций диспетчера безопасности. Менеджер безопасности защищает файловую систему по умолчанию, поэтому любое приложение, пытающееся получить доступ к файлам, должно быть настроено для этой цели. Чтобы приложение могло получить доступ к файловой системе, вам нужно отредактировать файл политики безопасности, который в Glassfish находится в папке.
glassfishv3 / GlassFish / домены / domain1 / конфигурации / server.policy
Откройте этот файл и добавьте следующие записи:
grant codeBase "file:${com.sun.aas.installRoot}/domains/domain1/applications/hudson/-" {
permission java.security.AllPermission;
};
grant codeBase "file:/home/fgaucho/.hudson/-" {
permission java.security.AllPermission;
};
Важно : токены, выделенные жирным шрифтом, означают папки, которые вы должны адаптировать к локальной установке, особенно / home / fgaucho, который указывает на папку пользователя по умолчанию в моей ОС Linux. Если вы используете Windows, пожалуйста, не забудьте использовать инвертированные \ косые черты. Готово! Вы можете увидеть пример работы Hudson в Security Manager здесь . Вы можете использовать ту же конфигурацию для любого приложения, которое не использует контейнер для безопасности — например, для приложения Spring.