Подтвердить что ты не робот

JBoss EAP 6.x понимает этап развертывания - ResourceAdapters, EJB, jar, war

В JBoss, как последовательность этапа развертывания? Каков порядок создания и использования объекта? Учитывая корпоративное приложение (*.ear), проверяя весь журнал развертывания (server.log), этап развертывания выглядит следующим образом:

  • Развернуты все libs - загружаются и доступны файлы .class;
  • Развертываются все *. jar модули. Загружаются и доступны файлы .class;
  • Если какой-либо *. jar является EJB Jar, через файлы конфигурации (пример ejb-jar.xml) или аннотации, создается дерево JNDI;
  • Если какая-то *. jar имеет конфигурацию файла persistence.xml, загружаются все сущность и ссылка на источники данных;
  • Все модули *. war запускают фазу развертывания;
  • Через файлы конфигурации (web.xml) загружаются слушатели и контекстно-корневые и, в конечном итоге, аспекты безопасности.
  • Ухо успешно установлено.

Вопросы:

  • Что относительно модулей адаптеров ресурсов, PersistenceContext и EJB Pool?
  • Когда обнаружен файл persistence.xml, запускается ли подключение к источнику данных и, следовательно, к пулу базы данных?
  • Так как источник данных (DB) настроен в standalone.xml или domain.xml, когда происходит первое подключение к пулу БД? Когда я вставляю PersistenceContext и использую EntityManager?
  • Когда пул EJB загружен и доступен для использования?
  • Правильно ли сказать, что во время развертывания JJB jar создается дерево JNDI, а затем доступно?
  • Когда EJB обнаружен, он загружается внутри пула (в качестве ссылки на ввод/поиск)?

Когда модуль .war развернут и готов, даже если полное развертывание .ear еще не завершено, возможно, сервлет или прослушиватель запускаются из контейнера.

  • Что произойдет, если некоторые из этих объектов (слушатель, сервлет) попытаются использовать EJB или PersistenceContext или другие объекты? Доступны ли эти объекты?
  • Возможно ли иметь проблему взаимоблокировки и повесить поток/этап развертывания?
4b9b3361

Ответ 1

Ответ 2

Я постараюсь ответить на остальные ваши вопросы:

Когда найдено persistence.xml, происходит ли подключение к источнику данных и так в пул БД запускать?

Да, это должно произойти (если соединение уже не создано), в противном случае структура таблицы (DDL) может быть проверена или создана.

Так как источник данных (DB) настроен в standalone.xml или domain.xml, когда происходит первое соединение с пулом БД? Когда я внедрить PersistenceContext и использовать EntityManager?

Ответ на этот вопрос: это зависит. Если ваш источник данных JDBC настроен с минимальным размером пула MIN_POOL_SIZE > 0, а флаг prefill установлен равным true, тогда WildFly будет создавать MIN_POOL_SIZE подключения к серверу БД без каких-либо развертываний, которые используют этот источник данных (после изменения этого флага вам необходимо отключить/включить источник данных). В противном случае при развертывании: создается столько подключений, сколько необходимо (в зависимости от того, что вы делаете при развертывании, но для простых приложений - один), за исключением того, что у вас есть MIN_POOL_SIZE > 0, а для строгого минимального флага установлено значение true, и в этом случае будут созданы соединения с максимальным MIN_POOL_SIZE.

Когда пул EJB загружен и доступен для использования?

Он доступен для использования после развертывания подмодуля EJB со всеми его зависимостями.

Правильно ли сказать, что во время развертывания баннеров EJB дерево JNDI создано и доступно?

Я бы сформулировал это следующим образом: после (не во время) проверяется, что все EJB могут быть развернуты (например, все их зависимости могут быть решены), затем создаются записи JNDI (в дереве JNDI). Согласно тому, что я заметил, если один EJB терпит неудачу, ничто не развертывается, что заставляет меня думать, что я здесь.

[При развертывании модуля .war] Что произойдет, если некоторые из этих объектов (слушатель, сервлет) попытаются использовать EJB или PersistenceContext или другие объекты? Доступны ли эти объекты?

Да, определенно. Мы используем эту функцию для выполнения некоторого кода init из сервлета при развертывании WAR файла (например, для создания некоторых объектов с некоторыми значениями по умолчанию).

Возможно ли иметь проблему взаимоблокировки и повесить поток/фазу развертывания?

Теоретически да, практически нет (я сомневаюсь, что ребята из RedHat не подумали об этом).


Некоторые советы: если вы используете MySQL, вы можете проверить, какие соединения сделаны на сервере с помощью show processlist. В противном случае, если вы используете Linux/Unix, вы можете проверить все сделанные подключения к вашему серверу БД с помощью netstat.