Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Actualizar versiones de los controladores

En esta sección, puedes identificar los cambios que podrías necesitar realizar en tu aplicación para actualizar tu driver a una nueva versión.

Antes de actualizar, realiza las siguientes acciones:

  • Asegúrese de que la nueva versión sea compatible con las versiones de MongoDB Server a las que se conecta su aplicación y con el Entorno de Ejecución de Java (JRE) en el que se ejecuta su aplicación. Consulta la Compatibilidad página para esta información.

  • Abordar cualquier cambio disruptivo entre la versión actual del driver que utiliza su aplicación y la versión de actualización planificada en la sección Cambios disruptivos. Para aprender más sobre los cambios de compatibilidad con la liberación del MongoDB Server, consulta la sección Cambios de compatibilidad con la liberación del servidor.

Tip

Para minimizar la cantidad de cambios que su aplicación podría requerir al actualizar versiones del controlador en el futuro, utilice la Stable API.

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 están categorizados según la versión del controlador que los introdujo. Al actualizar las versiones de los drivers, solucione todos los cambios disruptivos entre la versión actual y la versión actualizada. Por ejemplo, si está actualizando el controlador de la versión 4.0 a la 4.5, atienda todos los cambios disruptivos de la versión posterior a la v4.0, incluyendo cualquiera que esté en la lista bajo v4.5.

