Menu Docs
Página inicial do Docs
/ / /
Driver de fluxos reativos do Java

Atualizar versões do driver

Nesta página

  • Visão geral
  • Mudanças de última hora
  • alteração interruptiva na versão 5.0
  • Alterações significativas na versão 4.8
  • Versão 4.7: mudanças importantes
  • Alterações significativas na versão 4.2
  • Alterações significativas na versão 4.0
  • Alterações na compatibilidade da versão do servidor
  • Versão do servidor 8.1 Alterações de suporte
  • Versão do driver 4.8 Alterações no suporte do servidor

Nesta seção, você pode identificar as alterações que deve fazer no seu aplicativo para atualizar seu driver para uma nova versão.

Antes de atualizar, execute as seguintes ações:

  • Certifique-se de que a nova versão seja compatível com as versões do Servidor MongoDB às quais seu aplicativo se conecta e com o Java Runtime Environment (JRE) em que seu aplicativo é executado. Consulte apágina de compatibilidade do para obter essas informações.

  • Resolva quaisquer alterações interruptivas entre a versão atual do driver que seu aplicativo está usando e a versão de atualização planejada na seção alterações interruptivas. Para saber mais sobre as alterações de compatibilidade da versão do MongoDB Server, consulte a seção Alterações de compatibilidade da versão do servidor.

Dica

Para minimizar a quantidade de alterações que sua aplicação pode exigir ao atualizar as versões do driver no futuro, use a stable API.

Uma alteração interruptiva é uma modificação em uma convenção ou comportamento em uma versão específica do driver que pode impedir que sua aplicação funcione corretamente se não for resolvida antes da atualização.

As mudanças significativas nesta seção são categorizadas pela versão do driver que as introduziram. Ao atualizar as versões do driver, resolva todas as alterações significativas entre a versão atual e a atualizada. Por exemplo, se você estiver atualizando o driver de v4.0 para v4.5, resolva todas as alterações significativas da versão posterior à v4.0, incluindo as listadas na v4.5.

