Статьи

Ресурсы Glassfish V3 с помощью инструмента CLI для администрирования (asadmin)

Я только что обновил проект Cejug-Ads для поддержки сборок Maven 2 и добавил несколько новых функций, в том числе сценарий оболочки, способный настраивать ресурсы, а также развертывать приложение в Glassfish V3 . Сценарий создает все ресурсы Java EE, требуемые приложением, такие как DataSource, соединение JavaMail и очереди JMS. В следующих разделах я опишу, как создать каждый из этих ресурсов с помощью «инструмента CLI администрирования Glassfish» (командная строка asadmin).

Инструмент CLI для администрирования Glassfish

Инструмент CLI доступен, когда вы устанавливаете Glassfish на свой компьютер и включаете% AS_HOME \ bin в переменную среды PATH. Чтобы проверить, в порядке ли ваша конфигурация, просто откройте терминал и введите:

	asadmin version
Version = GlassFish v3 (build 74.2)
Command version executed successfully.

Вы должны увидеть версию Glassfish на экране, в противном случае, пожалуйста, просмотрите установку Glassfish, прежде чем продолжить чтение оставшейся части этого блога.

Важно : Я предполагаю , что вы знаете , что Java EE ресурсы и специально , что вы знаете , что это DataSource , JMS Queue и JavaMail ресурс.

Конфигурация среды

Следующие данные должны быть настроены на вашем компьютере для выполнения примеров команд этого блога:

  • Установите Glassfish V3 со значениями конфигурации по умолчанию.

  • Установите MySQL с пользователем = root и паролем = adminadmin. Если вы используете разные значения, адаптируйте команды в приведенных ниже сценариях.

  • Убедитесь, что драйвер MySQL установлен в папке Glassfish lib. Если вы еще не установили драйвер, просто скопируйте jar-файл MySQL Connector / J 5.1.12 в папку AS_HOME \ domains \ domain1 \ lib.

  • Обязательно создайте базу данных объявлений, прежде чем продолжить, просто откройте терминал (или окно DOS) и введите:

    mysql -uroot -padminadmin
    mysql> create database classifieds;
    mysql> Query OK, 1 row affected (0.00 sec)
    mysql> exit;

Ресурсы Cejug-Объявления

Цель этой статьи — не заменить отличную документацию Glassfish , это всего лишь ярлык для тех, кто заинтересован в сотрудничестве в проектах с открытым исходным кодом CEJUG. Я буду использовать сценарий оболочки Cejug-Ads в качестве примера использования asadmin, и если вы используете Windows, есть лишь несколько деталей, которые вы должны изменить, чтобы получить те же результаты. Ресурсы, которые будут созданы, выделены на правом изображении административной консоли Glassfish . Эти ресурсы:

  1. jdbc / adssPool — пул соединений MySQL JDBC

  2. JDBC / Доска объявлений — источник данных MySQL

  3. NotificationQueueConnectionfactory — фабрика соединений JMS, используемая функциями уведомлений.

  4. RegistrationQueueConnectionfactory — фабрика соединений JMS, используемая в сценарии использования педантичной регистрации .

  5. NotificationQueueConnectionfactory — очередь уведомлений JMS.

  6. RegistrationQueueConnectionfactory — очередь регистрации JMS.

  7. почта / объявления — ресурс JavaMail, используемый для сообщений через SMTP-сервер GMail .

 

После выполнения приведенных ниже инструкций вы должны проверить ресурсы вашего Glassfish, имеющие доступ к http: // localhost: 4848, а затем перейти к левой панели, чтобы найти каждый ресурс. Вы также можете использовать впечатляющий интерфейс администратора Glassfish для изменения ресурсов, которые вы создали с помощью линейных команд, или даже создавать ресурсы непосредственно в интерфейсе администратора. Причина, по которой я предпочитаю линейные команды asadmin, связана с более высокой производительностью и — особенно — с возможностью интеграции создания ресурсов в непрерывную интеграцию проекта . Тем не менее, это личный выбор, и вам решать, как лучше всего это сделать.

Создание ресурса DataSource с помощью asadmin

Источники данных — это ресурс, необходимый для подключения вашего приложения Java EE к базе данных. Это зависит от двух конфигураций: пула соединений и самого ресурса JDBC. Ваше приложение будет подключаться к ресурсу JDBC, а контейнер будет управлять пулом соединений, поэтому вам не нужно добавлять код панели приложения в ваше приложение только для управления жизненным циклом соединений JDBC.

  1. Создайте пул соединений :

    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.
  2. Создайте ресурс JDBC :

    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
  3. Проверьте ресурс JDBC :

    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-сервера, каждая новая регистрация сохраняется в очереди, а затем приложение немедленно отвечает на приложение клиента, говоря «пожалуйста, проверьте свою электронную почту на наличие подтверждающего сообщения «. После этого сервер высвобождает ресурсы, используемые сценарием использования регистрации, и другой процесс будет обрабатывать отправку электронной почты новому клиенту — быстрее и надежнее, чем пытаться обработать весь сценарий использования в объем памяти.

  1. Создайте фабрики соединений 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.
  2. Создайте JMS Queues :

    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.

  3. Проверьте ресурс JMS :

    asadmin --user admin list-jms-resources
    RegistrationQueue
    NotificationQueue

    Command list-jms-resources executed successfully.

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

Создание ресурса JavaMail с помощью asadmin

На данный момент, я надеюсь, вы уже определили шаблон для создания ресурсов на сервере Glassfish, команды похожи, и наиболее важными деталями являются значения параметров. Чтобы создать соединение с SMTP-сервером, вам нужна только одна команда, так как для SMTP-соединений нет пула.

  1. Создайте ресурс JavaMail :

    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
  2. Проверьте ресурс JavaMail :

    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 нужно обратить внимание на три пункта:

  1. Точка с запятой X Colon : Windows использует точку с запятой ; в то время как Linux использует двоеточие : в качестве разделителя параметров. И есть еще одна скрытая ловушка в наших командах asadmin: когда вы передаете параметры в кавычки asadmin, такие как «User = $ MYSQL_USER : Password = $ MYSQL_PASSWORD : URL = $ DB_URL», вам всегда нужно использовать двоеточие, так как строка будет интерпретироваться Java-код, а не операционной системы.

  2. Перевернутые Slashes : В Wndows использует перевернутый слэш \ в то время как Linux использует слэш / в качестве разделителя путей. Это важно в ресурсах JDBC, потому что URL JDBC зависит от ОС — например:

    • Linux: URL = jdbc \\: mysql \\: // localhost \\: 3306 / adss

    • Windows: DB_URL = jdbc \: mysql \: // localhost \: 3306 / adss

  3. Используйте CALL для выполнения команд asadmin в Windows, в противном случае командный файл завершится после первой команды. Пример:

    CALL asadmin --user=%ASADMIN_USER% create-jdbc-resource --connectionpoolid jdbc/classifiedsPool jdbc/classifieds
  4. Вы также можете удалить ресурсы 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 или проверить, работают ли они нормально. Есть также шанс расширить инструментарий асадмина, как это продемонстрировали Сринивас Муннанги и Начиаппан . Я вижу проблему переносимости в этом подходе, но в конечном итоге вам это нужно, чтобы вы знали, где искать.

Любая проблема или вопрос, пожалуйста, будьте моим гостем, чтобы внести свой вклад в мои проекты с открытым исходным кодом.

От http://weblogs.java.net/blog/felipegaucho