Docs Menu

ドライバーのバージョンをアップグレードする

このセクションでは、ドライバーを新しいバージョンにアップグレードするためにアプリケーションに加える必要がある変更を識別できます。

アップグレードする前に、次のアクションを実行してください。

  • 新しいバージョンが、アプリケーションが接続するMongoDB Serverのバージョン およびアプリケーションを実行するJavaランタイム環境(JRE)と互換性があることを確認します。 この情報については、 の互換性 ページを参照してください。

  • アプリケーションが使用しているドライバーの現在のバージョンとアップグレード予定のバージョンとの間の重大な変更について、 重大な変更セクションで対処します。 MongoDB Server リリースの互換性の変更の詳細については、「サーバー リリースの互換性の変更 」セクションを参照してください。

Tip

将来ドライバー バージョンをアップグレードする際にアプリケーションで必要になる可能性のある変更量を最小限に抑えるには、 Stable API を使用します。

重大な変更とは、特定のバージョンのドライバーにおける規則または動作の変更であり、アップグレードする前に対処しないと、アプリケーションが正常に動作しなくなる可能性があります。

このセクションの重大な変更は、それを導入したドライバーのバージョンによって分類されます。 ドライバーのバージョンをアップグレードするときは、現在のバージョンとアップグレードのバージョン間のすべての重大な変更に対処してください。 例えば、ドライバーを v4.0 から v4.5 にアップグレードする場合は、v4.5 にリストされている重大な変更を含む、v4.0 以降のバージョンからのすべての重大な変更に対処します。

