2017-09-04 5 views
2

JavaSE8 앱을 ChronicleMap 3.14.1로 업그레이드했습니다. JavaSE8 앱의 외관 일 뿐인 JavaEE7 앱이 있습니다.JavaEE 앱의 ChronicleMap 문제

JavaEE7에서 chronicleMap을 만드는 메소드를 호출하면 버그가 발생합니다. "net.openhft.chronicle.hash.impl.util.jna.PosixMsync"가로드되지 않은 것 같습니다!

이 버그는 JavaSE8 응용 프로그램에서 발생하지 않습니다.

모든 수정이나 제안을 환영합니다.

미리 감사드립니다.

java.lang.NoSuchFieldError: C_LIBRARY_NAME at net.openhft.chronicle.hash.impl.util.jna.PosixMsync.(PosixMsync.java:39) at net.openhft.chronicle.hash.impl.VanillaChronicleHash.msync(VanillaChronicleHash.java:878) at net.openhft.chronicle.hash.impl.VanillaChronicleHash.msync(VanillaChronicleHash.java:864) at net.openhft.chronicle.map.ChronicleMapBuilder.commitChronicleMapReady(ChronicleMapBuilder.java:417) at net.openhft.chronicle.map.ChronicleMapBuilder.createWithNewFile(ChronicleMapBuilder.java:1732) at net.openhft.chronicle.map.ChronicleMapBuilder.createWithFile(ChronicleMapBuilder.java:1589) at net.openhft.chronicle.map.ChronicleMapBuilder.recoverPersistedTo(ChronicleMapBuilder.java:1532) at net.openhft.chronicle.map.ChronicleMapBuilder.createOrRecoverPersistedTo(ChronicleMapBuilder.java:1515) at net.openhft.chronicle.map.ChronicleMapBuilder.createOrRecoverPersistedTo(ChronicleMapBuilder.java:1506) at net.openhft.chronicle.map.ChronicleMapBuilder.createOrRecoverPersistedTo(ChronicleMapBuilder.java:1500) at com.kem.ae.util.Utilities.mapBuilder(Utilities.java:125)

예외 발생 위치 : builder.createOrRecoverPersistedTo (mapFile);

public static <K, V> Map<K, V> mapBuilder(Class<K> key, Class<V> value, Param param, File mapFile) { 

      ChronicleMapBuilder<K, V> builder = ChronicleMapBuilder.of(key, value) 
        .entries(param.getTotalSeq()); 

      if (key != Integer.class) { 
       builder = builder.averageKeySize(param.getEntrySize() 
         * (Exception.class.isAssignableFrom(value) ? 4 : 2)); 
      } 

      if (value != Double.class) { 
       builder = builder.averageValueSize(param.getEntrySize() 
         * (Exception.class.isAssignableFrom(value) ? 4 : 2)); 
      } 

      if (mapFile == null) { 
//    log.info("create in-memory off-heap map"); 
       return builder.create(); 
      } else { 
       try { 
//     log.info("create persisted off-heap map"); 
        return builder.createOrRecoverPersistedTo(mapFile); 
       } catch (IOException ex) { 
        log.error(ex.getMessage(), ex); 
        return new ConcurrentHashMap<>(); 
       } 
      } 
     } 
+0

파일의 맨 위에서 시도하십시오 : \t'static {System.setProperty ("jna.nosys", "true"); }' –

답변

2

javaee 컨테이너에서 실행할 때 classpath에 다른 버전의 jna가 있는지 확인할 수 있습니까?

크로니클 - 맵은 jna의 버전 4.4.0에 대해 작성되었습니다. 컨테이너에 클래스 패스에 다른 버전이있는 경우 이는 예외의 원인이 될 수 있습니다.

+1

글래스 피쉬 4.1을 사용하고 있습니다. 글래스 피쉬에 여전히 문제가 있습니다. 4.1.2. jboss wildfly 10에서는 아무런 문제가 없습니다. glassfish에서 수정하는 방법에 대한 제안은 언제나 환영합니다. 감사합니다 – kem

+0

컨테이너에서 실행 중일 때 응용 프로그램의 클래스 경로를 확인할 수 있습니까? 그러면 jna의 다른 버전이 실제 범인인지 여부를 정확히 알 수 있습니다. –