JavaEE应用程序中的ChronicleMap问题

时间:2017-09-04 13:59:27

标签: java chronicle-map

我成功将JavaSE8应用程序升级到ChronicleMap 3.14.1。 我有一个JavaEE7应用程序,它只是JavaSE8应用程序的外观。

从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)     在   net.openhft.chronicle.hash.impl.VanillaChronicleHash.msync(VanillaChronicleHash.java:878)     在   net.openhft.chronicle.hash.impl.VanillaChronicleHash.msync(VanillaChronicleHash.java:864)     在   net.openhft.chronicle.map.ChronicleMapBuilder.commitChronicleMapReady(ChronicleMapBuilder.java:417)     在   net.openhft.chronicle.map.ChronicleMapBuilder.createWithNewFile(ChronicleMapBuilder.java:1732)     在   net.openhft.chronicle.map.ChronicleMapBuilder.createWithFile(ChronicleMapBuilder.java:1589)     在   net.openhft.chronicle.map.ChronicleMapBuilder.recoverPersistedTo(ChronicleMapBuilder.java:1532)     在   net.openhft.chronicle.map.ChronicleMapBuilder.createOrRecoverPersistedTo(ChronicleMapBuilder.java:1515)     在   net.openhft.chronicle.map.ChronicleMapBuilder.createOrRecoverPersistedTo(ChronicleMapBuilder.java:1506)     在   net.openhft.chronicle.map.ChronicleMapBuilder.createOrRecoverPersistedTo(ChronicleMapBuilder.java:1500)     在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<>();
                }
            }
        }

1 个答案:

答案 0 :(得分:2)

在javaEE容器中运行时,可以检查类路径上是否有其他版本的jna?

Chronicle-Map是针对jna的4.4.0版本构建的;如果您的容器在类路径上有不同的版本,那么这可能是您可以看到异常的原因。