JavaEE 应用程序中的 ChronicleMap 问题
ChronicleMap issue in JavaEE app
我成功将 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)
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<>();
}
}
}
当运行在javaEE容器中时,你能检查一下你的类路径上是否有另一个版本的jna吗?
Chronicle-Map 是针对 jna 4.4.0 版本构建的;如果您的容器在类路径上有不同的版本,这可能是您看到的异常的原因。
我成功将 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) 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<>();
}
}
}
当运行在javaEE容器中时,你能检查一下你的类路径上是否有另一个版本的jna吗?
Chronicle-Map 是针对 jna 4.4.0 版本构建的;如果您的容器在类路径上有不同的版本,这可能是您看到的异常的原因。