【问题标题】:Viewer for EhCache IndexEhCache 索引查看器
【发布时间】:2012-01-24 22:50:14
【问题描述】:

对于 Lucene,我们有一个很好的工具箱,比如 Luke 来查看、诊断、编辑等。我们是否有类似的工具(至少显示)用于 EhCache(当我们启用 diskPersistent 时)?

【问题讨论】:

    标签: ehcache viewer


    【解决方案1】:

    我不知道有任何这样的工具,文件格式并没有真正指定或定义为 API。基本上,EhCache 将序列化对象写入数据和索引文件。如果您直接访问这些文件,您可以阅读并显示它们。为了让你开始,这里有一个程序作为起点:

      import java.io.ByteArrayInputStream;
      import java.io.EOFException;
      import java.io.FileInputStream;
      import java.io.ObjectInputStream;
      import java.io.RandomAccessFile;
      import java.lang.reflect.Field;
    
      import net.sf.ehcache.Element;
      import net.sf.ehcache.store.disk.DiskStorageFactory.DiskMarker;
    
      public class EhcacheViewer
      {
    
         public static void main( String[] args ) throws Exception
         {
            final RandomAccessFile data = new RandomAccessFile( "cache/my-cache.data", "r" );
            ObjectInputStream ois = new ObjectInputStream( new FileInputStream( "cache/my-cache.index" ) );
            try
            {
               while( true )
               {
                  Object key = ois.readObject();
                  DiskMarker marker = (DiskMarker) ois.readObject();
                  long pos = getPosition( marker );
                  int size = marker.getSize();
                  data.seek( pos );
                  byte[] value = new byte[size];
                  data.readFully( value );
                  ObjectInputStream ois2 = new ObjectInputStream( new ByteArrayInputStream( value ) );
                  Element element = (Element) ois2.readObject();
                  System.out.println( "Element: " + element );
               }
            }
            catch( EOFException e )
            {
               // ...
            }
            ois.close();
            data.close();
         }
    
         private static long getPosition( DiskMarker marker ) throws Exception
         {
            Field field = marker.getClass().getDeclaredField( "position" );
            field.setAccessible( true );
            return (Long) field.get( marker );
         }
    
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多