Esta versão do driver apresenta a seguinte alteração interruptiva:

  • Introduz as seguintes alterações na classe ConnectionId :

    • O construtor ConnectionId agora aceita um valor do tipo long como seu segundo parâmetro em vez do tipo int. Da mesma forma, o construtor agora aceita um valor do tipo Long como seu terceiro parâmetro em vez do tipo Integer. Como essa alteração quebra a compatibilidade binária, recrie qualquer código existente que chame o construtor ConnectionId .

    • O método withServerValue() agora aceita um parâmetro do tipo long em vez do tipo int. Essa alteração quebra a compatibilidade binária, portanto, você deve recompilar qualquer código que chame o método withServerValue() .

    • O método getServerValue() agora retorna um valor do tipo Long em vez do tipo Integer . Da mesma forma, o método getLocalValue() retorna um valor do tipo long em vez do tipo int. Como essa alteração quebra a compatibilidade binária e de origem, atualize qualquer código-fonte que use esses métodos e reconstrua seu binário.

  • Substitui as seguintes anotações de registro do pacote org.bson.codecs.record.annotations por anotações do mesmo nome do pacote org.bson.codecs.pojo.annotations :

    • BsonId

    • BsonProperty

    • BsonRepresentation

  • Altera o tipo de dados do parâmetro de duração do tempo limite nos métodos SocketSettings.Builder.connectTimeout() e SocketSettings.Builder.readTimeout() . O tipo de dados deste parâmetro agora é long em vez de int.

    Nas versões anteriores, esse parâmetro é do tipo int para ambos os métodos. Essa alteração quebra a compatibilidade binária e requer recompilação, mas não requer alterações de código.

  • Remove o método Filters.eqFull() , lançado exclusivamente em Beta , que permitia a você construir um filtro de igualdade ao executar uma pesquisa vetorial. Você pode utilizar o método Filters.eq() ao instanciar um tipo VectorSearchOptions , como mostrado no seguinte código:

    VectorSearchOptions opts = vectorSearchOptions().filter(eq("x", 8));
  • Remove a classe implícita org.mongodb.scala.ObservableImplicits.ToSingleObservableVoid . Isso significa que o tipo org.reactivestreams.Publisher[Void] não é mais convertido automaticamente para org.mongodb.scala.SingleObservable[Void]. A API também expõe org.mongodb.scala.Observable[Unit] em vez de org.mongodb.scala.Observable[Void].

    Para obter mais informações, consulte a documentação de tração observável da API Scala.

  • Altera a forma como o ClusterSettings calcula o ClusterConnectionMode, tornando-o mais consistente ao usar o nome do conjunto de réplicas especificado, independentemente de como ele está configurado. Anteriormente, o nome do conjunto só era considerado se fosse definido pela string de conexão.

    Por exemplo, os dois exemplos de código a seguir retornam o valor ClusterConnectionMode.MULTIPLE, enquanto anteriormente o segundo retornava 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()
  • Altera como os valores BsonDecimal128 respondem às chamadas de método, respondendo da mesma forma que os valores Decimal128 . Em particular, BsonDecimal128.isNumber() agora retorna true , e BsonDecimal128.asNumber() retorna o equivalente BsonNumber .

  • Remove os métodos ServerAddress getSocketAddress() e getSocketAddresses().

    Em vez de getSocketAddress(), utilize o método de instância getByName() de java.net.InetAddress.

    Em vez de getSocketAddresses(), utilize o método de instância getAllByName() de java.net.InetAddress.

  • Remove os métodos UnixServerAddress getSocketAddress() e getUnixSocketAddress().

    Em vez de getUnixSocketAddress(), construa uma instância de jnr.unixsocket.UnixSocketAddress. Passe o caminho completo do arquivo de soquete UNIX para o construtor. Por padrão, o MongoDB cria um arquivo de soquete UNIX localizado em "/tmp/mongodb-27017.sock". Para saber mais sobre o UnixSocketAddress, consulte o UnixSocketAddress Documentação da API.

  • Remove a interface do Parameterizable . Em vez de implementar essa interface em um tipo Codec personalizado, substitua o método CodecProvider.get() no CodecProvider do codec se o codec for destinado a um tipo parametrizado.

  • Remove o método isSlaveOk() das classes ReadPreference e TaggableReadPreference . Para verificar se uma preferência de leitura permite a leitura de um membro secundário de um conjunto de réplicas, use os métodos isSecondaryOk() dessas classes.

  • Remove os métodos auxiliares DBCollection.getStats() e DBCollection.isCapped() do comando collStats . Em vez desses métodos, você pode usar o estágio do pipeline de agregação $collStats .

  • Remove as classes MapCodec e IterableCodec . Em vez de MapCodec, use MapCodecProvider. Em vez de IterableCodec , use CollectionCodecProvider ou IterableCodecProvider para tipos de Iterable que não são tipos Collection .

  • Remove os métodos sharded() e nonAtomic() das classes MapReducePublisher e MapReduceIterable .

  • Remove os seguintes métodos para utilizar com índices geoHaystack :

    • Indexes.geoHaystack()

    • IndexOptions.getBucketSize()

    • IndexOptions.bucketSize()

    Em vez disso, você pode usar o estágio de pipeline de agregação $geoNear ou um operador de query geoespacial em um índice 2d. Para mais informações, consulte a página de queries geoespaciais no manual do MongoDB Server.

  • Remove a opção oplogReplay das operações de localização. Isso inclui os seguintes métodos:

    • DBCursor.oplogReplay()

    • DBCollectionFindOptions.isOplogReplay()

    • DBCollectionFindOptions.oplogReplay()

    • FindPublisher.oplogReplay()

    • FindIterable.oplogReplay()

  • Remove os seguintes construtores Exception :

    • MongoBulkWriteException(BulkWriteResult, List<BulkWriteError>, WriteConcernError, ServerAddress)

    • MongoCursorNotFoundException(long, ServerAddress)

    • MongoQueryException(ServerAddress, int, String)

    • MongoQueryException(ServerAddress, int, String, String)

    • MongoQueryException(MongoCommandException)

  • Remove as seguintes sobrecargas para o método BulkWriteResult.acknowledged() :

    • acknowledged(Type, int, List<BulkWriteUpsert>)

    • acknowledged(Type, int, Integer, List<BulkWriteUpsert>)

    • acknowledged(int, int, int, Integer, List<BulkWriteUpsert>)

  • Remove os seguintes construtores 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, ...)

  • Remove os seguintes construtores 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)

  • Remove a opção errorLabels da classe WriteConcernError . Isso inclui os métodos addLabel() e getErrorLabels() e o construtor que inclui um parâmetro errorLabels . Em vez disso, você pode usar os rótulos de erro incluídos no objeto MongoException que contém o WriteConcernError.

  • Remove as seguintes classes do pacote com.mongodb.event :

    • ConnectionAddedEvent

    • ConnectionPoolOpenedEvent

    • ConnectionRemovedEvent

    • ClusterListenerAdapter

    • ConnectionPoolListenerAdapter

    • ServerListenerAdapter

    • ServerMonitorListenerAdapter

    Devido a essas remoções, os seguintes métodos também foram removidos da interface ConnectionPoolListener :

    • connectionAdded

    • connectionPoolOpened

    • connectionRemoved

    Para obter mais informações sobre o pacote de eventos, consulte a documentação do pacote com.mongodb.event

  • Adiciona suporte para uma nova opção authorizedCollection do comando listCollections . Isso introduz uma alteração binária de quebra nos métodos MongoDatabase.listCollectionNames() , o que significa que qualquer código usando esses métodos deve ser novamente compilado. Essa alteração não requer alterações no código-fonte.

  • Remove os seguintes métodos e tipos relacionados à interface Stream:

    • streamFactoryFactory() método de MongoClientSettings.Builder. Use o método MongoClientSettings.Builder.transportSettings() em vez disso.

    • getStreamFactoryFactory() método de MongoClientSettings. Use o método MongoClientSettings.getTransportSettings() em vez disso.

    • NettyStreamFactoryFactory aula. Use o NettyTransportSettings, criado por TransportSettings.nettyBuilder() e aplicado por meio MongoClientSettings.Builder.transportSettings().

    • NettyStreamFactory classe

    • AsynchronousSocketChannelStreamFactory classe

    • AsynchronousSocketChannelStreamFactoryFactory classe

    • BufferProvider Interface

    • SocketStreamFactory classe

    • Stream Interface

    • StreamFactory Interface

    • StreamFactoryFactory Interface

    • TlsChannelStreamFactoryFactory classe

  • O driver encerra o suporte para conexão com versões do servidor MongoDB v3.4 e anteriores. Para saber mais sobre essa alteração, consulte a seção Alterações de suporte do servidor 4.8 da versão do driver .

  • Você deve adicionar uma dependência explícita ao módulo org.bson.codecs.record se o seu aplicativo implantar o driver em um contêiner OSGi e depender do driver para codificar e decodificar registros Java.

  • O RecordCodec, implementado na versão 4.6, POJOs desserializados e classes de registro que são especificados como parâmetros de tipo dos campos List ou Map de um registro como valores Document em vez das suas respectivas classes. Essa versão agora os desserializa para os tipos de registro e POJO adequados.

    Por exemplo, as seguintes definições da classe de registro mostram um registro Book que contém uma List que recebe um parâmetro do tipo Chapter:

    public record Book(String title, List<Chapter> chapters) {}
    public record Chapter(Integer number, String text) {}

    A partir desta versão, o codec desserializa dados no List em classes de registro do Chapter em vez de valores de Document.

  • A API do construtor setWindowFields não é mais beta. O novo construtor quebra a compatibilidade binária e de origem. Consulte a documentação da API Aggregates para obter informações sobre as novas assinaturas do método setWindowFields().

    Se seu aplicativo usa esse construtor em uma versão anterior à v4.7, atualize seu código-fonte para usar a nova assinatura do método e reconstrua seu binário.

  • A classe ObjectId e seu campo serialVersionUID foram atualizados para usar um novo formato que reduz problemas de compatibilidade de serialização em diferentes versões do driver.

    Se um aplicativo utilizando esta versão ou posterior do driver tenta executar a serialização de objetos Java em quaisquer objetos que contenham um ObjectId e foram serializados por uma versão anterior do driver, Java lança um InvalidClassException.

    Para saber mais sobre a serialização de objetos Java, veja a documentação Java em Objetos serializáveis.

  • Diversas classes e métodos marcados como obsoletos na versão 3.12 foram removidos nesta versão.

  • Os métodos auxiliares de inserção geram um objeto de resultado de inserção em vez de void.

  • Os métodos toJson() no BsonDocument, Document e DbObject retornam um formato de JSON relaxado em vez de um formato de JSON rigoroso. Isso torna os documentos JSON mais legíveis, mas pode dificultar a identificação das informações do tipo de BSON, como a diferença entre um número inteiro 32bits e 64bits. Se o seu aplicativo depender do formato JSON rigoroso, utilize o modo rigoroso ao ler ou gravar dados.

  • A representação-padrão BSON do valor java.util.UUID foi alterada de JAVA_LEGACY para UNSPECIFIED. Os aplicativos que armazenam ou recuperam valores UUID devem especificar explicitamente qual representação usar. Você pode especificar a representação na propriedade uuidRepresentation de MongoClientSettings.

    A representação do UUID que você especifica controla estritamente como o driver decodifica os UUIDs. Nas versões anteriores do driver, se você especificasse a representação JAVA_LEGACY, o driver decodificaria objetos binários dos subtipos 3 e 4 como UUIDs. Na versão 4.0, a representação JAVA_LEGACY funciona somente com subtipo 3.

    Para obter uma lista de nós na enumeração UuidRepresentation, consulte a documentação da API v4.0

  • O pool de conexões não restringe mais o número de threads de fila de espera ou tarefas assíncronas que exigem uma conexão com o MongoDB. O aplicativo limitará as solicitações conforme necessário, em vez de depender do driver para lançar um MongoWaitQueueFullException.

  • O driver deixa de registrar utilizando o pacote java.util.logging (JUL) e somente apoia o framework de registro SLF4J.

  • Os drivers incorporados e de Android foram removidos. Se o seu aplicativo depender desses drivers, você deverá continuar usando uma versão 3.x do driver Java.

  • Os uber JARs, mongo-java-driver e mongodb-driver não são mais publicados. Se seu aplicativo depender de um deles, você deverá alternar para mongodb-driver-sync ou mongodb-driver-legacy dependendo de qual API o aplicativo usa. Certifique-se de remover os uber JARs das suas dependências.

  • As atualizações de várias classes introduziram quebras de compatibilidade binária, como a alteração da assinatura do método para os métodos auxiliares de inserção. Recompile todas as classes vinculadas ao driver nessa versão ou posterior para garantir que elas continuem funcionando.

Uma alteração de compatibilidade de versão do servidor é uma modificação no MongoDB Java Reactive Streams Driver que descontinua o suporte para um conjunto de versões do Servidor MongoDB.

O driver interrompe o suporte para uma versão do Servidor MongoDB após atingir o fim da vida útil (EOL).

Para saber mais sobre o suporte MongoDB para produtos EOL, consulte a Política de Suporte Legado.

Você não pode usar uma versão 3.x do driver Java Reactive Streams para se conectar a uma implementação que esteja executando o MongoDB Server v8.1. A partir do Servidor MongoDB v8.1, o comando buildinfo exige autenticação, causando uma incompatibilidade com o driver v3.x.

O driver v4.8 remove a compatibilidade com o MongoDB Server v3.4 e anterior. Para usar o driver v4.8, seu MongoDB Server deve ser v3.6 ou posterior. Para saber como atualizar seu MongoDB Server, consulte Notas da versão no manual do MongoDB Server.

Voltar

Compatibilidade