2011-12-21 3 views
7

Lucene의 경우 Luke과 같은 도구 상자를보고, 진단하고 편집하는 등의 작업을 수행 할 수 있습니다. EhCache (diskPersistent를 활성화 한 경우)와 비슷한 툴 (최소한 디스플레이)이 있습니까?EhCache 용 뷰어

답변

0

나는 그러한 도구를 모르며 파일 형식은 실제로 지정되지 않았거나 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); 
    } 

    }