2017-09-04 99 views
2

我成功將JavaSE8應用程序升級到ChronicleMap 3.14.1。 我有一個JavaEE7應用程序,它只是JavaSE8應用程序的一個外觀。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容器中運行時,你的類路徑上是否存在另一個版本的jna?

紀事地圖是針對jna的4.4.0版本構建的;如果你的容器在類路徑上有不同的版本,那可能是你能看到異常的原因。

+1

我正在使用glassfish 4.1。玻璃魚4.1.2中仍存在這個問題。在jboss wildfly中沒有問題10.對於如何在玻璃魚中修復它的任何建議是受歡迎的。謝謝 – kem

+0

您可以在容器中運行時檢查應用程序的類路徑。這將有助於查明是否有不同版本的jna是真正的罪魁禍首。 –