Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

215
Visualizações
ClassCastException en caso de caché de lectura simultánea configurada con algún cargador de caché

Recientemente me encontré con un problema con Infinispan 8.2.1.Final. Tengo algo de caché de lectura en modo de invalidación con el cargador de caché configurado. La configuración de ese caché consta de dos partes. La primera parte es la siguiente plantilla en XML:

 <?xml version="1.0" encoding="UTF-8"?> <infinispan xmlns="urn:infinispan:config:8.2"> <cache-container default-cache="default"> <transport cluster="jcache-cluster"/> <invalidation-cache-configuration name="user" mode="SYNC" statistics="true"/> </cache-container> </infinispan>

La segunda parte es la configuración programática con clases e interfaces de la API de JCache:

 new MutableConfiguration<String, User>() .setReadThrough(true).setStoreByValue(true) .setCacheLoaderFactory(FactoryBuilder.factoryOf(UserCacheLoader.class));

UserCacheLoader es extremadamente simple. Simplemente crea una nueva instancia de User cada vez que se llama.

Todo funciona bien hasta que llamo al método javax.cache.Cache.removeAll() . Provoca la siguiente excepción:

 Caused by: java.lang.ClassCastException: org.infinispan.test.User cannot be cast to java.lang.String at org.infinispan.test.UserCacheLoader.load(UserCacheLoader.java:40) at org.infinispan.jcache.embedded.JCacheLoaderAdapter.loadKey(JCacheLoaderAdapter.java:65) ... 40 more

Después de investigar un poco, encontré el siguiente código en la clase org.infinispan.jcache.embedded.JCacheLoaderAdapter :

 @Override public MarshalledEntry load(Object key) throws PersistenceException { V value = loadKey(key); if (value != null) { Duration expiry = Expiration.getExpiry(expiryPolicy, Expiration.Operation.CREATION); long now = ctx.getTimeService().wallClockTime(); // ms if (expiry == null || expiry.isEternal()) { return ctx.getMarshalledEntryFactory().newMarshalledEntry(value, value, null); } else { long exp = now + expiry.getTimeUnit().toMillis(expiry.getDurationAmount()); JCacheInternalMetadata meta = new JCacheInternalMetadata(now, exp); return ctx.getMarshalledEntryFactory().newMarshalledEntry(value, value, meta); } } return null; }

Como puede ver, se llama a newMarshalledEntry utilizando el value como clave y como valor.

¿Es un error o una característica? ¿Alguien se enfrentó al mismo problema?

PS Parece que este problema también es real para la última versión de Infinispan.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

De hecho, es un error que ahora ha sido corregido por @brianheart :). Se incluirá en próximos lanzamientos.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Assistente virtual