Infinispan NotSerializableException при запуске WAR в Wildfly 16

Я пытаюсь запустить свое приложение на 2 узлах Wildfly 16, работающих в автономном режиме, используя конфигурацию standalone-full-ha.xml. Когда запускается 2-й узел, первый пытается распределить/сбалансировать кэш web по умолчанию для нового узла.

Когда он это делает, я вижу следующее сообщение об ошибке в журнале на первом узле, а второй узел не запускается:

13:45:48,487 ERROR [org.infinispan.remoting.rpc.RpcManagerImpl] (transport-thread--p18-t8) ISPN000073: Unexpected error while replicating: org.infinispan.commons.marshall.NotSerializableException: org.wildfly.transaction.client.ContextTransactionManager
Caused by: an exception which occurred:
    in field com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase.transactionManager
    in object com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequired@73962bdb
    in field org.jboss.weld.contexts.SerializableContextualInstanceImpl.instance
    in object org.jboss.weld.contexts.SerializableContextualInstanceImpl@333ebcb5
    in object org.jboss.weld.contexts.SerializableContextualInstanceImpl@333ebcb5
    in field java.util.Collections$SynchronizedCollection.c
    in object java.util.Collections$SynchronizedList@333ebcd4
    in field org.jboss.weld.contexts.CreationalContextImpl.dependentInstances
    in object org.jboss.weld.contexts.CreationalContextImpl@4dc7055b
    in field org.jboss.weld.contexts.SerializableContextualInstanceImpl.creationalContext
    in object org.jboss.weld.contexts.SerializableContextualInstanceImpl@57504e37
    in object org.jboss.weld.contexts.SerializableContextualInstanceImpl@57504e37

13:45:50,718 ERROR [org.infinispan.statetransfer.OutboundTransferTask] (transport-thread--p18-t8) Failed to send entries to node node2: org.wildfly.transaction.client.ContextTransactionManager: org.infinispan.commons.marshall.NotSerializableException: org.wildfly.transaction.client.ContextTransactionManager
Caused by: an exception which occurred:
    in field com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase.transactionManager
    in object com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequired@73962bdb
    in field org.jboss.weld.contexts.SerializableContextualInstanceImpl.instance
    in object org.jboss.weld.contexts.SerializableContextualInstanceImpl@333ebcb5
    in object org.jboss.weld.contexts.SerializableContextualInstanceImpl@333ebcb5
    in field java.util.Collections$SynchronizedCollection.c
    in object java.util.Collections$SynchronizedList@333ebcd4
    in field org.jboss.weld.contexts.CreationalContextImpl.dependentInstances
    in object org.jboss.weld.contexts.CreationalContextImpl@4dc7055b
    in field org.jboss.weld.contexts.SerializableContextualInstanceImpl.creationalContext
    in object org.jboss.weld.contexts.SerializableContextualInstanceImpl@57504e37
    in object org.jboss.weld.contexts.SerializableContextualInstanceImpl@57504e37

Некоторые другие вещи, чтобы отметить:

  • Это не удается при запуске одной из моих WAR, которые распространяются внутри EAR, но не двух других WAR, которые также развернуты в EAR.
  • Мой web.xml помечен как <distributable/> для всех 3 WAR
  • Мои другие кеши, кажется, реплицируются просто отлично

Я не могу понять, где используется ContextTransactionManager или почему он сериализуется в кэш сеанса. Я предполагаю, что это может быть где-то в моем коде, но я не могу понять, где даже начать искать. Любая помощь будет оценена по достоинству!

Обновление (28.05.2019): вот пара снимков экрана из консоли управления, на которых показаны 2 сеанса, которые создаются при запуске (мы используем JSP в нашем веб-приложении, и у нас есть служба запуска, которая работает для предварительной компиляции всех файлов JSP):

Сеанс 1 Сеанс 2


person Jonathan Putney    schedule 22.05.2019    source источник
comment
Что такое версия Infinispan? Не могли бы вы протестировать 9.4.13.Final?   -  person Diego    schedule 23.05.2019
comment
Вы подтвердили, что сеанс не будет хранить нежелательные атрибуты? причина в поле com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase.transactionManager звучит так, будто вы пытаетесь воспроизвести некоторые внутренние вещи. В случае профилей без высокой доступности он будет локальным, поэтому нет необходимости в сериализации.   -  person wfink    schedule 24.05.2019
comment
@Diego Это версия, встроенная в Wildfly 16, которая выглядит как 9.4.8.   -  person Jonathan Putney    schedule 28.05.2019
comment
@wfink мы не пытаемся активно копировать что-либо, кроме пользовательских сеансов. Я обновил описание парой скриншотов, показывающих некоторые сеансы по умолчанию, которые создаются при запуске приложения. Глядя на атрибут WELD_S # 1, я предполагаю, что что-то вызывает проблему, но класс LoggedInUser — это просто управляемый компонент SessionScoped, он сериализуемый и не расширяет какой-либо другой класс.   -  person Jonathan Putney    schedule 28.05.2019


Ответы (1)


Обновление: это оказалось действительно простой и несколько глупой проблемой. Мы пометили метод в классе LoggedInUser аннотацией @javax.transaction.Transactional, которая изначально не была необходимой, но вызывала проблему с сериализацией.

Просто хотел опубликовать обновление на случай, если кто-то еще столкнется с чем-то подобным.

person Jonathan Putney    schedule 30.05.2019