このドライバー バージョンでは、次の重大な変更が導入されています。

  • ConnectionIdクラスに次の変更を導入します。

    • ConnectionIdコンストラクターは、 int型ではなくlong型の値を 2 番目のパラメーターとして受け入れるようになりました。 同様に、コンストラクターは、3 つ目のパラメーターとして、型IntegerではなくLongの値を受け入れるようになりました。 この変更によりバイナリの互換性が失われるため、 ConnectionIdコンストラクターを呼び出す既存のコードを再コンパイルしてください。

    • withServerValue()メソッドは、 int型ではなくlong型のパラメータを受け入れるようになりました。 この変更によりバイナリの互換性が失われるため、 withServerValue()メソッドを呼び出すコードは再コンパイルする必要があります。

    • getServerValue()メソッドからは、型Long ではなく 型の値が返されるようになりました。Integer同様に、 getLocalValue()メソッドでは、 int型ではなくlong型の値が返されます。 この変更によりバイナリとソースの両方の互換性が失われるため、これらのメソッドを使用するソースコードを更新し、バイナリを再構築してください。

  • パッケージの次のレコード注釈を、org.bson.codecs.record.annotations org.bson.codecs.pojo.annotationsパッケージの同じ名前の注釈に置き換えます。

    • BsonId

    • BsonProperty

    • BsonRepresentation

  • メソッドとSocketSettings.Builder.connectTimeout() SocketSettings.Builder.readTimeout()メソッドのタイムアウト期間パラメータのデータ型を変更します。このパラメータのデータ型は、 intではなくlongになりました。

    以前のバージョンでは、このパラメータは両方のメソッドでタイプintでした。 この変更によりバイナリの互換性が損なわれるため、再コンパイルが必要になりますが、コードの変更は必要ありません。

  • ベクトル検索を実行するときに等価フィルターを構築できるようにしたBetaのみにリリースされたFilters.eqFull()メソッドを削除します。 次のコードに示すように、 VectorSearchOptions型をインスタンス化するときにFilters.eq()メソッドを使用できます。

    VectorSearchOptions opts = vectorSearchOptions().filter(eq("x", 8));
  • org.mongodb.scala.ObservableImplicits.ToSingleObservableVoid暗黙クラスを削除します。 つまり、 org.reactivestreams.Publisher[Void]型はorg.mongodb.scala.SingleObservable[Void]に自動的に変換されなくなります。 この API では、 org.mongodb.scala.Observable[Void]ではなくorg.mongodb.scala.Observable[Unit]も公開されています。

    詳細については、 Scala APIドキュメントの「 Observable 」トランザクションを参照してください。

  • ClusterSettingsClusterConnectionModeを計算する方法を変更し、構成方法に関係なく指定されたレプリカセット名を使用することで、一貫性を高めます。 以前は、レプリカセット名は 接続stringによって設定されている場合にのみ考慮されていました。

    たとえば、次の 2 つのコード サンプルは両方とも値ClusterConnectionMode.MULTIPLEを返し、2 番目のコード サンプルは以前は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()
  • BsonDecimal128がメソッド呼び出しに応答する方法を変更し、 Decimal128値と同じ方法で応答します。 特に、 BsonDecimal128.isNumber()trueを返し、 BsonDecimal128.asNumber()は同等のBsonNumberを返すようになりました。

  • ServerAddress を削除します メソッドgetSocketAddress()getSocketAddresses() メソッド。

    getSocketAddress()の代わりに、 java.net.InetAddressgetByName()インスタンス メソッドを使用します。

    getSocketAddresses()の代わりに、 java.net.InetAddressgetAllByName()インスタンス メソッドを使用します。

  • UnixServerAddress を削除します メソッドgetSocketAddress()getUnixSocketAddress() メソッド。

    getUnixSocketAddress()の代わりにjnr.unixsocket.UnixSocketAddressのインスタンスを構築します。 コンストラクターに UNIX ソケット ファイルのフル パスを渡します。 デフォルトでは、MongoDB は"/tmp/mongodb-27017.sock"に配置された UNIX ソケット ファイルを作成します。 UnixSocketAddressの詳細については、 UnixSocketAddress を参照してください API ドキュメント。

  • Parameterizableインターフェースを削除します。 コーデックが パラメーター化された型を対象としている場合は、このインターフェースをカスタムCodec型に実装する代わりに、コーデックのCodecProviderCodecProvider.get()メソッドをオーバーライドします。

  • isSlaveOk()クラスとReadPreference TaggableReadPreferenceクラスから メソッドを削除します。レプリカセットのセカンダリ メンバーからの読み取りが読み込み設定(read preference)で許可されているかどうかを確認するには、代わりにこれらのクラスのisSecondaryOk()メソッドを使用します。

  • collStatsコマンドのDBCollection.getStats()DBCollection.isCapped()ヘルパーメソッドを削除します。 これらのメソッドの代わりに、 $collStats集計パイプラインステージを使用できます。

  • MapCodecIterableCodecクラスと クラスを削除します。MapCodecの代わりにMapCodecProvider を使用します。IterableCodecの代わりに、 CollectionCodecProviderを使用するか、 Collection Iterable型にIterableCodecProviderを使用します。

  • クラスと クラスから メソッドと メソッドを削除します。sharded()nonAtomic()MapReducePublisherMapReduceIterable

  • geoHaystackインデックスで使用する次のメソッドを排除します。

    • Indexes.geoHaystack()

    • IndexOptions.getBucketSize()

    • IndexOptions.bucketSize()

    代わりに、 2 d インデックスで$geoNear集計パイプライン ステージまたは 地理空間クエリ演算子 を使用できます。 詳細については、MongoDB Server マニュアルの「 地理空間クエリ 」ページ を参照してください。

  • 検索操作からoplogReplayオプションを削除します。 これには、次のメソッドが含まれます。

    • DBCursor.oplogReplay()

    • DBCollectionFindOptions.isOplogReplay()

    • DBCollectionFindOptions.oplogReplay()

    • FindPublisher.oplogReplay()

    • FindIterable.oplogReplay()

  • 次のExceptionコンストラクタを削除します。

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

    • MongoCursorNotFoundException(long, ServerAddress)

    • MongoQueryException(ServerAddress, int, String)

    • MongoQueryException(ServerAddress, int, String, String)

    • MongoQueryException(MongoCommandException)

  • BulkWriteResult.acknowledged()メソッドの次のオーバーロードを排除します。

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

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

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

  • 次の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, ...)

  • イベントの次のコンストラクターを削除します。

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

  • WriteConcernErrorクラスからerrorLabelsオプションを削除します。 これには、 addLabel()メソッドとgetErrorLabels()メソッド、およびerrorLabelsパラメータを含むコンストラクターが含まれます。 代わりに、 WriteConcernErrorを含むMongoExceptionオブジェクトに含まれるエラー ラベルを使用できます。

  • com.mongodb.eventパッケージから次のクラスを削除します。

    • ConnectionAddedEvent

    • ConnectionPoolOpenedEvent

    • ConnectionRemovedEvent

    • ClusterListenerAdapter

    • ConnectionPoolListenerAdapter

    • ServerListenerAdapter

    • ServerMonitorListenerAdapter

    これらの削除により、次のメソッドもConnectionPoolListenerインターフェースから削除されました。

    • connectionAdded

    • connectionPoolOpened

    • connectionRemoved

    イベント パッケージの詳細については、 com.mongodb.event パッケージのドキュメント を参照してください。

  • listCollectionsコマンドの新しいauthorizedCollectionオプションのサポートを追加します。 これにより、 MongoDatabase.listCollectionNames()メソッドに重大なバイナリ変更が導入され、これらのメソッドを使用するすべてのコードは再コンパイルする必要があります。 この変更では、ソースコードを変更する必要はありません。

  • ストリーム に関連する次のメソッドとタイプを削除します インターフェース:

    • streamFactoryFactory() メソッドを使用した、 MongoClientSettings.Builderのメソッドです。 代わりに、 MongoClientSettings.Builder.transportSettings()メソッドを使用してください。

    • getStreamFactoryFactory() メソッドを使用した、 MongoClientSettingsのメソッドです。 代わりに、 MongoClientSettings.getTransportSettings()メソッドを使用してください。

    • NettyStreamFactoryFactory クラス。 TransportSettings.nettyBuilder()によって作成され、 MongoClientSettings.Builder.transportSettings()を通じて適用されたNettyTransportSettingsを使用します。

    • NettyStreamFactory クラス

    • AsynchronousSocketChannelStreamFactory クラス

    • AsynchronousSocketChannelStreamFactoryFactory クラス

    • BufferProvider インターフェース

    • SocketStreamFactory クラス

    • Stream インターフェース

    • StreamFactory インターフェース

    • StreamFactoryFactory インターフェース

    • TlsChannelStreamFactoryFactory クラス

  • ドライバーは MongoDB Server バージョン v 3.4以前への接続のサポートを終了します。 この変更について詳しくは、「ドライバー バージョン4.8サーバー サポートの変更 」セクションを参照してください。

  • アプリケーションが OSG コンテナにドライバーを配置し、Java レコードのエンコードとデコードにドライバーに依存する場合は、 org.bson.codecs.recordモジュールに明示的な依存関係を追加する必要があります。

  • v4.6 に実装された は、レコードのRecordCodec フィールドまたは フィールドの型パラメータとして指定されている POJO とレコード クラスを、それぞれのクラスではなくList MapDocument値として逆シリアル化しました。このバージョンでは、それらを適切なレコードと POJO タイプに逆シリアル化するようになりました。

    たとえば、次のレコード クラス定義は、 Chapter型パラメータを受け取るListを含むBookレコードを示しています。

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

    このバージョンから、コーデックはListのデータをDocument値ではなくChapterレコード クラスに逆シリアル化します。

  • setWindowFields ビルダAPIはbetaではなくなりました。 新しいビルダはバイナリとソースの互換性を破棄します。 集計 API ドキュメント setWindowFields()を参照してください 新しい メソッド署名の情報については、 を参照してください。

    アプリケーションが v 4.7より前のバージョンでこのビルダを使用している場合、 ソースコードを更新して新しいメソッド署名を使用し、バイナリを再構築します。

  • ObjectIdクラスとそのserialVersionUIDフィールドが更新され、ドライバーのさまざまなバージョン間での直列化の互換性の問題を最小限に抑える新しい形式を使用するようになりました。

    このバージョン以降のドライバーを使用するアプリケーションが、 ObjectIdを含み、かつ以前のバージョンのドライバーによってシリアル化されたオブジェクトに対して Java オブジェクト直列化を実行しようとすると、Java はInvalidClassExceptionをスローします。

    Java オブジェクト直列化の詳細については、 直列化可能なオブジェクトに関する Java ドキュメントを参照してください。

  • 3.12 リリースで非推奨としてマークされているクラスとメソッドの一部は、このバージョンで削除されました。

  • 挿入ヘルパー メソッドは、 voidではなく挿入結果オブジェクトを返します。

  • BsonDocumentDocument 、 relaxed DbObjecttoJson()メソッドは、厳密なJSON形式ではなくJSON形式を返し形式。 これにより、 JSONドキュメントはより読みやすくなりますが、 32ビット整数と64ビット整数の違いなど、 BSON type 情報の識別が困難になる可能性があります。 アプリケーションが厳密なJSON形式に依存している場合は、データの読み取りまたは書き込みで厳密モードを使用します。

  • java.util.UUID値のデフォルトの BSON 表現がJAVA_LEGACYからUNSPECIFIEDに変更されました。 UUID 値を保存または検索するアプリケーションでは、使用する表現を明示的に指定する必要があります。 MongoClientSettingsuuidRepresentationプロパティで表現を指定できます。

    指定する UUID 表現は、ドライバーが UUID をデコードする方法を厳密に制御します。 ドライバーの以前のバージョンでは、 JAVA_LEGACY表現を指定すると、ドライバーはサブタイプ 3 と 4 のバイナリ オブジェクトを UUID としてデコードしていました。 バージョン 4.0 では、 JAVA_LEGACY表現はサブタイプ 3 でのみ機能します。

    列挙型のメンバーのリストについては、UuidRepresentation 4.0v API ドキュメントを参照してください。

  • 接続プールは、 MongoDBへの接続を必要とする待機キュー スレッドや非同期タスクの数を制限しなくなりました。 アプリケーションは、 MongoWaitQueueFullExceptionをスローするようにドライバーに依存するのではなく、必要に応じてリクエストを調整します。

  • ドライバーはjava.util.logging (JUL)パッケージを使用したログ記録はなくなり、SLF4J のログ記録フレームワークのみをサポートします。

  • 埋め込みドライバーと Android ドライバーが削除されました。 アプリケーションがこれらのドライバーに依存する場合は、3.x Java ドライバー バージョン を引き続き使用する必要があります。

  • uber JAR のmongo-java-drivermongodb-driverは公開されなくなりました。 アプリケーションがこれらのいずれかに依存している場合は、アプリケーションが使用する API に応じてmongodb-driver-syncまたはmongodb-driver-legacyのいずれかに切り替える必要があります。 依存関係から uber JAR を削除していることを確認してください。

  • 挿入ヘルパー メソッドへのメソッド署名の変更など、バイナリ互換性の中断が導入された複数のクラスに対するアップデート。 ドライバーにリンクするすべてのクラスをこのバージョン以降に対して再コンパイルして、クラスが引き続き機能することを確認します。

