Infinispan — невозможно указать кодировку для удаленного кеша

Я видел довольно много примеров с веб-сайтов Инфиниспан и Красная шляпа о добавлении кодировки для ключа и значения кеша, но я не могу сделать это, используя мою текущую конфигурацию.

@Configuration
public class InfinispanConfiguration {

    @Bean
    public InfinispanRemoteConfigurer infinispanRemoteConfigurer() {
        return () -> new ConfigurationBuilder()
                .clientIntelligence(ClientIntelligence.TOPOLOGY_AWARE)
                .addContextInitializers(new ProductInitializerImpl())
                .statistics().enable()
                .addServers("localhost:11222; localhost:11322")
                .connectionPool().maxActive(10).exhaustedAction(ExhaustedAction.WAIT)
                .security()
                .authentication()
                .username("user")
                .password("1")
                .realm("default")
                .build();
    }

    @Bean
    public InfinispanRemoteCacheCustomizer customizer() {
        return builder -> builder.tcpKeepAlive(true);
    }
}

Я использую кеш в другом классе, как показано ниже:

@Slf4j
@Component
@RequiredArgsConstructor
public class ProductCache {

    private final RemoteCacheManager cacheManager;

    public void cacheProducts(Feed feed){
        cacheManager.administration().getOrCreateCache("prodCache", DefaultTemplate.INVALIDATION_ASYNC);
        RemoteCache<String, Product> cacheProducts = cacheManager.getCache("productsCache");

        feed.getProducts()
            .getProduct()
            .forEach(product -> cacheProducts.putIfAbsent(product.getPid(), product));

        log.info("Number of Products are " + feed.getProducts().getProduct().size());
    log.info("Number of cached Products are " + cacheProducts.size());
    }
}

Я использовал и добавил аннотации Protostream в свои классы.

@AutoProtoSchemaBuilder(
        includeClasses = {
                Product.class, Facet.class
        },
        schemaFileName = "product.proto",
        schemaFilePath = "build/proto/",
        schemaPackageName = "products"
)
public interface ProductInitializer extends SerializationContextInitializer {
}

Я также получаю это предупреждающее сообщение терминала:

WARN  (blocking-thread--p3-t2) [org.infinispan.encoding.impl.StorageConfigurationManager] ISPN000599: Configuration for cache 'productsCache' does not define the encoding for keys or values. If you use operations that require data conversion or queries, you should configure the cache with a specific MediaType for keys or values.

Я также заметил, что мой кеш хранит только 1 элемент, независимо от того, сколько продуктов находится в списке! Я также вижу на приборной панели, что есть промах кеша. Я просто не уверен, что эти проблемы как-то связаны.

Infinispan — невозможно указать кодировку для удаленного кеша

Любая помощь будет высоко ценится. Спасибо!
Обновлять: Наконец-то я понял, почему в моем кеше была только одна часть данных! Исключительно из-за этой настройки, DefaultTemplate.INVALIDATION_ASYNC. Он удаляет «устаревшие» данные при изменении кэша. Нашел эту информацию здесь.

Моя единственная оставшаяся проблема - разобраться с кодировкой, которая, как я теперь вижу, отличается, поэтому теперь мой единственный вопрос, поскольку кажется, что я задал два вопроса в одном!

Обновление2: кодировка устанавливается на основе ссылки, которую я предоставил в своем ответе ниже. Я только сейчас получаю эту ошибку ниже:

Infinispan — невозможно указать кодировку для удаленного кеша

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После борьбы с этим в течение нескольких дней я полностью изменил способ настройки и удалил конфигурацию в стиле лямбда, так как было сложно включить конфигурацию кодирования. Я следовал этому руководство и просто объявил два метода конфигурации как компоненты Spring! Теперь он легко устанавливает кодировку!
Ответ на Обновление2: После добавления этих строк в конфигурацию билдера:

.marshaller(new ProtoStreamMarshaller())
.addContextInitializers(new ProductInitializerImpl())
.addJavaSerialAllowList("com.person.model.*")

Не забудьте добавить файл Proto, сгенерированный плагином процессора аннотаций ProtoStream, на панель инструментов, иначе вы получите то же сообщение об ошибке, что и в моем обновленном вопросе!

Другие вопросы по теме