2.x から 3.x への移行ガイド
Apache Cassandra 3.0 用の Spring Data では、以前のバージョンからアップグレードするときに、一連の重大な変更が導入されます。
依存関係を確認する
Spring Data Cassandra へのアップグレードには、DataStax ドライバーバージョン 4 へのアップグレードが必要です。新しいドライバーへのアップグレードには、推移的な依存関係の変更が伴います。最も注目すべき点は、Google Guava がドライバーによってバンドルされ、シェーディングされることです。ドライバー関連の変更の詳細については、Apache Cassandra 4 用 DataStax Java ドライバーアップグレードガイド (英語) を確認してください。
構成の適応
DataStax Java Driver 4 は、Cluster
オブジェクトと Session
オブジェクトを単一の CqlSession
オブジェクトにマージするため、Cluster
関連の API はすべて削除されました。大部分がファイルベースである DriverConfigLoader
に移動されたほとんどの構成項目を削除することで、構成の大部分が改訂されました。これは、SocketOptions
、AddressTranslator
、その他の多くのオプションが他の方法で構成されることを意味します。
XML ベースの構成を使用している場合は、必ずすべての構成ファイルを cql
名前空間 (www.springframework.org/schema/cql (英語) www.springframework.org/schema/cql/spring-cql.xsd (英語)
) から cassandra
名前空間 (www.springframework.org/schema/data/cassandra (英語) www.springframework.org/schema/data/cassandra/spring-cassandra.xsd (英語)
) に移行してください。
構成ビルダーの変更を反映するために、ClusterBuilderConfigurer
は SessionBuilderConfigurer
に名前変更され、Cluster.Builder
の代わりに CqlSessionBuilder
が受け入れられるようになりました。ロードバランシングを適切に構成するにはローカルデータセンターも必要となるため、構成にローカルデータセンターも必ず指定してください。
接続
Cluster
(cassandra:cluster
) および Session
(cassandra:session
) の構成要素は、キースペースとエンドポイントの両方を構成する単一の CqlSession
(cassandra:session
) 要素にマージされました。
アップグレードにより、スキーマサポートは、SessionFactory
Bean を提供する新しい名前空間要素 cassandra:session-factory
に移動されました。
<cassandra:cluster contact-points="localhost" port="9042">
<cassandra:keyspace action="CREATE_DROP" name="mykeyspace" />
</cassandra:cluster>
<cassandra:session keyspace-name="mykeyspace" schema-action="CREATE">
<cassandra:startup-cql>CREATE TABLE …</cassandra:startup-cql>
</cassandra:session>
<cassandra:session contact-points="localhost" port="9042" keyspace="mykeyspace" local-datacenter="datacenter1">
<cassandra:keyspace action="CREATE_DROP" name="mykeyspace" />
</cassandra:session>
<cassandra:session-factory schema-action="CREATE">
<cassandra:script location="classpath:/schema.cql"/>
</cassandra:session-factory>
Spring Data Cassandra 3.0 は、XML 名前空間構成を使用する場合、デフォルトのマッピングコンテキスト、コンテキスト、テンプレート API Bean を登録しなくなりました。デフォルト設定はアプリケーションまたは Spring Boot レベルで適用する必要があります。 |
テンプレート API
アプリケーションが主にマップされたエンティティまたはプリミティブ Java 型と対話する場合、Apache Cassandra 用の Spring Data は、ドライバーのアップグレードに伴う変更のほとんどをテンプレート API およびリポジトリサポートとしてカプセル化します。
通常、SessionFactory
を使用して CqlTemplate
および CassandraTemplate
オブジェクトを作成することをお勧めします。これは、ファクトリでの使用によりスキーマ作成の同期が可能になり、複数のデータベースを操作するときにある程度の柔軟性が得られるためです。
<cql:template session-ref="…" />
<cassandra:template session-ref="…" cassandra-converter-ref="…"/>
<cassandra:session-factory />
<cassandra:cql-template session-factory-ref="…" />
<cassandra:template session-factory-ref="…" cassandra-converter-ref="…"/>
DataStax ドライバー API を直接使用するすべての場所でコードを調整する必要があります。典型的なケースとしては次のようなものがあります。
ResultSetExtractor
の実装RowCallbackHandler
の実装RowMapper
の実装非同期バリアントとリアクティブバリアントを含む
PreparedStatementCreator
の実装CqlTemplate.queryForResultSet(…)
への呼び出しStatement
を受け入れるメソッドの呼び出し
AsyncCqlTemplate
の変更点
DataStax ドライバー 4 では、非同期で実行されるクエリの結果の種類が変更されました。これらの変更を反映するには、以下を提供するコードを適応させる必要があります。
AsyncSessionCallback
の実装AsyncPreparedStatementCreator
の実装
結果セットの抽出には、DataStax' AsyncResultSet
の新しいインターフェースが必要です。AsyncCqlTemplate
は、以前 ResultSetExtractor
を使用していた場所で AsyncResultSetExtractor
を使用するようになりました。AsyncResultSetExtractor.extractData(…)
はスカラーオブジェクトではなく Future
を返すため、コードを移行するとエクストラクターで完全にノンブロッキングコードを使用できる可能性があることに注意してください。
データモデルの移行
次の機能を使用する場合、データモデルの更新が必要になる場合があります。
@CassandraType
@Table
、@Column
、@PrimaryKeyColumn
、@PrimaryKey
、@UserDefinedType
のforceQuote
java.lang.Date
を使用したプロパティUDTValue
またはTupleValue
を使用したプロパティ
@CassandraType
DataStax ドライバー 4 には、Cassandra 型を記述する Name
列挙が同梱されなくなりました。CassandraType.Name
による列挙を再導入することにしました。新しく導入された置換型を使用するようにインポートを更新してください。
その他の変更点
ドライバーの
ConsistencyLevel
定数クラスは削除され、DefaultConsistencyLevel
として再導入されました。@Consistency
はDefaultConsistencyLevel
に適応されました。QueryOptions
および… CqlTemplate
型のRetryPolicy
は交換せずに削除されました。ドライバーの
PagingState
型は削除されました。ページング状態ではByteBuffer
が使用されるようになりました。SimpleUserTypeResolver
は、Cluster
の代わりにCqlSession
を受け入れます。SimpleTupleTypeFactory
はenum
に移行されました。SimpleTupleTypeFactory.INSTANCE
はCluster
/CqlSession
コンテキストを必要としなくなりました。QueryBuilder API が不変のステートメント型を使用するため、ステートメントを関数に構築するための
StatementBuilder
の導入。Session
Bean はsession
からcassandraSession
に名前変更され、SessionFactory
Bean はsessionFactory
からcassandraSessionFactory
に名前変更されました。ReactiveSession
Bean はreactiveSession
からreactiveCassandraSession
に名前変更され、ReactiveSessionFactory
Bean はreactiveSessionFactory
からreactiveCassandraSessionFactory
に名前変更されました。ReactiveSessionFactory.getSession()
はMono<ReactiveSession>
を返すようになりました。以前はReactiveSession
のみを返していました。データ型解決が
ColumnTypeResolver
に移動されたため、すべてのDataType
関連メソッドがCassandraPersistentEntity
/CassandraPersistentProperty
からColumnTypeResolver
に移動されました (影響を受けるメソッドはMappingContext.getDataType(…)
、CassandraPersistentProperty.getDataType()
、CassandraPersistentEntity.getUserType()
、CassandraPersistentEntity.getTupleType()
)。スキーマの作成は
MappingContext
からSchemaFactory
に移動されました (影響を受けるメソッドはCassandraMappingContext.getCreateTableSpecificationFor(…)
、CassandraMappingContext.getCreateIndexSpecificationsFor(…)
、CassandraMappingContext.getCreateUserTypeSpecificationFor(…)
です)。
非推奨
CassandraCqlSessionFactoryBean
の場合は、代わりにCqlSessionFactoryBean
を使用してください。KeyspaceIdentifier
およびCqlIdentifier
の場合は、代わりにcom.datastax.oss.driver.api.core.CqlIdentifier
を使用してください。CassandraSessionFactoryBean
の場合は、代わりにCqlSessionFactoryBean
を使用してください。AbstractCqlTemplateConfiguration
の場合は、代わりにAbstractSessionConfiguration
を使用してください。AbstractSessionConfiguration.getClusterName()
の場合は、代わりにAbstractSessionConfiguration.getSessionName()
を使用してください。CodecRegistryTupleTypeFactory
の場合は、代わりにSimpleTupleTypeFactory
を使用してください。Spring Data の
CqlIdentifier
の場合は、代わりにドライバーCqlIdentifier
を使用してください。forceQuote
属性は引用符で囲む必要がなくなりました。CqlIdentifier
は予約キーワードを適切にエスケープし、大文字と小文字を区別します。QueryOptions
および… CqlTemplate
型のfetchSize
は非推奨になりました。代わりにpageSize
を使用してくださいCassandraMappingContext.setUserTypeResolver(…)
、CassandraMappingContext.setCodecRegistry(…)
、CassandraMappingContext.setCustomConversions(…)
: これらのプロパティをCassandraConverter
で構成します。TupleTypeFactory
およびCassandraMappingContext.setTupleTypeFactory(…)
: Cassandra ドライバーはDataTypes.tupleOf(…)
ファクトリメソッドで提供されるため、TupleTypeFactory
は使用されなくなりました。CqlSessionFactoryBean
(cassandra:session
) によるスキーマの作成は非推奨になりました。CqlSessionFactoryBean
(cassandra:session
) によるキースペースの作成は影響を受けません。
削除
構成 API
PoolingOptionsFactoryBean
SocketOptionsFactoryBean
CassandraClusterFactoryBean
CassandraClusterParser
CassandraCqlClusterFactoryBean
CassandraCqlClusterParser
CassandraCqlSessionParser
AbstractClusterConfiguration
ClusterBuilderConfigurer
(代わりにSessionBuilderConfigurer
を使用してください)
ユーティリティ
GuavaListenableFutureAdapter
ConsistencyLevel
およびRetryPolicy
引数を取るQueryOptions
およびWriteOptions
コンストラクター。ビルダーを実行プロファイルと組み合わせて置き換えとして使用します。CassandraAccessor.setRetryPolicy(…)
およびReactiveCqlTemplate.setRetryPolicy(…)
メソッド。実行プロファイルを置き換えとして使用します。
名前空間サポート
cql
名前空間 (www.springframework.org/schema/cql (英語)
、代わりにwww.springframework.org/schema/data/cassandra (英語)
を使用してください)cassandra:cluster
(cassandra:session
にマージされたエンドポイントプロパティ)cql:template
、代わりにcassandra:cql-template
を使用してください暗黙的な Bean 登録マッピングコンテキスト、コンテキスト、テンプレート API Bean を削除しました。これらは明示的に宣言する必要があります。