Я пытаюсь написать класс, который бы отслеживал все запросы Ehcache GET. Для зацикленной производительности - это будет включено только для целей отладки.
Я вижу следующие три варианта:
1) написать реализацию net.sf.ehcache.event.CacheEventListener
. Это был бы мой предпочтительный способ, но он имеет только PUT / REMOVE / etc. крючки. Нет ПОЛУЧИТЬ. Doh!
2) написать реализацию net.sf.ehcache.statistics.CacheUsageListener
. Проблема с этим подходом состоит в том, что этот интерфейс больше предназначен для статистики и даже не предоставляет доступа к таким вещам, как текущий ключ / элемент кэша, поэтому мне пришлось бы совершать ужасные хаки (подумайте: совместное использование состояния через ThreadLocal
), чтобы добиться того, что Я хочу. Тьфу!
3) написать оболочку Ehcache и направить через нее все запросы. Это довольно болезненно, так как мы используем Ehcache по-разному (с Hibernate и без него), что означает, что мне придется писать разные оболочки для всех этих разных случаев. Добавляет трудности обслуживания и не совсем точен, так как невозможно узнать, например, попала ли операция GET в устаревшую запись или нет.
Есть ли другие варианты, которые я пропустил?