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 controlador que utiliza su aplicación y su versión de actualización planificada en la sección Cambios disruptivos. Para obtener más información sobre los cambios de compatibilidad en las versiones del servidor de MongoDB, consulta la sección Cambios de compatibilidad en las versiones 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 se está actualizando el driver de la versión5.0 a la versión5.5, se deben abordar todos los cambios disruptivos de las versiones posteriores a la v5.0, incluyendo cualquiera listado para la v5.5.
Cambios importantes en la versión 5.5
El controlador ya no es compatible con la versión del servidor MongoDB.4.0 Para obtener más información sobre este cambio, consulte la sección "Cambios en la compatibilidad del servidor con la versión 5.5 del controlador".
Cambios importantes en la versión 5.2
Esta versión del driver introduce los siguientes cambios disruptivos:
Se descarta la compatibilidad con el servidor MongoDB 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 publican junto con el controlador y comparten el mismo número de versión. Debe actualizar su dependencia demongodb-crypta 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 usar el mecanismo de autenticación
MONGODB-OIDC, no se pueden incluir comas en el valor de la cadena de conexiónauthMechanismProperties. Si el valorauthMechanismPropertiesincluye una coma, páselo como opción de conexión en una instanciaMongoClientSettings.
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:val opts = vectorSearchOptions().filter(eq("x", 8)) 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(ConnectionString("mongodb://127.0.0.1:27017/?replicaSet=replset")) .build() .mode ClusterSettings.builder() .hosts(listOf(ServerAddress("127.0.0.1", 27017))) .requiredReplicaSetName("replset") .build() .mode 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, puedes usar la etapa del pipeline de agregación
$geoNearo un operador del query geoespacial en un índice 2d. Para obtener más información, consulte la página Consultas geoespaciales en el manual del servidor de MongoDB.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.
Tip
Para ver los cambios más importantes de las versiones anteriores del controlador, consulte las Notas de la versión en el mongo-java-driver repositorio de GitHub.
Cambios en la compatibilidad de la versión del servidor
Un cambio de compatibilidad con una versión de servidor es una modificación del controlador Kotlin que descontinúa el soporte para un conjunto de versiones de servidores MongoDB.
El controlador deja de brindar soporte para una versión del servidor MongoDB una vez que alcanza el final de su 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 servidor 8.1 Cambios de soporte
No puedes utilizar una versión 3.x del controlador de Kotlin para conectarte a una implementación de MongoDB que ejecute el servidor de MongoDB a partir de la versión v8.1 o posterior. A partir de la versión v8.1 del servidor de MongoDB, el comando buildinfo requiere autenticación, lo que genera una incompatibilidad con la versión v3.x driver.
Versión del controlador 5.5 Cambios en el soporte del servidor
El controlador v5.5 deja de admitir el servidor MongoDB 4.0. Para usar la v5.5 driver, debe conectarse al servidor MongoDB 4.2 o posterior. Para aprender a cómo actualizar tu implementación de servidor MongoDB, consulta las notas de versión en el manual del servidor MongoDB.
Versión del controlador 5.2 Cambios en el soporte del servidor
El controlador v5.2 deja de admitir el servidor MongoDB 3.6. Para usar la v5.2 driver, debe conectarse al servidor MongoDB 4.0 o posterior. Para aprender a cómo actualizar tu implementación de servidor MongoDB, consulta las notas de versión en el manual del servidor MongoDB.
Versión del controlador 4.8 Cambios en el soporte del servidor
El controlador v4.8 deja de admitir el servidor MongoDB 3.4 y anteriores. Para usar la v4.8 driver, debe conectarse al servidor MongoDB 3.6 o posterior. Para aprender a cómo actualizar tu implementación de servidor MongoDB, consulta las notas de versión en el manual del servidor MongoDB.