Я только что обновил проект Cejug-Ads для поддержки сборок Maven 2 и добавил несколько новых функций, в том числе сценарий оболочки, способный настраивать ресурсы, а также развертывать приложение в Glassfish V3 . Сценарий создает все ресурсы Java EE, требуемые приложением, такие как DataSource, соединение JavaMail и очереди JMS. В следующих разделах я опишу, как создать каждый из этих ресурсов с помощью «инструмента CLI администрирования Glassfish» (командная строка asadmin).
Инструмент CLI для администрирования GlassfishИнструмент CLI доступен, когда вы устанавливаете Glassfish на свой компьютер и включаете% AS_HOME \ bin в переменную среды PATH. Чтобы проверить, в порядке ли ваша конфигурация, просто откройте терминал и введите: asadmin version Вы должны увидеть версию Glassfish на экране, в противном случае, пожалуйста, просмотрите установку Glassfish, прежде чем продолжить чтение оставшейся части этого блога. Важно : Я предполагаю , что вы знаете , что Java EE ресурсы и специально , что вы знаете , что это DataSource , JMS Queue и JavaMail ресурс. Конфигурация средыСледующие данные должны быть настроены на вашем компьютере для выполнения примеров команд этого блога:
Ресурсы Cejug-ОбъявленияЦель этой статьи — не заменить отличную документацию Glassfish , это всего лишь ярлык для тех, кто заинтересован в сотрудничестве в проектах с открытым исходным кодом CEJUG. Я буду использовать сценарий оболочки Cejug-Ads в качестве примера использования asadmin, и если вы используете Windows, есть лишь несколько деталей, которые вы должны изменить, чтобы получить те же результаты. Ресурсы, которые будут созданы, выделены на правом изображении административной консоли Glassfish . Эти ресурсы:
|
|
После выполнения приведенных ниже инструкций вы должны проверить ресурсы вашего Glassfish, имеющие доступ к http: // localhost: 4848, а затем перейти к левой панели, чтобы найти каждый ресурс. Вы также можете использовать впечатляющий интерфейс администратора Glassfish для изменения ресурсов, которые вы создали с помощью линейных команд, или даже создавать ресурсы непосредственно в интерфейсе администратора. Причина, по которой я предпочитаю линейные команды asadmin, связана с более высокой производительностью и — особенно — с возможностью интеграции создания ресурсов в непрерывную интеграцию проекта . Тем не менее, это личный выбор, и вам решать, как лучше всего это сделать.
Создание ресурса DataSource с помощью asadmin
Источники данных — это ресурс, необходимый для подключения вашего приложения Java EE к базе данных. Это зависит от двух конфигураций: пула соединений и самого ресурса JDBC. Ваше приложение будет подключаться к ресурсу JDBC, а контейнер будет управлять пулом соединений, поэтому вам не нужно добавлять код панели приложения в ваше приложение только для управления жизненным циклом соединений JDBC.
-
asadmin create-jdbc-connection-pool --datasourceclassname com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource --restype javax.sql.ConnectionPoolDataSource --property "User=$MYSQL_USER:Password=$MYSQL_PASSWORD:URL=$DB_URL" jdbc/classifiedsPool
Куда:
-
$ MYSQL_USER — пользователь базы данных
-
$ MYSQL_PASSWORD — пароль пользователя базы данных
-
$ DB_URL — это URL-адрес соединения с базой данных. К сожалению, соединение с базой данных немного отличается для каждой операционной системы из-за различий «/».
Пример с реальными значениями для Cejug-Ads:
-
Linux:
asadmin create-jdbc-connection-pool --datasourceclassname com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource --restype javax.sql.ConnectionPoolDataSource --property "User=root:Password=adminadmin:URL=jdbc\\:mysql\\://localhost\\:3306/classifieds" jdbc/classifiedsPool
-
Окна:
asadmin create-jdbc-connection-pool --datasourceclassname com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource --restype javax.sql.ConnectionPoolDataSource --property "User=root:Password=adminadmin:URL=jdbc\:mysql\://localhost\:3306/classifieds" jdbc/classifiedsPool
Протестируйте пул соединений:
asadmin ping-connection-pool jdbc/classifiedsPool
Command ping-connection-pool executed successfully. -
-
asadmin --user=$ASADMIN_USER create-jdbc-resource --connectionpoolid jdbc/classifiedsPool jdbc/classifieds
Куда:
-
$ ASADMIN_USER — имя пользователя администратора Glassfish
Пример с реальными значениями для Cejug-Ads:
-
Одна и та же команда для Linux и Windows:
asadmin --user=admin create-jdbc-resource --connectionpoolid jdbc/classifiedsPool jdbc/classifieds
-
-
asadmin --user admin list-jdbc-resources
jdbc/__TimerPool
jdbc/__default
jdbc/arena
jdbc/classifieds
Command list-jdbc-resources executed successfully.
Здесь вы можете найти пример файла JPA 2.0 persistence.xml, использующего этот ресурс.
Создание ресурсов JMS с помощью asadmin
обмен сообщениямиявляется одним из наиболее мощных ресурсов приложений Java EE, поскольку он позволяет выполнять асинхронные задачи в вашем приложении, а также предоставляет механизм для очереди процессов, когда ваше приложение занято. Несколько вариантов использования могут намного быстрее отвечать на запросы клиента, если некоторые задачи обрабатываются в фоновом режиме, и именно так Cejug-Ads использует Glassfish JMS: для уведомлений клиентов и для случая использования регистрации. Пример регистрации является более простым примером: новый клиент регистрирует учетную запись в системе объявлений, а затем система отправляет электронное письмо для подтверждения запроса клиента. SMTP всегда является сложным ресурсом, поскольку он не гарантирует доставку сообщений, а также потому, что SMTP может быть недоступен в тот момент, когда клиент пытается зарегистрироваться.Чтобы не блокировать приложение или заставить клиента ждать ответа SMTP-сервера, каждая новая регистрация сохраняется в очереди, а затем приложение немедленно отвечает на приложение клиента, говоря «пожалуйста, проверьте свою электронную почту на наличие подтверждающего сообщения «. После этого сервер высвобождает ресурсы, используемые сценарием использования регистрации, и другой процесс будет обрабатывать отправку электронной почты новому клиенту — быстрее и надежнее, чем пытаться обработать весь сценарий использования в объем памяти.
-
Создайте фабрики соединений JMS :
asadmin create-jms-resource --restype=javax.jms.QueueConnectionFactory --description="Cejug-Classifieds Registration Connection Factory." RegistrationQueueConnectionFactory
asadmin create-jms-resource --restype=javax.jms.QueueConnectionFactory --description="Cejug-Classifieds Notification Connection Factory." NotificationQueueConnectionFactory
Обратите внимание, что JMS немного проще, чем DataSource, вам не нужно указывать пользователей и пароли, поскольку Open JMS является частью самого Glassfish (вместо доступа к внешней базе данных)
Протестируйте пул соединений JMS (да, тест одинаков, так как все пулы соединений имеют одинаковый тип ресурсов в Glassfish):
asadmin ping-connection-pool RegistrationQueueConnectionFactory
Command ping-connection-pool executed successfully. -
asadmin create-jms-resource --restype=javax.jms.Queue --description="Queue used to register Cejug-Classifieds users." RegistrationQueue
asadmin create-jms-resource --restype=javax.jms.Queue --description="Queue used to notify Cejug-Classifieds users." NotificationQueue
Одна и та же команда действительна как для Linux, так и для Windows.
-
asadmin --user admin list-jms-resources
RegistrationQueue
NotificationQueue
Command list-jms-resources executed successfully.
Здесь вы можете найти пример кода, используя очередь уведомлений, и здесь вы найдете другой MessageDrivenBean, использующий очередь регистрации.
Создание ресурса JavaMail с помощью asadmin
На данный момент, я надеюсь, вы уже определили шаблон для создания ресурсов на сервере Glassfish, команды похожи, и наиболее важными деталями являются значения параметров. Чтобы создать соединение с SMTP-сервером, вам нужна только одна команда, так как для SMTP-соединений нет пула.
-
asadmin --interactive=false create-javamail-resource --mailhost=$MAIL_HOST --mailuser=$MAIL_USER --fromaddress=$MAIL_FROM --enabled=true --description="e-Mail account used to confirm the registration of the Arena PUJ users" --storeprotocol=imap --storeprotocolclass=com.sun.mail.imap.IMAPStore --transprotocol smtp --transprotocolclass com.sun.mail.smtp.SMTPSSLTransport --property mail-smtp.user=$MAIL_SMTP_USER:mail-smtp.port=465:mail-smtp.password=$MAIL_SMTP_PASSWORD:mail-smtp.auth=true:mail-smtp.socketFactory.fallback=false:mail-smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory:mail-smtp.socketFactory.port=$MAIL_SMTP_PORT:mail-smtp.starttls.enable=true mail/classifieds
Пример с поддельным паролем для Cejug-Ads:
-
Одна и та же команда для Linux и Windows:
asadmin --interactive=false create-javamail-resource --mailhost=smtp.gmail.com --mailuser=cejug.classifieds [email protected] --enabled=true --description="e-Mail account used to confirm the registration of the Cejug-Classifieds users" --storeprotocol=imap --storeprotocolclass=com.sun.mail.imap.IMAPStore --transprotocol smtp --transprotocolclass com.sun.mail.smtp.SMTPSSLTransport --property [email protected]:mail-smtp.port=465:mail-smtp.password=fake:mail-smtp.auth=true:mail-smtp.socketFactory.fallback=false:mail-smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory:mail-smtp.socketFactory.port=465:mail-smtp.starttls.enable=true mail/classifieds
-
-
asadmin --user admin list-javamail-resources
mail/classfieds
Command list-javamail-resources executed successfully.
Здесь вы найдете пример кода с использованием ресурса JavaMail.
Использование Shell Script или BAT-файлов для запуска команд asadmin
Теперь вы ознакомились с множеством примеров полезных команд asadmin, пришло время подумать об эффективном способе их выполнения — и лучший способ, который я могу себе представить, — это автоматизация создания ресурсов с помощью файлов сценариев. Если вы работаете в Unix-подобной операционной системе, вы будете использовать Shell Script, а если вы используете Windows, вам нужно создать командный файл (* .bat). Команды asadmin одинаковы, но между linux и windows нужно обратить внимание на три пункта:
-
Точка с запятой X Colon : Windows использует точку с запятой ; в то время как Linux использует двоеточие : в качестве разделителя параметров. И есть еще одна скрытая ловушка в наших командах asadmin: когда вы передаете параметры в кавычки asadmin, такие как «User = $ MYSQL_USER : Password = $ MYSQL_PASSWORD : URL = $ DB_URL», вам всегда нужно использовать двоеточие, так как строка будет интерпретироваться Java-код, а не операционной системы.
-
Перевернутые Slashes : В Wndows использует перевернутый слэш \ в то время как Linux использует слэш / в качестве разделителя путей. Это важно в ресурсах JDBC, потому что URL JDBC зависит от ОС — например:
-
Linux: URL = jdbc \\: mysql \\: // localhost \\: 3306 / adss
-
Windows: DB_URL = jdbc \: mysql \: // localhost \: 3306 / adss
-
-
Используйте CALL для выполнения команд asadmin в Windows, в противном случае командный файл завершится после первой команды. Пример:
CALL asadmin --user=%ASADMIN_USER% create-jdbc-resource --connectionpoolid jdbc/classifiedsPool jdbc/classifieds
-
Вы также можете удалить ресурсы Glassfish с помощью команд asadmin, это полезно для очистки Glassfish, а также чтобы быть уверенным, что предыдущий или неправильно настроенный ресурс не будет использован. Например:
asadmin --passwordfile=$PASS_FILE delete-jms-resource RegistrationQueueConnectionFactory
asadmin create-jms-resource --restype=javax.jms.QueueConnectionFactory --description="Cejug-Classifieds Registration Connection Factory." RegistrationQueueConnectionFactoryПервая команда выдаст несколько сообщений об ошибках, если ресурс отсутствует, но вторая команда все равно будет запущена.
В качестве примера вы можете скачать скрипты Cejug-Ads здесь :
Резюме
Asadmin — это мощный инструмент, особенно если его добавить в среду непрерывной интеграции, такую как Hudson . С помощью скриптов это сделать довольно просто, и это выведет ваш проект на качественно новый уровень. Я просто не могу представить, чтобы запустить проект в Glassfish без таких сценариев, но вы должны оценить этот вариант. Также имейте в виду, что приведенные выше сценарии — лишь представление о возможностях asadmin, вы можете сделать гораздо больше, например развернуть и отменить развертывание приложений Java EE или проверить, работают ли они нормально. Есть также шанс расширить инструментарий асадмина, как это продемонстрировали Сринивас Муннанги и Начиаппан . Я вижу проблему переносимости в этом подходе, но в конечном итоге вам это нужно, чтобы вы знали, где искать.
Любая проблема или вопрос, пожалуйста, будьте моим гостем, чтобы внести свой вклад в мои проекты с открытым исходным кодом.