Docs Menu
Docs Home
/ /

Actualizar versiones de los controladores

En esta sección, puede identificar los cambios que podría necesitar realizar en su aplicación para actualizar su controlador a una nueva versión.

Antes de actualizar, realice 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. Consulte la Página de compatibilidad para esta información.

  • Aborde cualquier cambio importante entre la versión actual del controlador que utiliza su aplicación y la versión de actualización planificada en la sección Cambios importantes. Para obtener más información sobre los cambios de compatibilidad de versiones de MongoDB Server, consulte la sección Cambios de compatibilidad de versiones de Server.

Tip

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

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 importantes de esta sección se clasifican según la versión del controlador que los introdujo. Al actualizar las versiones del controlador, aborde todos los cambios importantes entre la versión actual y la de actualización. Por ejemplo, si actualiza el controlador4.0 de4.5 la versión 7600 a la 7800, aborde todos los cambios importantes de la versión posterior a la4.0 8000, incluidos los que aparecen en la versión4.5 8200.

Esta versión del controlador introduce los siguientes cambios importantes:

  • Introduce los siguientes cambios en el ConnectionId clase:

    • El constructor ConnectionId ahora acepta un valor de tipo long como segundo parámetro en lugar de int. De igual forma, ahora acepta un valor de tipo Long como tercer parámetro en lugar de Integer. Dado que este cambio rompe la compatibilidad binaria, recompile cualquier código existente que llame al constructor ConnectionId.

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

    • El método getServerValue() ahora devuelve un valor de tipo Long en lugar de Integer. De forma similar, el método getLocalValue() devuelve un valor de tipo long en lugar de int. Dado que este cambio rompe la compatibilidad entre el binario y el código fuente, actualice cualquier código fuente que utilice estos métodos y reconstruya 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

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

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

  • Elimina el método Filters.eqFull(), disponible exclusivamente en Beta, que permitía construir un filtro de igualdad al realizar una búsqueda vectorial de MongoDB. Puede 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 rasgo Observable en la documentación de la API de Scala.

  • Cambia la forma en que ClusterSettings calcula ClusterConnectionMode, haciéndolo más consistente al usar el nombre del conjunto de réplicas especificado, independientemente de su configuración. Anteriormente, el nombre del conjunto de réplicas solo se tenía en cuenta si lo establecía la cadena de conexión.

    Por ejemplo, los dos ejemplos de código siguientes 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 la forma en que los valores BsonDecimal128 responden a las llamadas de método, respondiendo de la misma manera que los valores Decimal128. En particular, BsonDecimal128.isNumber() ahora devuelve true y BsonDecimal128.asNumber() devuelve el equivalente BsonNumber.

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

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

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

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

    En lugar getUnixSocketAddress() de, construya una instancia de.jnr.unixsocket.UnixSocketAddress Pase la ruta completa del archivo de socket UNIX al constructor. Por defecto, MongoDB crea un archivo de socket UNIX ubicado "/tmp/mongodb-27017.sock" en. Para obtener más información UnixSocketAddress sobre, consulte la documentación de la API UnixSocketAddress.

  • Elimina la interfaz Parameterizable. En lugar de implementar esta interfaz en un tipo Codec personalizado, anule el método CodecProvider.get() en el CodecProvider del códec si este está diseñado para un tipo parametrizado.

  • Elimina el método isSlaveOk() de las clases ReadPreference y TaggableReadPreference. Para comprobar si una preferencia de lectura permite leer desde un miembro secundario de un conjunto de réplicas, utilice los métodos isSecondaryOk() de estas clases.

  • Elimina los DBCollection.getStats() DBCollection.isCapped() métodos auxiliares collStats y del comando. En lugar de estos métodos, puede usar la $collStats etapa de canalización de agregación. Para ver un ejemplo de cómo usar esta etapa de canalización, consulte Novedades en 4.11 para el controlador Java.

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

  • Elimina 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, puede usar la $geoNear etapa 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 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)

  • 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)

  • Elimina la opción errorLabels de la clase WriteConcernError. Esto incluye los métodos addLabel() y getErrorLabels(), así como el constructor que incluye un parámetro errorLabels. En su lugar, puede usar 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

  • Añade compatibilidad con la nueva opción authorizedCollection del comando listCollections. Esto introduce un cambio binario crucial en los métodos MongoDatabase.listCollectionNames(), lo que significa que cualquier código que utilice estos métodos debe recompilarse. Este cambio no requiere modificaciones en el código fuente.

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

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

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

    • NettyStreamFactoryFactory Clase. Utilice NettyTransportSettings, que puede ser creado 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 controlador deja de ofrecer compatibilidad con las versiones v y anteriores del servidor MongoDB.3.4 Para obtener más información sobre este cambio, consulte la sección 4.8 "Cambios en la compatibilidad con el servidor de la versión del controlador".

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

  • El RecordCodec, implementado en la versión v4.6, deserializaba los POJO y las clases de registro especificados como parámetros de tipo de los campos List o Map de un registro como valores Document en lugar de sus respectivas clases. Esta versión ahora los deserializa a los tipos de registro y POJO adecuados.

    Por ejemplo, las siguientes definiciones de clase 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 los datos en las clases de registro List en Chapter en lugar de valores Document.

  • La setWindowFields API del generador ya no está en fase beta. El nuevo generador rompe la compatibilidad con binarios y código fuente. Consulte la documentación de la API de Agregados para obtener información sobre las nuevas setWindowFields() firmas de método.

    Si su aplicación utiliza este generador en una versión anterior a v4.7, actualice su código fuente para usar la nueva firma del método y reconstruya su 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 utiliza esta versión o una posterior del controlador intenta realizar la serialización de objetos Java en cualquier objeto que contenga un ObjectId y que haya sido serializado por una versión anterior del controlador, Java arroja un InvalidClassException.

    Para obtener más información sobre la serialización de objetos Java, consulte la documentación de Java sobre objetos serializables.

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

  • Los métodos auxiliares 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 predeterminada del valor java.util.UUID se cambió de JAVA_LEGACY a UNSPECIFIED. Las aplicaciones que almacenan o recuperan valores UUID deben especificar explícitamente qué representación usar. Puede especificar la representación en la propiedad uuidRepresentation de MongoClientSettings.

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

    Para obtener una lista de los miembros de la UuidRepresentation enumeración, consulte la 4.0 documentación de la API v.

  • El grupo de conexiones ya no restringe el número de subprocesos en cola de espera ni de tareas asincrónicas que requieren una conexión a MongoDB. La aplicación debería limitar las solicitudes según sea necesario en lugar de depender de que el controlador genere un MongoWaitQueueFullException.

  • El controlador ya no registra utilizando el paquete java.util.logging (JUL) y solo admite el marco de registro SLF4J.

  • Se eliminaron los controladores integrados y de Android. Si su aplicación depende de estos controladores, debe seguir usando una versión 3.x del controlador Java.

  • Los archivos JAR de Uber, mongo-java-driver y mongodb-driver, ya no se publican. Si su aplicación depende de uno de ellos, debe cambiar a mongodb-driver-sync o mongodb-driver-legacy, según la API que utilice. Asegúrese de eliminar los archivos JAR de Uber de sus dependencias.

  • Las actualizaciones de varias clases introdujeron problemas de compatibilidad binaria, como el cambio en la firma de los métodos auxiliares de inserción. Recompila las clases que enlazan con el controlador con esta versión o posterior para garantizar su correcto funcionamiento.

Un cambio de compatibilidad de versión del servidor es una modificación al controlador Java de MongoDB que interrumpe el soporte para un conjunto de versiones del servidor MongoDB.

El controlador deja de brindar soporte para una versión de MongoDB Server 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.

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.

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.

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.

Las versiones 3.x del controlador 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 el controlador v3.x.

Volver

Notas de versión

En esta página