Esta versión del driver introduce los siguientes cambios disruptivos:

  • Introduce los siguientes cambios a la ConnectionId clase:

    • El constructor ConnectionId ahora acepta un valor de tipo long como su segundo parámetro en lugar del tipo int. De manera similar, el constructor ahora acepta un valor de tipo Long como su tercer parámetro en lugar de tipo Integer. Debido a que este cambio rompe la compatibilidad binaria, recompila cualquier código existente que llame al constructor ConnectionId.

    • El método withServerValue() ahora acepta un parámetro de tipo long en lugar de tipo int. Este cambio rompe la compatibilidad binaria, por lo que debes recompilar cualquier código que llame al método withServerValue().

    • El método getServerValue() ahora regresa un valor de tipo Long en vez de tipo Integer. De manera similar, el método getLocalValue() devuelve un valor de tipo long en lugar de tipo int. 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.annotations con anotaciones del mismo nombre del paquete org.bson.codecs.pojo.annotations:

    • BsonId

    • BsonProperty

    • BsonRepresentation

  • Cambia el tipo de dato del parámetro de duración de tiempo de espera en los métodos SocketSettings.Builder.connectTimeout() y SocketSettings.Builder.readTimeout(). El tipo de dato de este parámetro es ahora long en lugar de int.

    En versiones anteriores, este parámetro es de tipo int para ambos métodos. Este cambio interrumpe la compatibilidad binaria y requiere la recompilación, pero no requiere cambios en el código. Para ver un ejemplo que muestra cómo llamar a los métodos SocketSettings, consulte el Ejemplo SocketSettings en la guía Especificar la configuración de MongoClient.

  • Elimina el método Filters.eqFull(), lanzado exclusivamente en Beta, que permitía construir un filtro de igualdad al realizar una MongoDB Vector Search. Puedes usar el método Filters.eq() al instanciar un tipo VectorSearchOptions, 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. Esto significa que el tipo org.reactivestreams.Publisher[Void] ya no se convierte automáticamente a org.mongodb.scala.SingleObservable[Void]. La API también expone org.mongodb.scala.Observable[Unit] en lugar de org.mongodb.scala.Observable[Void].

    Para obtener más información, consulte el Observable trait en la documentación de Scala API.

  • Cambia la forma en que ClusterSettings calcula ClusterConnectionMode, haciéndolo más coherente al utilizar el nombre del set de réplicas especificado, independientemente de cómo esté configurado. Anteriormente, el nombre de set de réplicas solo se consideraba si lo establecía la cadena de conexión.

    Por ejemplo, en las siguientes dos muestras de código ambos devuelven el valor ClusterConnectionMode.MULTIPLE, mientras que anteriormente el segundo devolvía ClusterConnectionMode.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()
  • Cambia cómo los valores BsonDecimal128 responden a las llamadas de métodos, al responder de la misma manera que los valores Decimal128. En particular, BsonDecimal128.isNumber() ahora devuelve true, y BsonDecimal128.asNumber() devuelve el equivalente BsonNumber.

  • Remueve los métodos ServerAddress getSocketAddress() y getSocketAddresses().

    En lugar de getSocketAddress(), utiliza el método de instancia getByName() de java.net.InetAddress.

    En lugar de getSocketAddresses(), utiliza el método de instancia getAllByName() de java.net.InetAddress.

  • Remueve los métodos UnixServerAddress getSocketAddress() y getUnixSocketAddress().

    En lugar de getUnixSocketAddress(), construya una instancia de jnr.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 el UnixSocketAddress, consulta la documentación de la API UnixSocketAddress.

  • Remueve la interfaz Parameterizable. En lugar de implementar esta interfaz en un tipo Codec personalizado, sobrescriba el método CodecProvider.get() en el CodecProvider del códec si el códec está destinado a un tipo parametrizado.

  • Remueve el método isSlaveOk() de las clases ReadPreference y TaggableReadPreference. Para comprobar si una preferencia de lectura permite leer de un miembro secundario de un set de réplicas, use los isSecondaryOk() métodos de estas clases en su lugar.

  • Elimina los métodos asistentes DBCollection.getStats() y DBCollection.isCapped() para el comando collStats. En lugar de estos métodos, puedes usar la etapa del pipeline de agregación $collStats. Para obtener un ejemplo de cómo utilizar esta etapa de la pipeline, consulta Novedades en 4.11 para el driver de Java.

  • Elimina las clases MapCodec y IterableCodec. En lugar de MapCodec, se debe usar MapCodecProvider. En lugar de IterableCodec, usar CollectionCodecProvider, o IterableCodecProvider para los tipos Iterable que no sean tipos Collection.

  • Remueve los métodos sharded() y nonAtomic() de las clases MapReducePublisher y MapReduceIterable.

  • 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 $geoNear o un operador del query geoespacial en un índice 2d. Para obtener más información, consulta la página de consultas geoespaciales en el manual de MongoDB Server.

  • Elimina la opción oplogReplay de las operaciones de búsqueda. Esto incluye los siguientes métodos:

    • 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 errorLabels de la clase WriteConcernError. Esto incluye los métodos addLabel() y getErrorLabels() y el constructor que incluye un parámetro errorLabels. En su lugar, puedes utilizar las etiquetas de error incluidas en el objeto MongoException que contiene el WriteConcernError.

  • Elimina las siguientes clases del paquete com.mongodb.event:

    • ConnectionAddedEvent

    • ConnectionPoolOpenedEvent

    • ConnectionRemovedEvent

    • ClusterListenerAdapter

    • ConnectionPoolListenerAdapter

    • ServerListenerAdapter

    • ServerMonitorListenerAdapter

    Debido a estas eliminaciones, los siguientes métodos también se eliminaron de la interfaz ConnectionPoolListener:

    • connectionAdded

    • connectionPoolOpened

    • connectionRemoved

    Para obtener más información sobre el paquete de eventos, consulte la documentación del paquete com.mongodb.event

  • Agrega soporte para una nueva opción authorizedCollection del comando listCollections. Esto introduce un cambio binario significativo en los métodos MongoDatabase.listCollectionNames(), lo que significa que cualquier código que use estos métodos debe ser recompilado. Este cambio no requiere ninguna modificación en el código fuente.

  • Remueve los siguientes métodos y tipos relacionados con la interfaz Stream:

    • streamFactoryFactory() método de MongoClientSettings.Builder. Utiliza el método MongoClientSettings.Builder.transportSettings() en su lugar.

    • getStreamFactoryFactory() método de MongoClientSettings. Utiliza el método MongoClientSettings.getTransportSettings() en su lugar.

    • NettyStreamFactoryFactory clase. Utiliza el NettyTransportSettings, creable por TransportSettings.nettyBuilder() y aplicado a través de MongoClientSettings.Builder.transportSettings().

    • NettyStreamFactory clase

    • AsynchronousSocketChannelStreamFactory clase

    • AsynchronousSocketChannelStreamFactoryFactory clase

    • BufferProvider Interfaz

    • SocketStreamFactory clase

    • Stream Interfaz

    • StreamFactory Interfaz

    • StreamFactoryFactory Interfaz

    • TlsChannelStreamFactoryFactory clase

  • El driver deja de admitir la conexión a versiones del 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 .

  • Debe agregar una dependencia explícita al módulo org.bson.codecs.record si su aplicación implementa el controlador en un contenedor OSGi y depende del controlador para la codificación y decodificación de registros Java.

  • El RecordCodec, implementado en la versión 4.6, deserializó POJOs y clases de registro que se especifican como parámetros de tipo de campos List o Map de un registro como valores Document en lugar de sus respectivas clases. Esta versión ahora los deserializa en los tipos de registro y POJO adecuados.

    Por ejemplo, las siguientes definiciones de clases de registro muestran un registro Book que contiene un List que recibe un parámetro de tipo Chapter:

    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 datos en el List en clases de registro Chapter en lugar de valores Document.

  • La API del generador setWindowFields ya no está en versión beta. El nuevo constructor rompe la compatibilidad binaria y de origen. Consulte la documentación de la API Aggregates para obtener información sobre las nuevas firmas de métodos de setWindowFields().

    Si tu aplicación utiliza este constructor en una versión anterior a la v4.7, actualiza tu código fuente para emplear la nueva firma de método y recompilar tu binario.

  • La clase ObjectId y su campo serialVersionUID se actualizaron para utilizar un nuevo formato que minimiza los problemas de compatibilidad de serialización entre diferentes versiones del controlador.

    Si una aplicación que utilice esta versión o posterior del driver intenta realizar la serialización de objetos Java en cualquier objeto que contenga una ObjectId y que haya sido serializado por una versión anterior del driver, Java arroja una InvalidClassException.

    Para aprender más sobre la Serialización de Objetos Java, consulta la documentación de Java sobre Objetos Serializables.

  • En esta versión se eliminaron varias clases y métodos marcados como obsoletos en la versión 3.12.

  • Los métodos asistentes de inserción devuelven un objeto de resultado de inserción en lugar de void.

  • Los métodos toJson() en BsonDocument, Document, y DbObject devuelven un formato JSON relajado en lugar de un formato JSON estricto. Esto hace que los documentos JSON sean más legibles, pero puede dificultar la identificación de la información de tipo BSON, como la diferencia entre un entero de 32 bits y uno de 64 bits. Si tu aplicación depende del formato JSON estricto, utiliza el modo estricto al leer o escribir datos. Aprende a especificar el formato JSON en la API actual en la guía Formato de datos de documento: JSON extendido.

  • La representación BSON por defecto del valor java.util.UUID cambió de JAVA_LEGACY a UNSPECIFIED. Las aplicaciones que almacenan o recuperan valores UUID deben especificar explícitamente qué representación usar. Puedes especificar la representación en la propiedad uuidRepresentation de MongoClientSettings.

    La representación UUID que especifiques controla estrictamente cómo el controlador decodifica los UUID. En versiones anteriores del driver, si se especificaba la representación de JAVA_LEGACY, el driver decodificaba objetos binarios de subtipos 3 y 4 como UUIDs. En la versión 4.0, la representación JAVA_LEGACY funciona solo con el subtipo 3.

    Para obtener una lista de nodos en el enum UuidRepresentation, consulta la documentación de la API v4.0.

  • 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 debe limitar las solicitudes según sea necesario en lugar de depender de que el controlador lance un MongoWaitQueueFullException.

  • El controlador ya no registra utilizando el paquete java.util.logging (JUL) y 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 JARs, mongo-java-driver y mongodb-driver, ya no se publican. Si la aplicación depende de alguno de estos, debe cambiar a mongodb-driver-sync o mongodb-driver-legacy dependiendo de qué API utilice la aplicación. Asegúrate de remover los JARs ybergigantes de tus dependencias.

  • Las actualizaciones de varias clases introdujeron rupturas de compatibilidad binaria, como el cambio en la signatura del método de los métodos de inserción asistentes. Recompile todas las clases que se vinculan al driver contra esta versión o posterior para asegurarse de que sigan funcionando.