サーバーリリースの互換性の変更とは、 MongoDB Java Reactive Streams ドライバーに対する変更で、 MongoDB Serverの特定のバージョンのサポートを廃止します。

ドライバーは、サポート終了(EOL)に達すると、MongoDB Server バージョンのサポートを終了します。

EOL 製品の MongoDB サポートの詳細については、レガシー サポート ポリシー を参照してください。

v5.2 ドライバーはMongoDB Server v3.6 のサポートを削除します。 v5.2 を使用するには ドライバーに設定されている場合、 MongoDB Server はv4.0 である必要があります。 以降に更新します。 MongoDB Server配置をアップグレードする方法については、 MongoDB Serverマニュアルの リリースノート を参照してください。

Java Reactive Streams ドライバーの3 .x バージョンを使用してMongoDB Server v 8.1を実行中している配置に接続することはできません。 MongoDB Server v 8.1以降、 buildinfoコマンドには認証が必要であり、v 3 .x ドライバー。

v 4.8ドライバーは MongoDB Server v 3.4以前のサポートを削除します。 v 4.8を使用するには ドライバーに設定されている場合、MongoDB Server は v 3.6である必要があります。 以降に更新します。 MongoDB Server 配置をアップグレードする方法については、MongoDB Server マニュアルのリリースノートを参照してください。