Overview
このセクションでは、ドライバーを新しいバージョンにアップグレードするためにアプリケーションに加える必要がある変更を特定できます。
アップグレードする前に、次のアクションを実行してください。
新しいバージョンが、アプリケーションが接続するMongoDB Server のバージョン およびアプリケーションを実行するJavaランタイム環境(JRE)と互換性があることを確認します。この情報については、 の互換性 ページを参照してください。
アプリケーションが使用しているドライバーの現在のバージョンとアップグレードが予定されているバージョンとの間の重大な変更については、「 重大な変更 」セクションを参照してください。 MongoDB Server リリースの互換性の変更の詳細については、「サーバー リリースの互換性の変更 」セクションを参照してください。
Tip
将来ドライバー バージョンをアップグレードする際にアプリケーションで必要になる可能性のある変更量を最小限に抑えるには、 Stable APIを使用します。
重大な変更
重大な変更とは、特定のバージョンのドライバーにおける規則または動作の変更であり、アップグレードする前に対処しないと、アプリケーションが正常に動作しなくなる可能性があります。
このセクションの重大な変更は、それを導入したドライバーのバージョンによって分類されます。 ドライバーのバージョンをアップグレードするときは、現在のバージョンとアップグレードのバージョン間のすべての重大な変更に対処してください。 例えば、ドライバーを v4.0 から v4.5 にアップグレードする場合は、v4.5 にリストされている重大な変更を含む、v4.0 以降のバージョンからのすべての重大な変更に対処します。
バージョン5.5 重大な変更
ドライバーはMongoDB Serverバージョン v4.0 と互換性がなくなりました。 この変更について詳しくは、「 ドライバー バージョン5.5 サーバー サポートの変更 」セクションを参照してください。
バージョン5.2 重大な変更
ドライバーはMongoDB Serverバージョン v3.6 と互換性がなくなりました。 この変更について詳しくは、「 ドライバー バージョン5.2 サーバー サポートの変更 」セクションを参照してください。
バージョン 5.0 の重大な変更
このドライバー バージョンでは、次の重大な変更が導入されています。
ConnectionIdクラスに次の変更を導入します。ConnectionIdコンストラクターは、int型ではなくlong型の値を 2 番目のパラメーターとして受け入れるようになりました。 同様に、コンストラクターは、3 つ目のパラメーターとして、型IntegerではなくLongの値を受け入れるようになりました。 この変更によりバイナリの互換性が失われるため、ConnectionIdコンストラクターを呼び出す既存のコードを再コンパイルしてください。withServerValue()メソッドは、int型ではなくlong型のパラメータを受け入れるようになりました。 この変更によりバイナリの互換性が失われるため、withServerValue()メソッドを呼び出すコードは再コンパイルする必要があります。getServerValue()メソッドからは、型Longではなく 型の値が返されるようになりました。Integer同様に、getLocalValue()メソッドでは、int型ではなくlong型の値が返されます。 この変更によりバイナリとソースの両方の互換性が失われるため、これらのメソッドを使用するソースコードを更新し、バイナリを再構築してください。
パッケージの次のレコード注釈を、
org.bson.codecs.record.annotationsorg.bson.codecs.pojo.annotationsパッケージの同じ名前の注釈に置き換えます。BsonIdBsonPropertyBsonRepresentation
メソッドと
SocketSettings.Builder.connectTimeout()SocketSettings.Builder.readTimeout()メソッドのタイムアウト期間パラメータのデータ型を変更します。このパラメータのデータ型は、intではなくlongになりました。以前のバージョンでは、このパラメータは両方のメソッドでタイプ
intでした。 この変更によりバイナリの互換性が損なわれるため、再コンパイルが必要になりますが、コードの変更は必要ありません。SocketSettingsメソッドを呼び出す方法を示す例については、「 MongoClient 設定の指定 」ガイドの「 SocketSettings の例」を参照してください。Atlas ベクトル検索 を実行するときに等価フィルターを構築できた
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]も公開されています。ClusterSettingsがClusterConnectionModeを計算する方法を変更し、構成方法に関係なく指定されたレプリカセット名を使用することで、一貫性を高めます。 以前は、レプリカセット名は 接続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.InetAddressのgetByName()インスタンス メソッドを使用します。getSocketAddresses()の代わりに、java.net.InetAddressのgetAllByName()インスタンス メソッドを使用します。UnixServerAddress メソッド
getSocketAddress()とgetUnixSocketAddress()を削除します。getUnixSocketAddress()の代わりにjnr.unixsocket.UnixSocketAddressのインスタンスを構築します。コンストラクターに UNIX ソケットファイルのフル パスを渡します。デフォルトでは 、 MongoDB は"/tmp/mongodb-27017.sock"に配置された UNIX ソケットファイルを作成します。UnixSocketAddressの詳細については、UnixSocketAddress APIドキュメントを参照してください。Parameterizableインターフェースを削除します。 コーデックが パラメーター化された型を対象としている場合は、このインターフェースをカスタムCodec型に実装する代わりに、コーデックのCodecProviderのCodecProvider.get()メソッドをオーバーライドします。isSlaveOk()クラスとReadPreferenceTaggableReadPreferenceクラスから メソッドを削除します。レプリカセットのセカンダリ メンバーからの読み取りが読み込み設定(read preference)で許可されているかどうかを確認するには、代わりにこれらのクラスのisSecondaryOk()メソッドを使用します。collStatsコマンドのDBCollection.getStats()とDBCollection.isCapped()ヘルパー メソッドを削除します。 これらのメソッドの代わりに、$collStats集計パイプライン ステージを使用できます。 このパイプライン ステージの使用方法の例については、Java ドライバー用に4.11の新機能 を参照してください。MapCodecIterableCodecクラスと クラスを削除します。MapCodecの代わりにMapCodecProviderを使用します。IterableCodecの代わりに、CollectionCodecProviderを使用するか、CollectionIterable型にIterableCodecProviderを使用します。クラスと クラスから メソッドと メソッドを削除します。
sharded()nonAtomic()MapReducePublisherMapReduceIterablegeoHaystackインデックスで使用する次のメソッドを排除します。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パッケージから次のクラスを削除します。ConnectionAddedEventConnectionPoolOpenedEventConnectionRemovedEventClusterListenerAdapterConnectionPoolListenerAdapterServerListenerAdapterServerMonitorListenerAdapter
これらの削除により、次のメソッドも
ConnectionPoolListenerインターフェースから削除されました。connectionAddedconnectionPoolOpenedconnectionRemoved
イベントパッケージの詳細については、 com.mongodb を参照してください。イベントパッケージのドキュメント
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クラス
バージョン 4.8 重大な変更
ドライバーは MongoDB Server バージョン v 3.4以前への接続のサポートを終了します。 この変更について詳しくは、「ドライバー バージョン4.8サーバー サポートの変更 」セクションを参照してください。
アプリケーションが OSG コンテナにドライバーを配置し、Java レコードのエンコードとデコードにドライバーに依存する場合は、
org.bson.codecs.recordモジュールに明示的な依存関係を追加する必要があります。v4.6 に実装された は、レコードの
RecordCodecフィールドまたは フィールドの型パラメータとして指定されている POJO とレコード クラスを、それぞれのクラスではなくListMapDocument値として逆シリアル化しました。このバージョンでは、それらを適切なレコードと POJO タイプに逆シリアル化するようになりました。たとえば、次のレコード クラス定義は、
Chapter型パラメータを受け取るListを含むBookレコードを示しています。public record Book(String title, List<Chapter> chapters) {} public record Chapter(Integer number, String text) {} このバージョンから、コーデックは
ListのデータをDocument値ではなくChapterレコード クラスに逆シリアル化します。
バージョン 4.7 の重大な変更
バージョン 4.2 の重大な変更
ObjectIdクラスとそのserialVersionUIDフィールドが更新され、ドライバーのさまざまなバージョン間での直列化の互換性の問題を最小限に抑える新しい形式を使用するようになりました。このバージョン以降のドライバーを使用するアプリケーションが、
ObjectIdを含み、かつ以前のバージョンのドライバーによってシリアル化されたオブジェクトに対して Java オブジェクト直列化を実行しようとすると、Java はInvalidClassExceptionをスローします。Javaオブジェクト直列化の詳細については、直列化可能なオブジェクトに関するJavaドキュメントを参照してください。
バージョン 4.0 の重大な変更
3.12 リリースで非推奨としてマークされているクラスとメソッドの一部は、このバージョンで削除されました。
挿入ヘルパー メソッドは、
voidではなく挿入結果オブジェクトを返します。BsonDocument、Document、 relaxedDbObjectのtoJson()メソッドは、厳密な JSON 形式ではなく JSON 形式で返します。 This makes the JSON documents more readable, but can make it more difficult to identify the BSON type information, such as the difference between a 32-bit and 64-bit integer. アプリケーションが厳密な JSON 形式に依存している場合は、データの読み取りまたは書き込みで厳密モードを使用します。 現在の API で JSON 形式を指定する方法については、ドキュメント データ形式: 拡張 JSONガイドを参照してください。java.util.UUID値のデフォルトの BSON 表現がJAVA_LEGACYからUNSPECIFIEDに変更されました。 UUID 値を保存または検索するアプリケーションでは、使用する表現を明示的に指定する必要があります。MongoClientSettingsのuuidRepresentationプロパティで表現を指定できます。指定する UUID 表現は、ドライバーが UUID をデコードする方法を厳密に制御します。 ドライバーの以前のバージョンでは、
JAVA_LEGACY表現を指定すると、ドライバーはサブタイプ 3 と 4 のバイナリ オブジェクトを UUID としてデコードしていました。 バージョン 4.0 では、JAVA_LEGACY表現はサブタイプ 3 でのみ機能します。UuidRepresentation列挙のメンバーのリストについては、v4.0 APIドキュメントを参照してください。接続プールは、MongoDB への接続を必要とする待機キュー スレッドや非同期タスクの数を制限しなくなりました。 アプリケーションは、
MongoWaitQueueFullExceptionをスローするようにドライバーに依存するのではなく、必要に応じてリクエストを調整する必要があります。ドライバーは
java.util.logging(JUL)パッケージを使用したログ記録はなくなり、SLF4J のログ記録フレームワークのみをサポートします。埋め込みドライバーと Android ドライバーが削除されました。 アプリケーションがこれらのドライバーに依存する場合は、3.x Java ドライバー バージョン を引き続き使用する必要があります。
uber JAR の
mongo-java-driverとmongodb-driverは公開されなくなりました。 アプリケーションがこれらのいずれかに依存している場合は、アプリケーションが使用する API に応じてmongodb-driver-syncまたはmongodb-driver-legacyのいずれかに切り替える必要があります。 依存関係から uber JAR を削除していることを確認してください。挿入ヘルパー メソッドへのメソッド署名の変更など、バイナリ互換性の中断が導入された複数のクラスに対するアップデート。 ドライバーにリンクするすべてのクラスをこのバージョン以降に対して再コンパイルして、クラスが引き続き機能することを確認します。
サーバー リリースの互換性の変更
サーバー リリースの互換性の変更とは、MongoDB Java ドライバーに対する変更で、MongoDB Server の一連のバージョンのサポートを廃止します。
ドライバーは、サポート終了(EOL)に達すると、MongoDB Server バージョンのサポートを終了します。
EOL 製品の MongoDB サポートの詳細については、レガシー サポート ポリシー を参照してください。
ドライバー バージョン5.5 サーバー サポートの変更
v5.5 ドライバーはMongoDB Server 4.0 のサポートを削除します。v5.5 を使用するにはドライバーでは、 MongoDB Server 4.2 以降に接続する必要があります。MongoDB Server配置をアップグレードする方法については、 MongoDB Serverマニュアルの リリースノート を参照してください。
ドライバー バージョン5.2 サーバー サポートの変更
v5.2 ドライバーはMongoDB Server 3.6 のサポートを削除します。v5.2 を使用するにはドライバーでは、 MongoDB Server 4.0 以降に接続する必要があります。MongoDB Server配置をアップグレードする方法については、 MongoDB Serverマニュアルの リリースノート を参照してください。
ドライバー バージョン4.8 サーバー サポートの変更
v4.8 ドライバーはMongoDB Server 3.4 以前のサポートを削除します。v4.8 を使用するにはドライバーでは、 MongoDB Server 3.6 以降に接続する必要があります。MongoDB Server配置をアップグレードする方法については、 MongoDB Serverマニュアルの リリースノート を参照してください。
ドライバー バージョン 3.xサポートの変更
Javaドライバーの 3.x バージョンはMongoDB Server v8.1 に接続できません。MongoDB Server v8.1 以降、buildinfo コマンドは認証を必要とし、v3.x との互換性がありません。ドライバー。