Инъекция кластерных источников данных Weblogic
У нас действительно небольшое приложение: 2 веб-сервиса, один источник данных с целевым значением "кластер". Это приложение развернуто в WebLogic 12.2.1 с несколькими другими приложениями. Все они находятся в одном кластере, у каждого есть собственный источник данных (хотя одно из приложений имеет источник данных, который указывает на одну и ту же базу данных, но другого пользователя).
Все приложения похожи на взаимодействие с базой данных. Мы используем JPA с Hibernate 5.2.10 Final, впрыскивать EntityManager
с помощью @PersistenceContext(unitName = "ourUnit")
, Каждое приложение корректно работает на обоих узлах cluser.
За исключением того, о котором этот вопрос. Обычно он работает только на одном узле, но не на одном узле. Если он работает на node_1, то после перезапуска только на node_2. Однажды нам удалось поработать на обоих узлах до следующей перезагрузки. Мы получаем Caused by: javax.naming.NameNotFoundException: While trying to look up comp/env/com.our.domain.db.dao.OurDaoImpl/entityManager
,
В Deployments -> app -> Configuration -> Persistence
наша единица настойчивости там, и это выглядит хорошо.
Мы перепробовали все, что приходит на ум: изменение цели с кластера на оба узла, изменение параметров транзакции, изменение самого приложения (хотя я не думаю, что с этим что-то не так).
Все источники данных определены одинаково, и тестирование источника данных через консоль weblogic прошло успешно. Также исключение составляет около EntityManager
сам не data-source ourds not found
или что-то в этом роде, было несколько раз по пути, и это, как правило, признак того, что что-то не так с источником данных, никогда не было EntityManager
один.
Я нашел одну вещь: в PL/SQL Developer, когда я подключаюсь к базе данных и захожу в Tools -> Sessions
узел, который в данный момент не работает, имеет что-то вроде этого:
update user$ set spare6=DECODE(to_char(:2, 'YYYY-MM-DD'), '0
select decode(upper(failover_method), NULL, 0 , 'BASIC', 1,
И несколько других вопросов, которые я не понимаю. У того, который работает, есть только первый запрос, а затем запросы, которые я вызываю через веб-сервисы. Это может быть проблемой здесь, хотя я понятия не имею, что вызывает это и как это исправить (и даже что это означает на самом деле).
Здесь persistence.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="ourUnit" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>ourds</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="false" />
<property name="hibernate.id.new_generator_mappings" value="true" />
<property name="hibernate.jdbc.batch_size" value="10" />
<property name="order_inserts" value="true" />
<property name="hibernate.generate_statistics" value="false" />
</properties>
</persistence-unit>
</persistence>
Я ценю любую помощь, даже то, что, возможно, не имеет смысла.
Weblogic 12.2.1 - Oracle 12c - Hibernate 5.2.10 Final