Un cambio de compatibilidad de versión de servidor es una modificación en el MongoDB Java Driver que deja de admitir un conjunto de versiones del 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, consulta la Política de soporte para versiones anteriores.

El controlador v5.5 deja de ser compatible con el MongoDB Server 4.0. Para utilizar el v5.5 driver, debes conectarte a MongoDB Server 4.2 o posterior. Para aprender cómo actualizar su implementación del Servidor MongoDB, vea las Notas de la versión en el manual del Servidor MongoDB.

El controlador v5.2 deja de ser compatible con el MongoDB Server 3.6. Para utilizar el v5.2 driver, debes conectarte a MongoDB Server 4.0 o posterior. Para aprender cómo actualizar su implementación del Servidor MongoDB, vea las Notas de la versión en el manual del Servidor MongoDB.

El driver v4.8 descarta el soporte para MongoDB Server 3.4 y versiones anteriores. Para utilizar el v4.8 driver, debes conectarte a MongoDB Server 3.6 o posterior. Para aprender cómo actualizar su implementación del Servidor MongoDB, vea las Notas de la versión en el manual del Servidor MongoDB.

Las versiones 3.x del driver de Java no pueden conectarse a MongoDB Server v8.1. A partir de MongoDB Server v8.1, el comando buildinfo requiere autenticación, lo que provoca una incompatibilidad con la v3.x driver.

Volver

Notas de versión

En esta página