Overview
En esta sección, puedes identificar los cambios que debes hacer en tu aplicación para actualizar tu controlador a una nueva versión.
Antes de actualizar, realiza las siguientes acciones:
Asegúrese de que la nueva versión del driver sea compatible con las versiones del servidor MongoDB a las que su aplicación se conecta y con el Entorno de Ejecución de Java (JRE) en el que se ejecuta la aplicación. Para ver la información de compatibilidad, consulta el 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 tu aplicación podría requerir cuando actualices las versiones del controlador en el futuro, utiliza el Stable API.
cambio disruptivo
Un cambio disruptivo es una modificación en una convención o comportamiento en una versión específica del driver que podría impedir que tu aplicación funcione correctamente si no se aborda antes de actualizarla.
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.
Versión 5.5 cambio disruptivo
El controlador ya no es compatible con la versión 4.0 del servidor MongoDB. Para obtener más información sobre este cambio, consulte la sección Cambios en el soporte de versión de controlador 5.5 para servidores.
Versión 5.2 cambio disruptivo
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 .
Revisa la versionado de la dependencia mongodb-crypt para que coincida con el versionado de los drivers JVM. Versiones futuras 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.
Versión 5.1 cambio disruptivo
Esta versión del driver introduce los siguientes cambios disruptivos:
Al usar el mecanismo de autenticación
MONGODB-OIDC, no se pueden incluir caracteres de coma en el valor de la cadena de conexiónauthMechanismProperties. Si el valor deauthMechanismPropertiesincluye una coma, pásalo como opción de conexión en una instancia deMongoClientSettings.
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 su segundo parámetro en lugar del tipoint. De manera similar, el constructor ahora acepta un valor de tipoLongcomo su tercer parámetro en lugar de tipoInteger. Debido a que este cambio rompe la compatibilidad binaria, recompila 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
Cambia el tipo de datos del parámetro de duración de tiempo de espera
connectTimeoutpara los métodosSocketSettings.Builder.connectTimeout()ySocketSettings.Builder.readTimeout(). El tipo de datos de este parámetro ahora eslongen vez 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.Remueve el método
Filters.eqFull(), lanzado exclusivamente enBeta, que te permitía construir un filtro de igualdad al realizar una búsqueda vectorial. En su lugar, puedes usar el métodoFilters.eq()al crear una instancia del tipoVectorSearchOptions, como se muestra en el siguiente código:val opts = vectorSearchOptions().filter(eq("x", 8)) Cambia cómo
ClusterSettingscalcula la configuraciónClusterConnectionMode, haciéndola más coherente al utilizar el nombre del set de réplicas especificado, independientemente de cómo esté configurado. Anteriormente, el driver solo consideraba el nombre del set de réplicas si se establecía en la cadena de conexión.Por ejemplo, las siguientes dos muestras de código devuelven ambos el valor
ClusterConnectionMode.MULTIPLE. Anteriormente, el segundo ejemplo devolvióClusterConnectionMode.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(), utiliza el método de instanciagetByName()dejava.net.InetAddress.En lugar de
getSocketAddresses(), utiliza el método de instanciagetAllByName()dejava.net.InetAddress.Remueve los métodos UnixServerAddress
getSocketAddress()ygetUnixSocketAddress().En lugar de
getSocketAddress(), utiliza 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.Remueve la interfaz
Parameterizable. En lugar de implementar esta interfaz en un tipoCodecpersonalizado, sobrescriba el métodoCodecProvider.get()en elCodecProviderdel códec si el códec está destinado a 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)
Remueve 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, ...)
Se remueven 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.
Agrega la opción
authorizedCollectionpara el comandolistCollections. Esto introduce un cambio binario radical en el métodoMongoDatabase.listCollectionNames(). Este cambio no requiere ninguna modificación al código fuente, pero se debe recompilar cualquier código que utilice este método.Remueve los siguientes métodos y tipos relacionados con la interfaz Stream:
MongoClientSettings.Builder.streamFactoryFactory()método. Usa el métodoMongoClientSettings.Builder.transportSettings()en su lugar.MongoClientSettings.getStreamFactoryFactory()método. Usa 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 disruptivos de las versiones anteriores del driver, consulta las Notas de la versión en el repositorio Github de mongo-java-driver.
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 driver deja de ofrecer soporte para una versión del servidor de MongoDB después de alcanzar el fin de vida útil (EOL).
Para obtener más información sobre el soporte de MongoDB para productos EOL, consulta la Política de soporte para versiones anteriores.
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.