Hazelcast и Payara 5 — пытается закрыть eventManager, если hazelcast используется в контексте транзакции. ⇐ JAVA
Hazelcast и Payara 5 — пытается закрыть eventManager, если hazelcast используется в контексте транзакции.
В настоящее время мы пытаемся использовать Hazelcast в нашем приложении Jakarta EE 8, работающем на Payara 5.2022.x. У нас возникают огромные проблемы при попытке доступа к экземплярам IMap при использовании hazelcast любым методом, даже удаленным в контексте транзакций. Похоже, проблема в том, что арендатор Payara, который является пользователем в сочетании с Hazelcast, пытается снести все после каждого доступа к карте Hazelcast. Почти в 100% случаев это не удается, в результате чего получается такой стек:
[2023-08-18T08:42:24.310+0200] [Payara 5.2022.2] [SCHWERWIEGEND] [] [com.hazelcast.spi.impl.operationexecutor.impl.OperationExecutorImpl] [tid: _ThreadID= 72 _ThreadName=hz.priceless_meitner.partition-operation.thread-9] [timeMillis: 1692340944310] [levelValue: 1000] [[ [192.168.100.70]:4900 [разработка] [4.2] Не удалось обработать: com.hazelcast.map.impl.operation.PutOperation{serviceName='hz:impl:mapService',identHash=353117872, PartitionId=105, ReplicaIndex=0 , callId=-1914, invoctionTime=1692340944309 (2023-08-18 08:42:24.309), waitTimeout=-1, callTimeout=60000, tenantControl=fish.payara.nucleus.hazelcast.PayaraHazelcastTenant@30695580, name=statefulRoomSOSChangeListenerM ap} вкл. : hz.priceless_meitner.partition-operation.thread-9 java.lang.IllegalStateException: попытка выполнить операцию над закрытым EntityManager. в org.eclipse.persistence.internal.jpa.EntityManagerImpl.verifyOpen(EntityManagerImpl.java:2067) в org.eclipse.persistence.internal.jpa.EntityManagerImpl.close(EntityManagerImpl.java:1908) по адресу com.sun.enterprise.container.common.impl.EntityManagerWrapper$NonTxEMCleaner.beforePostInvoke(EntityManagerWrapper.java:1241) в org.glassfish.api.invoke.InvoctionManagerImpl$ListComponentInvocateHandler.lambda$beforePostInvoke$2(InvocatageManagerImpl.java:430) в java.base/java.util.ArrayList.forEach(ArrayList.java:1511) в org.glassfish.api.invoke.InvocatageManagerImpl$ListComponentInvocateHandler.beforePostInvoke(IndictionManagerImpl.java:430) в org.glassfish.api.invoke.InvocatageManagerImpl.postInvoke(IndictionManagerImpl.java:198) в fish.payara.appserver.context.ContextImpl$Context.close(ContextImpl.java:61) в fish.payara.appserver.context.ContextImpl$RequestContext.close(ContextImpl.java:126) на com.hazelcast.spi.impl.operationservice.Operation.popThreadContext(Operation.java:822) на com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:258) на com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:213) в com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:175) в com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:139) в com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.executeRun (OperationThread.java:123) на com.hazelcast.internal.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:102) ]] Во многих случаях мне удавалось смягчить проблему, переключившись с javax.enterprise.concurrent.ManagedScheduledExecutorService для использования обычного Executors.newSingleThreadScheduledExecutor(). Иногда мне удавалось аннотировать включающий метод с помощью @Transactional(TxType.NOT_SUPPORTED).
Но это не может быть правильным способом. Должен быть способ использовать Hazelcast в Payara, не избегая при этом магии транзакционных контейнеров.
Будем благодарны за любую помощь.
В настоящее время мы пытаемся использовать Hazelcast в нашем приложении Jakarta EE 8, работающем на Payara 5.2022.x. У нас возникают огромные проблемы при попытке доступа к экземплярам IMap при использовании hazelcast любым методом, даже удаленным в контексте транзакций. Похоже, проблема в том, что арендатор Payara, который является пользователем в сочетании с Hazelcast, пытается снести все после каждого доступа к карте Hazelcast. Почти в 100% случаев это не удается, в результате чего получается такой стек:
[2023-08-18T08:42:24.310+0200] [Payara 5.2022.2] [SCHWERWIEGEND] [] [com.hazelcast.spi.impl.operationexecutor.impl.OperationExecutorImpl] [tid: _ThreadID= 72 _ThreadName=hz.priceless_meitner.partition-operation.thread-9] [timeMillis: 1692340944310] [levelValue: 1000] [[ [192.168.100.70]:4900 [разработка] [4.2] Не удалось обработать: com.hazelcast.map.impl.operation.PutOperation{serviceName='hz:impl:mapService',identHash=353117872, PartitionId=105, ReplicaIndex=0 , callId=-1914, invoctionTime=1692340944309 (2023-08-18 08:42:24.309), waitTimeout=-1, callTimeout=60000, tenantControl=fish.payara.nucleus.hazelcast.PayaraHazelcastTenant@30695580, name=statefulRoomSOSChangeListenerM ap} вкл. : hz.priceless_meitner.partition-operation.thread-9 java.lang.IllegalStateException: попытка выполнить операцию над закрытым EntityManager. в org.eclipse.persistence.internal.jpa.EntityManagerImpl.verifyOpen(EntityManagerImpl.java:2067) в org.eclipse.persistence.internal.jpa.EntityManagerImpl.close(EntityManagerImpl.java:1908) по адресу com.sun.enterprise.container.common.impl.EntityManagerWrapper$NonTxEMCleaner.beforePostInvoke(EntityManagerWrapper.java:1241) в org.glassfish.api.invoke.InvoctionManagerImpl$ListComponentInvocateHandler.lambda$beforePostInvoke$2(InvocatageManagerImpl.java:430) в java.base/java.util.ArrayList.forEach(ArrayList.java:1511) в org.glassfish.api.invoke.InvocatageManagerImpl$ListComponentInvocateHandler.beforePostInvoke(IndictionManagerImpl.java:430) в org.glassfish.api.invoke.InvocatageManagerImpl.postInvoke(IndictionManagerImpl.java:198) в fish.payara.appserver.context.ContextImpl$Context.close(ContextImpl.java:61) в fish.payara.appserver.context.ContextImpl$RequestContext.close(ContextImpl.java:126) на com.hazelcast.spi.impl.operationservice.Operation.popThreadContext(Operation.java:822) на com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:258) на com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:213) в com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:175) в com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:139) в com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.executeRun (OperationThread.java:123) на com.hazelcast.internal.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:102) ]] Во многих случаях мне удавалось смягчить проблему, переключившись с javax.enterprise.concurrent.ManagedScheduledExecutorService для использования обычного Executors.newSingleThreadScheduledExecutor(). Иногда мне удавалось аннотировать включающий метод с помощью @Transactional(TxType.NOT_SUPPORTED).
Но это не может быть правильным способом. Должен быть способ использовать Hazelcast в Payara, не избегая при этом магии транзакционных контейнеров.
Будем благодарны за любую помощь.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ограничить клиентам hazelcast подключение к кластеру/экземпляру hazelcast.
Anonymous » » в форуме JAVA - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Ограничить клиентам hazelcast подключение к кластеру/экземпляру hazelcast.
Anonymous » » в форуме JAVA - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-