简体   繁体   中英

MongoDB init throw in bootstrap java.lang.NoClassDefFoundError: com/mongodb/client/internal/SimpleMongoClient

I migrate a MongoDB driver to Mongo 5 version. In my project we used before this library

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>org.mongodb.morphia</groupId>
    <artifactId>morphia</artifactId>
    <version>1.3.2</version>
</dependency>

Replace by these library :

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.4.0</version>
</dependency>
<dependency>
    <groupId>dev.morphia.morphia</groupId>
    <artifactId>core</artifactId>
    <version>1.6.1</version>
</dependency>

We have Java 8 version so we can't use the version 2.0 of Morphia because it's work from Java 11. We use builder for Mongo client options and in the creation of these options a NoClassDefFoundError on SimpleMongoClient.

MongoSupport :

public void init() {
        logger.info("MongoDaoSupport :: Start init mongodb connection");
        Builder builder = MongoClientOptions.builder()
            .connectionsPerHost(Integer.parseInt(connectionsPerHost));

        if (Boolean.parseBoolean(readSecondary)) {
            builder.readPreference(ReadPreference.secondaryPreferred());
        }

        List<ServerAddress> seeds = new ArrayList<>();
        if (uri.contains(",")) {
            for (String s : uri.split(",")) {
                seeds.add(new ServerAddress(s));
            }
        } else {
            seeds.add(new ServerAddress(uri));
        }

        MongoClient mongoClient = new MongoClient(seeds, MongoCredential.createCredential(username, connectDB, password.toCharArray()), builder.build());

        Morphia morphia = new Morphia();
        morphia.getMapper().getOptions().setMapSubPackages(true);
        morphia.mapPackage(entitiesPackage);

        datastore = morphia.createDatastore(mongoClient, dbName);
        logger.info("Mongodb connected.");
    }

Log :

Caused by: java.lang.NoClassDefFoundError: com/mongodb/client/internal/SimpleMongoClient
    at omb.core.mongo.MongoDaoSupport.init(MongoDaoSupport.java:115)
    ... 39 more
Caused by: java.lang.ClassNotFoundException: com.mongodb.client.internal.SimpleMongoClient from [Module "deployment.my.ear.my-war.war" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:255)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
    ... 40 more

Morphia 2.2.x runs perfectly fine against MongoDB 5.0. You can find details at https://morphia.dev .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM