2017-09-04 128 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是真正的罪魁祸首。 –