Когда у вас есть доступный Cache
, вы можете узнать типы ключей/значений, с которыми он был настроен, проверив его Configuration
:
// assuming you already have a Cache object available:
javax.cache.configuration.Configuration cacheConfig = cache.getConfiguration(Configuration.class);
Class keyType = cacheConfig.getKeyType();
Class valueType = cacheConfig.getValueType();
Теперь, чтобы получить сам Cache
при использовании JCache 1.0, если вы не знаете о его настроенных параметрах типов ключей/значений, единственным вариантом является использование cacheManager.getCache(name)
. Однако, в соответствии с JCache 1.0, это будет работать только в том случае, если Cache
не был сконфигурирован с какими-либо конкретными типами (т. е. Object.class
является типом ключа и значения), в противном случае произойдет сбой с IllegalArgumentException
(см. [1]). По сути, вы попали в порочный круг.
Это поведение было обновлено в JCache 1.1 (см. соответствующую проблему в [2]): теперь спецификация cacheManager.getCache(name)
ослаблена и может возвращать Cache
, если она существует с заданным именем, независимо от настроенных типов ключ/значение. Единственная загвоздка сейчас в том, что JCache 1.1 был выпущен всего пару дней назад (16 декабря 2017 г., см. [3]), поэтому, скорее всего, реализации еще не обновлены, чтобы разрешить такое поведение.
[1] https://github.com/jsr107/jsr107spec/blob/v1.0.0/src/main/java/javax/cache/CacheManager.java#L200-L201
[2] https://github.com/jsr107/jsr107spec/issues/340#issuecomment-254070714
[3] http://search.maven.org/#artifactdetails%7Cjavax.cache%7Ccache-api%7C1.1.0%7Cjar
person
Vassilis Bekiaris
schedule
18.12.2017