EventGet 50% off your ticket to MongoDB.local NYC on May 2. Use code Web50!Learn more >>
MongoDB Developer
Java
plus
Sign in to follow topics
MongoDB Developer Centerchevron-right
Developer Topicschevron-right
Languageschevron-right
Javachevron-right

Java Driver: Migrating From 4.11 to 5.0

Maxime Beugnet3 min read • Published Mar 01, 2024 • Updated Mar 01, 2024
MongoDBJava
Facebook Icontwitter iconlinkedin icon
Rate this article
star-empty
star-empty
star-empty
star-empty
star-empty

Introduction

The MongoDB Java driver 5.0.0 is now available!
While this version doesn't include many new features, it's removing a lot of deprecated methods and is preparing for the future.

How to upgrade

  • Ensure your server version is compatible with Java Driver 5.0.
  • Compile against the 4.11 version of the driver with deprecation warnings enabled.
  • Remove deprecated classes and methods.

Maven

Gradle

New features

You can read the full list of new features but here is a summary.

getElapsedTime()

The behavior of the method getElapsedTime() was modified in the following classes:
If you are using one of these methods, make sure to recompile and read the details.

authorizedCollection option

5.0.0 adds support for the authorizedCollection option of the listCollections command.

Scala

The org.mongodb.scala.Observable.completeWithUnit() method is now marked deprecated.

Breaking changes

One of the best ways to identify if your code will require any changes following the upgrade to Java Driver 5.0 is to compile against 4.11.0 with deprecation warnings enabled and remove the use of any deprecated methods and classes.
You can read the full list of breaking changes but here is a summary.

StreamFactoryFactory and NettyStreamFactoryFactory

The following methods and classes have been removed in 5.0.0:
  • streamFactoryFactory() method from MongoClientSettings.Builder
  • getStreamFactoryFactory() method from MongoClientSettings
  • NettyStreamFactoryFactory class
  • NettyStreamFactory class
  • AsynchronousSocketChannelStreamFactory class
  • AsynchronousSocketChannelStreamFactoryFactory class
  • BufferProvider class
  • SocketStreamFactory class
  • Stream class
  • StreamFactory class
  • StreamFactoryFactory class
  • TlsChannelStreamFactoryFactory class
If you configure Netty using the streamFactoryFactory(), your code is probably like this:
Now, you should use the TransportSettings.nettyBuilder():

ConnectionId

In 4.11, the class ConnectionId was using integers.
While this should have a very minor impact on your code, it's breaking binary and source compatibility. Make sure to rebuild your binary and you should be good to go.

Package update

Three record annotations moved from:
To:
So if you are using these annotations, please make sure to update the imports and rebuild.

SocketSettings is now using long

The first parameters of the two following builder methods in SocketSettings are now using a long instead of an integer.
This breaks binary compatibility but shouldn't require a code change in your code.

Filters.eqFull()

Filters.eqFull() was only released in Beta for vector search. It's now deprecated. Use Filters.eq() instead when instantiating a VectorSearchOptions.

ClusterConnectionMode

The way the driver is computing the ClusterConnectionMode is now more consistent by using a specified replica set name, regardless of how it's configured.
In the following example, both the 4.11 and 5.0.0 drivers were returning the same thing: ClusterConnectionMode.MULTIPLE.
But in this example, the 4.11 driver was returning ClusterConnectionMode.SINGLE instead of ClusterConnectionMode.MULTIPLE.

BsonDecimal128

The behaviour of BsonDecimal128 is now more consistent with the behaviour of Decimal128.

Conclusion

With the release of MongoDB Java Driver 5.0.0, it's evident that the focus has been on refining existing functionalities, removing deprecated methods, and ensuring compatibility for future enhancements. While the changes may necessitate some adjustments in your codebase, they pave the way for a more robust and efficient development experience.
Ready to upgrade? Dive into the latest version of the MongoDB Java drivers and start leveraging its enhanced capabilities today!
To finish with, don't forget to enable virtual threads in your Spring Boot 3.2.0+ projects! You just need to add this in your application.properties file:
Got questions or itching to share your success? Head over to the MongoDB Community Forum – we're all ears and ready to help!

Facebook Icontwitter iconlinkedin icon
Rate this article
star-empty
star-empty
star-empty
star-empty
star-empty
Related
Tutorial

Building a Real-Time, Dynamic Seller Dashboard on MongoDB


Apr 02, 2024 | 7 min read
Tutorial

Serverless Development with AWS Lambda and MongoDB Atlas Using Java


Jul 20, 2023 | 6 min read
Quickstart

Java - Mapping POJOs


Mar 01, 2024 | 5 min read
Quickstart

Creating a REST API for CRUD Operations With Quarkus and MongoDB


Apr 17, 2024 | 7 min read
Table of Contents
  • Introduction