Visão geral
Nesta seção, você pode identificar as alterações que talvez precise 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 MongoDB Server às quais seu aplicação se conecta e com o Java Runtime Environment (JRE) em que seu aplicação é executado. Consulte a pá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 Servidor MongoDB, consulte a seção Alterações de compatibilidade da versão do servidor.
Dica
Para minimizar a quantidade de alterações que seu aplicação pode exigir ao atualizar as versões do driver no futuro, use a API estável.
Mudanças de última hora
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.
Versão 5.5 Alterações interruptivas
O driver não é mais compatível com a versão v4.0 do MongoDB Server . Para saber mais sobre essa alteração, consulte a seção Alterações de suporte do servidor da versão do 5.5 driver.
Versão 5.2 Alterações interruptivas
O driver não é mais compatível com a versão v3.6 do MongoDB Server . Para saber mais sobre essa alteração, consulte a seção Alterações de suporte do servidor da versão do 5.2 driver.
alteração interruptiva na versão 5.0
Esta versão do driver apresenta a seguinte alteração interruptiva:
Introduz as seguintes alterações na classe
ConnectionId:O construtor
ConnectionIdagora aceita um valor do tipolongcomo seu segundo parâmetro em vez do tipoint. Da mesma forma, o construtor agora aceita um valor do tipoLongcomo seu terceiro parâmetro em vez do tipoInteger. Como essa alteração quebra a compatibilidade binária, recrie qualquer código existente que chame o construtorConnectionId.O método
withServerValue()agora aceita um parâmetro do tipolongem vez do tipoint. Essa alteração quebra a compatibilidade binária, portanto, você deve recompilar qualquer código que chame o métodowithServerValue().O método
getServerValue()agora retorna um valor do tipoLongem vez do tipoInteger. Da mesma forma, o métodogetLocalValue()retorna um valor do tipolongem vez do tipoint. 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.annotationspor anotações do mesmo nome do pacoteorg.bson.codecs.pojo.annotations:BsonIdBsonPropertyBsonRepresentation
Altera o tipo de dados do parâmetro de duração do tempo limite nos métodos
SocketSettings.Builder.connectTimeout()eSocketSettings.Builder.readTimeout(). O tipo de dados deste parâmetro agora élongem vez deint.Em versões anteriores, este parâmetro é do tipo
intpara ambos os métodos. Essa alteração quebra a compatibilidade binária e requer compilação, mas não requer alterações no código. Para ver um exemplo que mostra como chamar métodos doSocketSettings, consulte o Exemplo de SocketSettings no guia Especificar configurações do MongoClient.Remove o método
Filters.eqFull(), lançado exclusivamente emBeta, que permitia criar um filtro de igualdade ao executar uma Atlas Vector Search. Você pode usar o métodoFilters.eq()ao instanciar um tipoVectorSearchOptions, conforme mostrado no código a seguir:VectorSearchOptions opts = vectorSearchOptions().filter(eq("x", 8));
Remove a classe implícita
org.mongodb.scala.ObservableImplicits.ToSingleObservableVoid. Isso significa que o tipoorg.reactivestreams.Publisher[Void]não é mais convertido automaticamente paraorg.mongodb.scala.SingleObservable[Void]. A API também expõeorg.mongodb.scala.Observable[Unit]em vez deorg.mongodb.scala.Observable[Void].Para obter mais informações, consulte o traço Observable na documentação da API Scala.
Altera a forma como o
ClusterSettingscalcula oClusterConnectionMode, 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 retornavaClusterConnectionMode.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
BsonDecimal128respondem às chamadas de método, respondendo da mesma forma que os valoresDecimal128. Em particular,BsonDecimal128.isNumber()agora retornatrue, eBsonDecimal128.asNumber()retorna o equivalenteBsonNumber.Remove os métodos ServerAddress
getSocketAddress()egetSocketAddresses().Em vez de
getSocketAddress(), utilize o método de instânciagetByName()dejava.net.InetAddress.Em vez de
getSocketAddresses(), utilize o método de instânciagetAllByName()dejava.net.InetAddress.Remove os métodos UnixServerAddress
getSocketAddress()egetUnixSocketAddress().Em vez de
getUnixSocketAddress(), construa uma instância dejnr.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 oUnixSocketAddress, consulte a documentação da API UnixSocketAddress.Remove a interface do
Parameterizable. Em vez de implementar essa interface em um tipoCodecpersonalizado, substitua o métodoCodecProvider.get()noCodecProviderdo codec se o codec for destinado a um tipo parametrizado.Remove o método
isSlaveOk()das classesReadPreferenceeTaggableReadPreference. 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étodosisSecondaryOk()dessas classes.Remove os métodos auxiliares
DBCollection.getStats()eDBCollection.isCapped()do comandocollStats. Em vez desses métodos, você pode utilizar o estágio de pipeline de agregação$collStats. Para obter um exemplo de como utilizar esse estágio de pipeline, consulte Novidades em 4.11 para o driver Java.Remove as classes
MapCodeceIterableCodec. Em vez deMapCodec, useMapCodecProvider. Em vez deIterableCodec, useCollectionCodecProviderouIterableCodecProviderpara tipos deIterableque não são tiposCollection.Remove os métodos
sharded()enonAtomic()das classesMapReducePublishereMapReduceIterable.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
$geoNearou 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
oplogReplaydas 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
errorLabelsda classeWriteConcernError. Isso inclui os métodosaddLabel()egetErrorLabels()e o construtor que inclui um parâmetroerrorLabels. Em vez disso, você pode usar os rótulos de erro incluídos no objetoMongoExceptionque contém oWriteConcernError.Remove as seguintes classes do pacote
com.mongodb.event:ConnectionAddedEventConnectionPoolOpenedEventConnectionRemovedEventClusterListenerAdapterConnectionPoolListenerAdapterServerListenerAdapterServerMonitorListenerAdapter
Devido a essas remoções, os seguintes métodos também foram removidos da interface
ConnectionPoolListener:connectionAddedconnectionPoolOpenedconnectionRemoved
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
authorizedCollectiondo comandolistCollections. Isso introduz uma alteração binária de quebra nos métodosMongoDatabase.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 deMongoClientSettings.Builder. Use o métodoMongoClientSettings.Builder.transportSettings()em vez disso.getStreamFactoryFactory()método deMongoClientSettings. Use o métodoMongoClientSettings.getTransportSettings()em vez disso.NettyStreamFactoryFactoryaula. Use oNettyTransportSettings, criado porTransportSettings.nettyBuilder()e aplicado por meioMongoClientSettings.Builder.transportSettings().NettyStreamFactoryclasseAsynchronousSocketChannelStreamFactoryclasseAsynchronousSocketChannelStreamFactoryFactoryclasseBufferProviderInterfaceSocketStreamFactoryclasseStreamInterfaceStreamFactoryInterfaceStreamFactoryFactoryInterfaceTlsChannelStreamFactoryFactoryclasse
Alterações significativas na versão 4.8
O driver encerra o suporte para conexão com versões do MongoDB Server 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.recordse 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 camposListouMapde um registro como valoresDocumentem 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
Bookque contém umaListque recebe um parâmetro do tipoChapter: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
Listem classes de registro doChapterem vez de valores deDocument.
Versão 4.7: mudanças importantes
A API do construtor
setWindowFieldsnã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étodosetWindowFields().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.
Alterações significativas na versão 4.2
A classe
ObjectIde seu camposerialVersionUIDforam 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
ObjectIde foram serializados por uma versão anterior do driver, Java lança umInvalidClassException.Para saber mais sobre a serialização de objetos Java, veja a documentação Java em Objetos serializáveis.
Alterações significativas na versão 4.0
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()noBsonDocument,DocumenteDbObjectretornam 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 de 32-bit e 64-bit. Se seu aplicativo depender do formato JSON rigoroso, utilize o modo rigoroso ao ler ou gravar dados. Saiba como especificar o formato JSON na API atual no guia Formato de dados do documento: JSON estendido.A representação-padrão BSON do valor
java.util.UUIDfoi alterada deJAVA_LEGACYparaUNSPECIFIED. Os aplicativos que armazenam ou recuperam valores UUID devem especificar explicitamente qual representação usar. Você pode especificar a representação na propriedadeuuidRepresentationdeMongoClientSettings.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çãoJAVA_LEGACYfunciona somente com subtipo 3.Para obter uma lista de nós na enumeração
UuidRepresentation, consulte a documentação da API v4.0O 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 deve 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-driveremongodb-drivernão são mais publicados. Se seu aplicativo depender de um deles, você deverá alternar paramongodb-driver-syncoumongodb-driver-legacydependendo 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.
Alterações na compatibilidade da versão do servidor
Uma alteração de compatibilidade de versão do servidor é uma modificação no driver Java do MongoDB 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.
Versão do driver 5.5 Alterações no suporte do servidor
O driver v5.5 elimina o suporte para o MongoDB Server 4.0. Para usar o v5.5 driver, você deve se conectar ao MongoDB Server 4.2 ou posterior. Para saber como atualizar seu sistema do MongoDB Server, consulte Notas de versão no manual do MongoDB Server.
Versão do driver 5.2 Alterações no suporte do servidor
O driver v5.2 elimina o suporte para o MongoDB Server 3.6. Para usar o v5.2 driver, você deve se conectar ao MongoDB Server 4.0 ou posterior. Para saber como atualizar seu sistema do MongoDB Server, consulte Notas de versão no manual do MongoDB Server.
Versão do driver 4.8 Alterações no suporte do servidor
O driver v4.8 elimina o suporte para o MongoDB Server 3.4 e versões anteriores. Para usar o v4.8 driver, você deve se conectar ao MongoDB Server 3.6 ou posterior. Para saber como atualizar seu sistema do MongoDB Server, consulte Notas de versão no manual do MongoDB Server.
Versão do driver 3.x Mudanças no suporte
3.x versões do driver Java não podem se conectar ao MongoDB Server v8.1. Iniciando no MongoDB Server v8.1, o comando buildinfo exige autenticação, causando uma incompatibilidade com o v3.x motorista.