Overview
En esta sección, puede identificar los cambios que debe realizar en su aplicación para actualizar su controlador a una nueva versión.
Antes de actualizar, realiza las siguientes acciones:
Asegúrese de que la nueva versión del controlador sea compatible con las versiones del servidor MongoDB a las que se conecta su aplicación y con el entorno de ejecución de Java (JRE) en el que se ejecuta. Para ver información sobre compatibilidad, consulte Página de Compatibilidad.
Aborde cualquier cambio disruptivo entre la versión actual del driver que utiliza su aplicación y su versión de actualización planificada en la sección Cambios importantes. Para aprender más sobre los cambios de compatibilidad de las versiones del servidor MongoDB, consulte la sección Cambios de compatibilidad de lanzamiento del servidor.
Tip
Para minimizar la cantidad de cambios que su aplicación podría requerir cuando actualice las versiones del controlador en el futuro, utilice el Stable API.
Cambios radicales
Un cambio importante es una modificación en una convención o comportamiento de una versión específica del controlador que podría impedir que su aplicación funcione correctamente si no se soluciona antes de la actualización.
Los cambios disruptivos en esta sección se categorizan según la versión del driver que los ha introducido. Al actualizar versiones de drivers, soluciona todos los cambios disruptivos entre la versión actual y la versión de actualización. Por ejemplo, si vas a actualizar el driver de la v4.0 a la v4.7, soluciona todos los cambios disruptivos de la versión después de la v4.0 incluyendo cualquiera listado para la v4.7.
Cambios importantes en la versión 5.5
El controlador ya no es compatible con la versión 4.0 de MongoDB Server. Para obtener más información sobre este cambio, consulta la seccion Cambios en soporte de driver Version 5.5 servidor.
Cambios importantes en la versión 5.2
Esta versión del driver introduce los siguientes cambios disruptivos:
Elimina el soporte para MongoDB Server v3.6. Para obtener más información sobre este cambio, consulta la sección Cambios en la compatibilidad con servidores de la versión del controlador 5.2 .
Se revisa el control de versiones de las dependencias de mongodb-crypt para que coincida con el control de versiones de los controladores de JVM. Futuras versiones de
mongodb-cryptSe lanzará junto con el controlador y compartirá el mismo número de versión. Debe actualizar su dependenciamongodb-crypta la versión v5.2.0 al actualizar su controlador para esta versión.
Cambios importantes en la versión 5.1
Esta versión del driver introduce los siguientes cambios disruptivos:
Al utilizar el mecanismo de autenticación
MONGODB-OIDC, no debe incluir caracteres de coma en el valor de la cadena de conexiónauthMechanismProperties.
Version 5.0 Cambios disruptivos
Esta versión del driver introduce los siguientes cambios disruptivos:
Se introducen los siguientes cambios en la clase
ConnectionId:El constructor
ConnectionIdahora acepta un valor de tipolongcomo segundo parámetro en lugar deint. De igual forma, ahora acepta un valor de tipoLongcomo tercer parámetro en lugar deInteger. Dado que este cambio rompe la compatibilidad binaria, recompile cualquier código existente que llame al constructorConnectionId.El método
withServerValue()ahora acepta un parámetro de tipolongen lugar del tipoint. Debido a que este cambio rompe la compatibilidad binaria, debes recompilar cualquier código que llame al métodowithServerValue().El método
getServerValue()ahora regresa un valor de tipoLongen vez de tipoInteger. De manera similar, el métodogetLocalValue()devuelve un valor de tipolongen lugar de tipoint. Dado que este cambio rompe tanto la compatibilidad binaria como la de origen, actualice cualquier código fuente que utilice estos métodos y vuelva a compilar su binario.
Reemplaza las siguientes anotaciones de registros del paquete
org.bson.codecs.record.annotationscon anotaciones del mismo nombre del paqueteorg.bson.codecs.pojo.annotations:BsonIdBsonPropertyBsonRepresentation
Se cambia el tipo de dato del parámetro de duración del tiempo de espera
connectTimeoutpara los métodosSocketSettings.Builder.connectTimeout()ySocketSettings.Builder.readTimeout(). El tipo de dato de este parámetro ahora eslongen lugar deint.En versiones anteriores, este parámetro es de tipo
intpara ambos métodos. Este cambio afecta la compatibilidad binaria y requiere recompilación, pero no requiere cambios en el código.Se elimina el método
Filters.eqFull(), disponible exclusivamente enBeta, que permitía construir un filtro de igualdad al realizar una búsqueda vectorial. En su lugar, se puede usar el métodoFilters.eq()al instanciar un tipoVectorSearchOptions, como se muestra en el siguiente código:VectorSearchOptions opts = vectorSearchOptions().filter(eq("x", 8));
Elimina la clase implícita
org.mongodb.scala.ObservableImplicits.ToSingleObservableVoid. El tipoorg.reactivestreams.Publisher[Void]ya no se convierte automáticamente aorg.mongodb.scala.SingleObservable[Void]. La API también exponeorg.mongodb.scala.Observable[Unit]en lugar deorg.mongodb.scala.Observable[Void].Para obtener más información, consulte el rasgo Observable en la documentación de la API de Scala.
Cambia la forma en que
ClusterSettingscalcula la configuraciónClusterConnectionMode, haciéndolo más consistente al usar el nombre del conjunto de réplicas especificado, independientemente de su configuración. Anteriormente, el controlador solo consideraba el nombre del conjunto de réplicas si estaba definido en la cadena de conexión.Por ejemplo, los dos ejemplos de código siguientes devuelven el valor
ClusterConnectionMode.MULTIPLE. Anteriormente, el segundo ejemplo devolvíaClusterConnectionMode.SINGLE.ClusterSettings.builder() .applyConnectionString(new ConnectionString("mongodb://127.0.0.1:27017/?replicaSet=replset")) .build() .getMode() ClusterSettings.builder() .hosts(Collections.singletonList( new ServerAddress("127.0.0.1", 27017) )) .requiredReplicaSetName("replset") .build() .getMode() BsonDecimal128los valores responden a las llamadas de métodos de la misma manera que los valoresDecimal128.BsonDecimal128.isNumber()ahora devuelvetrueyBsonDecimal128.asNumber()devuelve elBsonNumberequivalente.Remueve los métodos ServerAddress
getSocketAddress()ygetSocketAddresses().En lugar de
getSocketAddress(), utilice el método de instanciagetByName()dejava.net.InetAddress.En lugar de
getSocketAddresses(), utilice el método de instanciagetAllByName()dejava.net.InetAddress.Remueve los métodos UnixServerAddress
getSocketAddress()ygetUnixSocketAddress().En lugar de
getSocketAddress(), utilice el método de instanciagetByName()dejava.net.InetAddress.En lugar de
getUnixSocketAddress(), construya una instancia dejnr.unixsocket.UnixSocketAddress. Pasar la ruta completa del archivo del socket UNIX al constructor. Por defecto, MongoDB crea un archivo de socket UNIX situado en"/tmp/mongodb-27017.sock". Para obtener más información sobre la claseUnixSocketAddress, consulta la documentación de la API UnixSocketAddress.Elimina la interfaz
Parameterizable. En lugar de implementar esta interfaz en un tipoCodecpersonalizado, anule el métodoCodecProvider.get()en elCodecProviderdel códec si este está diseñado para un tipo parametrizado.Remueve el método
isSlaveOk()de las clasesReadPreferenceyTaggableReadPreference. Para comprobar si una preferencia de lectura permite leer de un miembro secundario de un set de réplicas, use losisSecondaryOk()métodos de estas clases en su lugar.Elimina los métodos auxiliares
DBCollection.getStats()yDBCollection.isCapped()para el comandocollStats. En lugar de estos métodos, puedes usar la etapa del pipeline de agregación$collStats.Elimina las clases
MapCodecyIterableCodec. En lugar deMapCodec, se debe usarMapCodecProvider. En lugar deIterableCodec, usarCollectionCodecProvider, oIterableCodecProviderpara los tiposIterableque no sean tiposCollection.Remueve los métodos
sharded()ynonAtomic()de las clasesMapReducePublisheryMapReduceIterable.Elimina los siguientes métodos para su uso con índices
geoHaystack:Indexes.geoHaystack()IndexOptions.getBucketSize()IndexOptions.bucketSize()
En su lugar, puede usar la
$geoNearetapa de canalización de agregación o un operador de consulta geoespacial en un 2índice d. Para obtener más información, consulte la página Consultas geoespaciales del manual de MongoDB Server.Elimina la opción
oplogReplayde las operaciones de búsqueda. Los siguientes métodosoplogReplayya no están disponibles:DBCursor.oplogReplay()DBCollectionFindOptions.isOplogReplay()DBCollectionFindOptions.oplogReplay()FindPublisher.oplogReplay()FindIterable.oplogReplay()
Elimina los siguientes constructores
Exception:MongoBulkWriteException(BulkWriteResult, List<BulkWriteError>, WriteConcernError, ServerAddress)MongoCursorNotFoundException(long, ServerAddress)MongoQueryException(ServerAddress, int, String)MongoQueryException(ServerAddress, int, String, String)MongoQueryException(MongoCommandException)
Elimina las siguientes sobrecargas para el método
BulkWriteResult.acknowledged():acknowledged(Type, int, List<BulkWriteUpsert>)acknowledged(Type, int, Integer, List<BulkWriteUpsert>)acknowledged(int, int, int, Integer, List<BulkWriteUpsert>)
Elimina los siguientes constructores
ChangeStreamDocument:ChangeStreamDocument(String, BsonDocument, BsonDocument, BsonDocument, TDocument, TDocument, BsonDocument, ...)ChangeStreamDocument(String, BsonDocument, BsonDocument, BsonDocument, TDocument, BsonDocument, BsonTimestamp, ...)ChangeStreamDocument(OperationType, BsonDocument, BsonDocument, BsonDocument, TDocument, BsonDocument, BsonTimestamp, ...)
Elimina los siguientes constructores para eventos:
CommandEvent(RequestContext, int, ConnectionDescription, String)CommandEvent(int, ConnectionDescription, String)CommandEvent(RequestContext, long, int, ConnectionDescription, String)CommandFailedEvent(RequestContext, int, ConnectionDescription, String, long, Throwable)CommandFailedEvent(int, ConnectionDescription, String, long, Throwable)CommandStartedEvent(RequestContext, int, ConnectionDescription, String, String, BsonDocument)CommandStartedEvent(int, ConnectionDescription, String, String, BsonDocument)CommandSucceededEvent(RequestContext, int, ConnectionDescription, String, BsonDocument, long)CommandSucceededEvent(int, ConnectionDescription, String, BsonDocument, long)ConnectionCheckedInEvent(ConnectionId)ConnectionCheckedOutEvent(ConnectionId, long)ConnectionCheckedOutEvent(ConnectionId)ConnectionCheckOutFailedEvent(ServerId, long, Reason)ConnectionCheckOutFailedEvent(ServerId, Reason)ConnectionCheckOutStartedEvent(ServerId)ConnectionReadyEvent(ConnectionId)ServerHeartbeatFailedEvent(ConnectionId, long, Throwable)ServerHeartbeatSucceededEvent(ConnectionId, BsonDocument, long)
Remueve la opción
errorLabelsde la claseWriteConcernError. Esto incluye los métodosaddLabel()ygetErrorLabels()y el constructor que incluye un parámetroerrorLabels. En su lugar, puedes utilizar las etiquetas de error incluidas en el objetoMongoExceptionque contiene elWriteConcernError.Elimina las siguientes clases del paquete
com.mongodb.event:ConnectionAddedEventConnectionPoolOpenedEventConnectionRemovedEventClusterListenerAdapterConnectionPoolListenerAdapterServerListenerAdapterServerMonitorListenerAdapter
El controlador también elimina los siguientes métodos relacionados de la interfaz
ConnectionPoolListener:connectionAdded()connectionPoolOpened()connectionRemoved()
Para obtener más información sobre el paquete
com.mongodb.event, consulte la documentación de la API.
Añade la opción
authorizedCollectional comandolistCollections. Esto introduce un cambio binario importante en el métodoMongoDatabase.listCollectionNames(). Este cambio no requiere modificaciones en el código fuente, pero es necesario recompilar cualquier código que utilice este método.Elimina los siguientes métodos y tipos relacionados con la interfaz Stream:
MongoClientSettings.Builder.streamFactoryFactory()método. Utilice el métodoMongoClientSettings.Builder.transportSettings()en su lugar.MongoClientSettings.getStreamFactoryFactory()método. Utilice el métodoMongoClientSettings.getTransportSettings()en su lugar.NettyStreamFactoryFactoryclase. En su lugar, llame al métodoTransportSettings.nettyBuilder()para crear un objetoNettyTransportSettings. Luego, llama al métodoMongoClientSettings.Builder.transportSettings()para aplicar la configuración.NettyStreamFactoryclase.AsynchronousSocketChannelStreamFactoryclase.AsynchronousSocketChannelStreamFactoryFactoryclase.BufferProviderinterfaz.SocketStreamFactoryclase.Streaminterfaz.StreamFactoryinterfaz.StreamFactoryFactoryinterfaz.TlsChannelStreamFactoryFactoryclase.
Cambios importantes de la versión 4.8
Esta versión del driver introduce los siguientes cambios disruptivos:
Se termina el soporte para conectarse a versiones de MongoDB Server v3.4 y anteriores. Para obtener más información sobre este cambio, consulta la sección Cambios en la compatibilidad con servidores de la versión del controlador 4.8 .
Requiere agregar una dependencia explícita en el módulo
org.bson.codecs.recordsi tu aplicación implementa el controlador en un contenedor OSGi y depende del controlador para codificar y decodificar registros Java.RecordCodecdeserializa POJO y clases de registro que se especifican como parámetros de tipo de camposListoMapa los tipos de registro y POJO correspondientes. Anteriormente, este "codec" los deserializaba como valores deDocument.Por ejemplo, las siguientes definiciones de clase de registro muestran un registro
Bookque contiene unListque recibe un parámetro de tipoChapter:public record Book(String title, List<Chapter> chapters) {} public record Chapter(Integer number, String text) {} A partir de esta versión, el códec deserializa los datos en las clases de registro
ListenChapteren lugar de valoresDocument.
Cambios disruptivos en la versión 4.7
Esta versión del driver introduce los siguientes cambios disruptivos:
La API del generador
setWindowFieldsya no está en beta. El nuevo método del generador de etapas de pipeline rompe la compatibilidad binaria y de código fuente. Consulta la documentación de la API Agregados para obtener información sobre las nuevas firmas de métodossetWindowFields().Si tu aplicación utiliza este generador en una versión anterior a la v4.7, actualiza tu código fuente para utilizar la nueva firma del método y reconstruye tu binario.
Cambios disruptivos en la versión 4.2
Esta versión del driver introduce los siguientes cambios disruptivos:
Actualiza la clase
ObjectIdy su camposerialVersionUIDpara utilizar un nuevo formato que minimice los problemas de compatibilidad de serialización entre diferentes versiones del controlador.Si una aplicación que usa la versión 4.2 o posterior del controlador intenta realizar la Serialización de Objetos de Java en cualquier objeto que contenga un
ObjectIdy haya sido serializado por una versión anterior del controlador, Java lanza unInvalidClassException.Para aprender más sobre la Serialización de Objetos en Java, consulta Objetos Serializables en la documentación de Java.
Versión 4.0 cambios disruptivos
Esta versión del driver introduce los siguientes cambios disruptivos:
Se remueven varias clases y métodos marcados como obsoletos en la versión 3.12.
Modifica los métodos auxiliares de inserción para devolver un objeto
InsertOneResultoInsertManyResulten lugar devoid.Modifica los métodos
toJson()en las clasesBsonDocument,DocumentyDbObjectpara devolver un formato JSON flexible en lugar de uno estricto. Esto facilita la lectura de los documentos JSON, pero puede dificultar la identificación de la información de tipo BSON, como la diferencia entre un entero de 32y uno de 64bits. Si su aplicación utiliza el formato JSON estricto, utilice el modo estricto al leer o escribir datos.Cambia la representación BSON predeterminada de los valores
java.util.UUIDdeJAVA_LEGACYaUNSPECIFIED. Las aplicaciones que almacenan o recuperan valores UUID deben especificar explícitamente qué representación usar. Puede especificar la representación en la propiedaduuidRepresentationde un objetoMongoClientSettings.La representación UUID que especifique controla estrictamente cómo el controlador decodifica los UUID. En la versión 4.0, la representación
JAVA_LEGACYsolo funciona con el subtipo 3. En versiones anteriores del controlador, si se especificaba la representaciónJAVA_LEGACY, este decodificaba los objetos binarios de los subtipos 3 y 4 como UUID.Para obtener una lista de los miembros de la
UuidRepresentationenumeración, consulte la 4.0 documentación de la API v.El pool de conexiones ya no restringe el número de hilos de la cola de espera ni de tareas asincrónicas que requieran una conexión a MongoDB. La aplicación regula las solicitudes según sea necesario en lugar de depender de que el driver lance un
MongoWaitQueueFullException.El driver ya no registra utilizando el paquete
java.util.loggingy solo admite el framework de registro SLF4J.Se eliminaron los drivers integrados y Android. Si tu aplicación depende de estos controladores, debes seguir usando una versión 3.x del controlador Java.
Los uber JAR del controlador Java,
mongo-java-driverymongodb-driver, ya no se publican. Si tu aplicación depende de estos uber JARs, remuévelos como dependencia y utiliza uno de los siguientes paquetes en su lugar:Si su aplicación utiliza la API actual, agregue el paquete
mongodb-driver-synccomo dependencia.Si tu aplicación usa la API heredada, añade el paquete
mongodb-driver-legacycomo dependencia.
Varias clases introducen rupturas en la compatibilidad binaria, como el cambio en la firma del método de los métodos asistentes de inserción. Recompila cualquier clase que esté vinculada al driver contra esta versión o posteriores para asegurarte de que continúen funcionando.
Cambios en la compatibilidad de la versión del servidor
Un cambio de compatibilidad en el lanzamiento de un servidor es una modificación en el controlador Scala que deja de tener soporte para un conjunto de versiones de MongoDB Server.
El driver interrumpe el soporte para una versión de MongoDB Server después de que esta llegue a su final de vida útil (EOL).
Para obtener más información sobre el soporte de MongoDB para productos EOL, consulte la Política de soporte heredado.
Versión del controlador 5.5 Cambios en el soporte del servidor
El5.5 controlador v deja de ser compatible con MongoDB Server.4.0 Para usar el5.5 controlador v, debe conectarse a MongoDB Server 4.2 o posterior. Para saber cómo actualizar su implementación de MongoDB Server, consulte las Notas de la versión en el manual de MongoDB Server.
Versión del servidor 8.1 Cambios de soporte
No se puede usar una versión 3.x del driver de Scala para conectarse a una implementación de MongoDB que ejecute la versión8.1 del MongoDB Server. A partir de la versión v8.1 de MongoDB Server, el comando buildinfo requiere autenticación, lo que causa una incompatibilidad con la v3.x driver.
Versión del controlador 5.2 Cambios en el soporte del servidor
El5.2 controlador v deja de ser compatible con MongoDB Server.3.6 Para usar el5.2 controlador v, debe conectarse a MongoDB Server 4.0 o posterior. Para saber cómo actualizar su implementación de MongoDB Server, consulte las Notas de la versión en el manual de MongoDB Server.
Versión del controlador 4.8 Cambios en el soporte del servidor
El4.8 controlador v ya no es compatible con MongoDB Server 3.4 y versiones anteriores. Para usar el4.8 controlador v, debe conectarse a MongoDB Server 3.6 o versiones posteriores. Para saber cómo actualizar su implementación de MongoDB Server, consulte las Notas de la versión en el manual de MongoDB Server.