ドライバーのバージョンをアップグレードする
Overview
このセクションでは、ドライバーを新しいバージョンにアップグレードするためにアプリケーションに加える必要がある変更を特定できます。
アップグレードする前に、次のアクションを実行してください。
新しいバージョンが、アプリケーションが接続する MongoDB Server のバージョン および アプリケーションを実行する Java ランタイム環境(JRE)と互換性があることを確認します。 この情報については、 Java 互換性ページを参照してください。
アプリケーションが使用しているドライバーの現在のバージョンとアップグレード予定のバージョンとの間の重大な変更について、 重大な変更セクションで対処します。 MongoDB Server リリースの互換性の変更の詳細については、「サーバー リリースの互換性の変更 」セクションを参照してください。
Tip
将来ドライバー バージョンをアップグレードする際にアプリケーションで必要になる可能性のある変更量を最小限に抑えるには、 Stable API を使用します。
重大な変更
重大な変更とは、特定のバージョンのドライバーにおける規則または動作の変更であり、アップグレードする前に対処しないと、アプリケーションが正常に動作しなくなる可能性があります。
このセクションの重大な変更は、それを導入したドライバーのバージョンによって分類されます。 ドライバーのバージョンをアップグレードするときは、現在のバージョンとアップグレードのバージョン間のすべての重大な変更に対処してください。 例えば、ドライバーを v4.0 から v4.5 にアップグレードする場合は、v4.5 にリストされている重大な変更を含む、v4.0 以降のバージョンからのすべての重大な変更に対処します。
バージョン 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.annotations
org.bson.codecs.pojo.annotations
パッケージの同じ名前の注釈に置き換えます。BsonId
BsonProperty
BsonRepresentation
メソッドと
SocketSettings.Builder.connectTimeout()
SocketSettings.Builder.readTimeout()
メソッドのタイムアウト期間パラメータのデータ型を変更します。このパラメータのデータ型は、int
ではなくlong
になりました。以前のバージョンでは、このパラメータは両方のメソッドでタイプ
int
でした。 この変更によりバイナリの互換性が損なわれるため、再コンパイルが必要になりますが、コードの変更は必要ありません。SocketSettings
メソッドを呼び出す方法を示す例については、「 MongoClient 設定の指定 」ガイドの「 SocketSettings の例」を参照してください。ベクトル検索を実行するときに等価フィルターを構築できるようにした
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()
クラスとReadPreference
TaggableReadPreference
クラスから メソッドを削除します。レプリカセットのセカンダリ メンバーからの読み取りが読み込み設定(read preference)で許可されているかどうかを確認するには、代わりにこれらのクラスのisSecondaryOk()
メソッドを使用します。collStats
コマンドのDBCollection.getStats()
とDBCollection.isCapped()
ヘルパー メソッドを削除します。 これらのメソッドの代わりに、$collStats
集計パイプライン ステージを使用できます。 このパイプライン ステージの使用方法の例については、Java ドライバー用に4.11の新機能 を参照してください。MapCodec
IterableCodec
クラスと クラスを削除します。MapCodec
の代わりにMapCodecProvider
を使用します。IterableCodec
の代わりに、CollectionCodecProvider
を使用するか、Collection
Iterable
型にIterableCodecProvider
を使用します。クラスと クラスから メソッドと メソッドを削除します。
sharded()
nonAtomic()
MapReducePublisher
MapReduceIterable
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
クラス
バージョン 4.8 重大な変更
ドライバーは MongoDB Server バージョン v 3.4以前への接続のサポートを終了します。 この変更について詳しくは、「ドライバー バージョン4.8サーバー サポートの変更 」セクションを参照してください。
アプリケーションが OSG コンテナにドライバーを配置し、Java レコードのエンコードとデコードにドライバーに依存する場合は、
org.bson.codecs.record
モジュールに明示的な依存関係を追加する必要があります。v4.6 に実装された は、レコードの
RecordCodec
フィールドまたは フィールドの型パラメータとして指定されている POJO とレコード クラスを、それぞれのクラスではなくList
Map
Document
値として逆シリアル化しました。このバージョンでは、それらを適切なレコードと POJO タイプに逆シリアル化するようになりました。たとえば、次のレコード クラス定義は、
Chapter
型パラメータを受け取るList
を含むBook
レコードを示しています。public record Book(String title, List<Chapter> chapters) {} public record Chapter(Integer number, String text) {} このバージョンから、コーデックは
List
のデータをDocument
値ではなくChapter
レコード クラスに逆シリアル化します。
バージョン 4.7 の重大な変更
setWindowFields
ビルダAPIはbetaではなくなりました。 新しいビルダはバイナリとソースの互換性を破棄します。 集計 API ドキュメントsetWindowFields()
を参照してください 新しい メソッド署名の情報については、 を参照してください。アプリケーションが v4.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
4.0v 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 サポートの詳細については、レガシー サポート ポリシー を参照してください。
サーバー バージョン8.1 サポートの変更
Java ドライバーの3 .x バージョンを使用して MongoDB Server v 8.1 700} を実行している配置に接続することはできません。 MongoDB Server v 8.1以降、 buildinfo
コマンドは認証を必要とするため、v 3 .x ドライバー。
ドライバー バージョン4.8 サーバー サポートの変更
v 4.8ドライバーは MongoDB Server v 3.4以前のサポートを削除します。 v 4.8を使用するには ドライバーに設定されている場合、MongoDB Server は v 3.6である必要があります。 以降に更新します。 MongoDB Server 配置をアップグレードする方法については、MongoDB Server マニュアルのリリースノートを参照してください。