2x Spring Boot (WAR) и распределенная карта: ClassCastException - PullRequest
0 голосов
/ 14 июля 2020

Мы создаем два приложения с весенней загрузкой (2.3.1), одно приложение Auth и одно приложение Core Services. Они упакованы как WAR и разделяют некоторые наши библиотеки, некоторые JARS (зависимости maven), включая несколько классов, которые мы используем для хранения сеанса и подобных вещей.

Идея в том, что:

  1. Приложение Auth выполнит вход и создаст настраиваемый объект сеанса (класс из наших JAR), поместив ключ и объект в распределенную карту.
  2. Приложение Core Services предоставляет REST API с фильтром Spring, проверяющим токен и поиск действительного объекта сеанса на распределенной карте.

Объект найден, получен, но мы получаем исключение приведения класса

[INFO] [ERROR   ] SRVE0315E: Si è verificata un'eccezione: java.lang.Throwable: java.lang.ClassCastException: it.csebo.fec3.session.FecUserSession incompatible with it.csebo.fec3.session.FecUserSession

Во время выполнения я вижу, что загрузчик классов с полученным объектом связан объект из приложения Auth, а не из приложения Core Banking.

Мои вопросы:

  1. Должен ли я go использовать общую библиотеку и размещать свои материалы там, так что обе WAR используют один и тот же загрузчик классов.
  2. Есть ли способ изолировать загрузку классов? В моем экземпляре Liberty кажется, что я могу пересекать AppClassLoaders, помещая данные из одной WAR и извлекая их из другой. Это ошибка или особенность?
...