在使用tomcat + redis 来处理分布式 session 的时候,需要以下的包:
commons-pool-1.5.4.jar
commons-pool2-2.0.jar
jedis-2.2.0.jar
tomcat-redis-session-manager-1.2-tomcat-7.jar (其他包都可以maven里面找,这个比较不好找,点击这里下载)
tomcat-util.jar
但是部署好启动tomcat的时候报异常:
严重: Begin event threw error
java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
com/radiadesign/catalina/session/RedisSessionManager.initializeDatabaseConnection()V @28: invokespecial
Reason:
Type 'redis/clients/jedis/JedisPoolConfig' (current frame, stack[3]) is not assignable to 'org/apache/commons/pool/impl/GenericObjectPool$Config'
Current Frame:
bci: @28
flags: { }
locals: { 'com/radiadesign/catalina/session/RedisSessionManager' }
stack: { 'com/radiadesign/catalina/session/RedisSessionManager', uninitialized 1, uninitialized 1, 'redis/clients/jedis/JedisPoolConfig', 'java/lang/String', integer, integer, 'java/lang/String' }
Bytecode:
0x0000000: 2abb 009d 59bb 009e 59b7 009f 2ab6 00a0
0x0000010: 2ab6 00a1 2ab6 00a2 2ab6 00a3 b700 a4b5
0x0000020: 0018 a700 134c 2bb6 00a5 bb00 3259 12a6
0x0000030: 2bb7 00a7 bfb1
Exception Handler Table:
bci [0, 34] => handler: 37
Stackmap Table:
same_locals_1_stack_item_frame(@37,Object[#276])
same_frame(@53)
原因是因为你使用的 jedis 的jar包版本太高,如2.7以上,更换这个包为jedis-2.2.0.jar , 重启启动,就不会报错了。