2 votes

Problème de ChronicleMap dans une application JavaEE

```html

J'ai réussi à mettre à niveau une application JavaSE8 vers ChronicleMap 3.14.1. J'ai une application JavaEE7 qui est juste une façade pour l'application JavaSE8.

Lors de l'appel d'une méthode depuis JavaEE7 pour créer un chronicleMap, un bug est levé. Il semble que "net.openhft.chronicle.hash.impl.util.jna.PosixMsync" ne soit pas chargé !

Ce bug n'est pas levé dans l'application JavaSE8.

Toute correction ou suggestion est la bienvenue.

Merci d'avance.

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)

L'exception est levée à : builder.createOrRecoverPersistedTo(mapFile);

 public static  Map mapBuilder(Class key, Class value, Param param, File mapFile) {

            ChronicleMapBuilder 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<>();
                }
            }
        }

```

2voto

Mark Price Points 276

Pouvez-vous vérifier s'il y a une autre version de jna sur votre classpath lors de l'exécution dans le conteneur JavaEE?

Chronicle-Map est construit contre la version 4.4.0 de jna; si votre conteneur a une version différente sur le classpath, cela pourrait être une raison de l'exception que vous pouvez voir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X