java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.List

Spring JIRA | Deepak Pol | 2 years ago
  1. 0

    Spring data redis, multi-threading issue with Jedis

    GitHub | 2 years ago | deepakpol
    java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.List
  2. 0

    Spring data redis, multi-threading issue with Jedis

    Stack Overflow | 2 years ago | user2111500
    java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.List
  3. 0

    Link to Jedis issue reported- https://github.com/xetorthio/jedis/issues/918#issuecomment-78409511 I am using redis in a heavily multi-threaded java application and getting intermittent ClassCastExceptions I am using Jedis pool, and have verified that spring ensures the resources are returned to the pool, by calling returnResource() and returnBrokenResource in case of exceptions. Still facing this issue. I have a heavily multi-threaded environment I am using multiple spring RedisTemplates for serializing/deserializing different models. I have configured different spring RedisTemplates with their own JedisConnectionFactory so that the jedis pool is created per factory, but this didn't solve the issue. I was always using a pool, and added testOnBorrow as well as testOnReturn true, but didn't help Exception stack trace- stack - Thread 1: [ERROR] [03/01/2015 07:05:32.044] [events-system-akka.actor.default-dispatcher-2281] [akka://events-system/user/$YN/$b/$b/$b] java.lang.Long cannot be cast to java.util.List java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.List at redis.clients.jedis.Connection.getRawObjectMultiBulkReply(Connection.java:230) at redis.clients.jedis.Connection.getObjectMultiBulkReply(Connection.java:236) at redis.clients.jedis.BinaryJedis.zscan(BinaryJedis.java:3608) at org.springframework.data.redis.connection.jedis.JedisConnection$3.doScan(JedisConnection.java:2998) at org.springframework.data.redis.core.KeyBoundCursor.doScan(KeyBoundCursor.java:39) at org.springframework.data.redis.core.ScanCursor.scan(ScanCursor.java:85) at org.springframework.data.redis.core.ScanCursor.hasNext(ScanCursor.java:168) at org.springframework.data.redis.core.ConvertingCursor.hasNext(ConvertingCursor.java:56) ... application specific stack trace ... Thread 2: [ERROR] [03/01/2015 07:03:07.295] [events-system-akka.actor.default-dispatcher-2273] [akka://events-system/user/$VN/$b/$b/$b] Unknown redis exception; nested exception is java.lang.ClassCastException: [B cannot be cast to java.lang.Long org.springframework.data.redis.RedisSystemException: Unknown redis exception; nested exception is java.lang.ClassCastException: [B cannot be cast to java.lang.Long at org.springframework.data.redis.FallbackExceptionTranslationStrategy.getFallback(FallbackExceptionTranslationStrategy.java:48) at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) at org.springframework.data.redis.connection.jedis.JedisConnection.convertJedisAccessException(JedisConnection.java:195) at org.springframework.data.redis.connection.jedis.JedisConnection.zRem(JedisConnection.java:2321) at org.springframework.data.redis.core.DefaultZSetOperations$19.doInRedis(DefaultZSetOperations.java:283) at org.springframework.data.redis.core.DefaultZSetOperations$19.doInRedis(DefaultZSetOperations.java:280) at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:190) at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:152) at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:85) at org.springframework.data.redis.core.DefaultZSetOperations.remove(DefaultZSetOperations.java:280) ... application specific stack trace ... Caused by: java.lang.ClassCastException: [B cannot be cast to java.lang.Long at redis.clients.jedis.Connection.getIntegerReply(Connection.java:210) at redis.clients.jedis.BinaryJedis.zrem(BinaryJedis.java:1624) at org.springframework.data.redis.connection.jedis.JedisConnection.zRem(JedisConnection.java:2319) ... 21 more Spring redis configuration - <bean id="jedisConnFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" redis:usePool="true" redis:poolConfig-ref="jedisPoolConfig" redis:hostName="${redis.datasource.hostName}" redis:database="${redis.database.index}" redis:port="${redis.datastore.port}"/> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" value="${redis.conn.maxIdle}"/> <property name="maxTotal" value="${redis.conn.maxTotal}"/> <property name="minIdle" value="${redis.conn.minIdle}"/> <property name="testOnBorrow" value="true"/> </bean> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" redis:connectionFactory-ref="jedisConnFactory" redis:keySerializer-ref="redisStringSerializer" redis:valueSerializer-ref="redisStringSerializer" redis:defaultSerializer-ref="redisStringSerializer"/> <bean id="redisTemplate2" class="org.springframework.data.redis.core.RedisTemplate" redis:connectionFactory-ref="jedisConnFactory2" redis:keySerializer-ref="redisStringSerializer" redis:valueSerializer-ref="redisCustomDomainObjectSerializer" redis:defaultSerializer-ref="redisStringSerializer"/>

    Spring JIRA | 2 years ago | Deepak Pol
    java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.List
  4. Speed up your debug routine!

    Automated exception search integrated into your IDE

  5. 0

    Link to Jedis issue reported- https://github.com/xetorthio/jedis/issues/918#issuecomment-78409511 I am using redis in a heavily multi-threaded java application and getting intermittent ClassCastExceptions I am using Jedis pool, and have verified that spring ensures the resources are returned to the pool, by calling returnResource() and returnBrokenResource in case of exceptions. Still facing this issue. I have a heavily multi-threaded environment I am using multiple spring RedisTemplates for serializing/deserializing different models. I have configured different spring RedisTemplates with their own JedisConnectionFactory so that the jedis pool is created per factory, but this didn't solve the issue. I was always using a pool, and added testOnBorrow as well as testOnReturn true, but didn't help Exception stack trace- stack - Thread 1: [ERROR] [03/01/2015 07:05:32.044] [events-system-akka.actor.default-dispatcher-2281] [akka://events-system/user/$YN/$b/$b/$b] java.lang.Long cannot be cast to java.util.List java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.List at redis.clients.jedis.Connection.getRawObjectMultiBulkReply(Connection.java:230) at redis.clients.jedis.Connection.getObjectMultiBulkReply(Connection.java:236) at redis.clients.jedis.BinaryJedis.zscan(BinaryJedis.java:3608) at org.springframework.data.redis.connection.jedis.JedisConnection$3.doScan(JedisConnection.java:2998) at org.springframework.data.redis.core.KeyBoundCursor.doScan(KeyBoundCursor.java:39) at org.springframework.data.redis.core.ScanCursor.scan(ScanCursor.java:85) at org.springframework.data.redis.core.ScanCursor.hasNext(ScanCursor.java:168) at org.springframework.data.redis.core.ConvertingCursor.hasNext(ConvertingCursor.java:56) ... application specific stack trace ... Thread 2: [ERROR] [03/01/2015 07:03:07.295] [events-system-akka.actor.default-dispatcher-2273] [akka://events-system/user/$VN/$b/$b/$b] Unknown redis exception; nested exception is java.lang.ClassCastException: [B cannot be cast to java.lang.Long org.springframework.data.redis.RedisSystemException: Unknown redis exception; nested exception is java.lang.ClassCastException: [B cannot be cast to java.lang.Long at org.springframework.data.redis.FallbackExceptionTranslationStrategy.getFallback(FallbackExceptionTranslationStrategy.java:48) at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) at org.springframework.data.redis.connection.jedis.JedisConnection.convertJedisAccessException(JedisConnection.java:195) at org.springframework.data.redis.connection.jedis.JedisConnection.zRem(JedisConnection.java:2321) at org.springframework.data.redis.core.DefaultZSetOperations$19.doInRedis(DefaultZSetOperations.java:283) at org.springframework.data.redis.core.DefaultZSetOperations$19.doInRedis(DefaultZSetOperations.java:280) at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:190) at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:152) at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:85) at org.springframework.data.redis.core.DefaultZSetOperations.remove(DefaultZSetOperations.java:280) ... application specific stack trace ... Caused by: java.lang.ClassCastException: [B cannot be cast to java.lang.Long at redis.clients.jedis.Connection.getIntegerReply(Connection.java:210) at redis.clients.jedis.BinaryJedis.zrem(BinaryJedis.java:1624) at org.springframework.data.redis.connection.jedis.JedisConnection.zRem(JedisConnection.java:2319) ... 21 more Spring redis configuration - <bean id="jedisConnFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" redis:usePool="true" redis:poolConfig-ref="jedisPoolConfig" redis:hostName="${redis.datasource.hostName}" redis:database="${redis.database.index}" redis:port="${redis.datastore.port}"/> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" value="${redis.conn.maxIdle}"/> <property name="maxTotal" value="${redis.conn.maxTotal}"/> <property name="minIdle" value="${redis.conn.minIdle}"/> <property name="testOnBorrow" value="true"/> </bean> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" redis:connectionFactory-ref="jedisConnFactory" redis:keySerializer-ref="redisStringSerializer" redis:valueSerializer-ref="redisStringSerializer" redis:defaultSerializer-ref="redisStringSerializer"/> <bean id="redisTemplate2" class="org.springframework.data.redis.core.RedisTemplate" redis:connectionFactory-ref="jedisConnFactory2" redis:keySerializer-ref="redisStringSerializer" redis:valueSerializer-ref="redisCustomDomainObjectSerializer" redis:defaultSerializer-ref="redisStringSerializer"/>

    Spring JIRA | 2 years ago | Deepak Pol
    java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.List

    Not finding the right solution?
    Take a tour to get the most out of Samebug.

    Tired of useless tips?

    Automated exception search integrated into your IDE

    Root Cause Analysis

    1. java.lang.ClassCastException

      java.lang.Long cannot be cast to java.util.List

      at redis.clients.jedis.Connection.getRawObjectMultiBulkReply()
    2. Jedis
      BinaryJedis.zscan
      1. redis.clients.jedis.Connection.getRawObjectMultiBulkReply(Connection.java:230)
      2. redis.clients.jedis.Connection.getObjectMultiBulkReply(Connection.java:236)
      3. redis.clients.jedis.BinaryJedis.zscan(BinaryJedis.java:3608)
      3 frames
    3. Spring Data Redis
      ConvertingCursor.hasNext
      1. org.springframework.data.redis.connection.jedis.JedisConnection$3.doScan(JedisConnection.java:2998)
      2. org.springframework.data.redis.core.KeyBoundCursor.doScan(KeyBoundCursor.java:39)
      3. org.springframework.data.redis.core.ScanCursor.scan(ScanCursor.java:85)
      4. org.springframework.data.redis.core.ScanCursor.hasNext(ScanCursor.java:168)
      5. org.springframework.data.redis.core.ConvertingCursor.hasNext(ConvertingCursor.java:56)
      5 frames