2017-09-04 6 views
2

JavaSE8アプリをChronicleMap 3.14.1にアップグレードしました。 私はJavaEE8アプリのファサードにすぎないJavaEE7アプリを持っています。JavaEEアプリケーションのChronicleMap問題

JavaEE7からクロニクルマップを作成するメソッドを呼び出すと、バグが発生します。 "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(マップファイル)。

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では問題ありません。グラスフィッシュでそれを修正する方法についてのご意見は大歓迎です。 Thanks – kem

+0

コンテナで実行しているときに、アプリケーションのクラスパスを確認できますか?これは、jnaの別のバージョンがここでの真の犯人かどうかを特定するのに役立ちます。 –

関連する問題