Есть ли шаблон, чтобы убедиться, что приложение java ee развертывается, даже если источник данных неисправен? Мое приложение не запускается, если источник данных недоступен. Менеджер сущностей не может быть инициализирован и поэтому не может быть внедрен в мой ejb. Это приводит к сбою всего развертывания.
Приложение имеет DLQ, когда источник данных недоступен.
Пример:
постоянство.xml
<persistence-unit name = "dataSourceExample" transaction-type = "JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/dataSourceExample</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name = "hibernate.dialect" value = "org.hibernate.dialect.Oracle10gDialect"/>
<property name = "hibernate.show_sql" value = "false"/>
<property name = "hibernate.generate_statistics" value = "false"/>
</properties>
</persistence-unit>
конфигурация источника данных в wildfly
<datasource jndi-name = "java:jboss/datasources/dataSourceExample" pool-name = "dataSourceExamplePool" use-ccm = "false">
<connection-url>someurl</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver>com.oracle.ojdbc</driver>
<pool>
<max-pool-size>25</max-pool-size>
</pool>
<security>
<user-name>someusername</user-name>
<password>somepassword</password>
</security>
<validation>
<valid-connection-checker class-name = "org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
<stale-connection-checker class-name = "org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
<exception-sorter class-name = "org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
</validation>
<timeout>
<blocking-timeout-millis>5000</blocking-timeout-millis>
</timeout>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
Внедренный менеджер сущностей в ejb
@PersistenceContext(unitName = "dataSourceExample")
private EntityManager dataSourceExampleEm;
Я просто хочу, чтобы приложение было развернуто, даже если оно не полностью функционально. Это сработает позже, когда источник данных «вернется».
Надеюсь, я правильно понял ваш вопрос.
Если сервер JEE загружает EntityManagerFactory и нет доступного источника данных, но он указан в файле persistence.xml, произойдет сбой, чего и следовало ожидать, поскольку зависимость не может быть разрешена.
Если создать EntityManagerFactory не удается, приложение нельзя запустить, поскольку оно является частью процесса начальной загрузки. Насколько я знаю, нет способа принудительно выполнить загрузку с ленивой постоянством или повторить попытку, если загрузка с сохранением не удалась. Это было бы полезным поведением, но этот подход появился в архитектуре микросервисов и не был реализован на обычных серверах JEE в тот день.
Если вы хотите, чтобы ваше приложение запускалось без доступного DataSource, то, я думаю, вам нужно самостоятельно загрузить EntityManagerFactory, благодаря чему вы сможете отлавливать ошибки и пробовать их при следующей попытке внедрения EntityManager. При таком подходе вам придется самостоятельно управлять жизненным циклом EntityManagerFactory и EntityManager, а также производителями для внедрения CDI. Тогда инъекция через @PersistenceUnit работать не будет.
Получение ссылки на EntityManager в приложениях Java EE с помощью CDI
https://www.sitepoint.com/cdi-weld-inject-jpa-hibernate-entity-managers/
https://deltaspike.apache.org/documentation/jpa.html
Возможно, вы предоставляете журналы ошибок, которые вы получаете во время начальной загрузки.