createCache 在非静态方法中失败
createCache fails in non-static method
我正在使用 CacheStoreFactory 实现和 CacheStoreSessionListener 创建缓存。如果我使用这些字段设置 CacheConfiguration 然后调用 createCache 但在 INSTANCE 方法中我得到这个异常:
Exception in thread "main" javax.cache.CacheException: class
org.apache.ignite.IgniteCheckedException: Failed to validate cache
configuration (make sure all objects in cache configuration are
serializable): LongCache
在静态方法中,不会发生这种情况。这可以通过修改示例中的 CacheJdbcStoreExample.java 轻松重现。这是在 Ignite 1.30
下发生的
您很可能将工厂或侦听器声明为匿名 class。匿名 classes 始终包含对父 class 的引用(在您的情况下为 LongCache
)。所以如果工厂在 LongCache
实例的上下文中被序列化,这个实例也会被序列化。在静态方法的情况下,这个实例不存在,因此一切正常。
我建议将匿名 classes 转换为私有静态 classes。这将使您更好地控制序列化的内容。
我正在使用 CacheStoreFactory 实现和 CacheStoreSessionListener 创建缓存。如果我使用这些字段设置 CacheConfiguration 然后调用 createCache 但在 INSTANCE 方法中我得到这个异常:
Exception in thread "main" javax.cache.CacheException: class org.apache.ignite.IgniteCheckedException: Failed to validate cache configuration (make sure all objects in cache configuration are serializable): LongCache
在静态方法中,不会发生这种情况。这可以通过修改示例中的 CacheJdbcStoreExample.java 轻松重现。这是在 Ignite 1.30
下发生的您很可能将工厂或侦听器声明为匿名 class。匿名 classes 始终包含对父 class 的引用(在您的情况下为 LongCache
)。所以如果工厂在 LongCache
实例的上下文中被序列化,这个实例也会被序列化。在静态方法的情况下,这个实例不存在,因此一切正常。
我建议将匿名 classes 转换为私有静态 classes。这将使您更好地控制序列化的内容。