Skip to content

Commit

Permalink
Replace upgrading section in documentation with links to the release …
Browse files Browse the repository at this point in the history
…notes.

Closes: #4228
  • Loading branch information
christophstrobl committed Nov 15, 2022
1 parent cbc718e commit 62f3656
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 364 deletions.
141 changes: 5 additions & 136 deletions README.adoc
Expand Up @@ -93,142 +93,11 @@ and declare the appropriate dependency version.
</repository>
----

== Upgrading from 2.x
[[upgrading]]
== Upgrading

The 4.0 MongoDB Java Driver does no longer support certain features that have already been deprecated in one of the last minor versions.
Some of the changes affect the initial setup configuration as well as compile/runtime features. We summarized the most typical changes one might encounter.

=== XML Namespace

.Changed XML Namespace Elements and Attributes:
|===
| Element / Attribute | 2.x | 3.x

| `<mongo:mongo-client />`
| Used to create a `com.mongodb.MongoClient`
| Now exposes a `com.mongodb.client.MongoClient`

| `<mongo:mongo-client replica-set="..." />`
| Was a comma delimited list of replica set members (host/port)
| Now defines the replica set name. +
Use `<mongo:client-settings cluster-hosts="..." />` instead

| `<mongo:db-factory writeConcern="..." />`
| NONE, NORMAL, SAFE, FSYNC_SAFE, REPLICAS_SAFE, MAJORITY
| W1, W2, W3, UNACKNOWLEDGED, ACKNOWLEDGED, JOURNALED, MAJORITY
|===

.Removed XML Namespace Elements and Attributes:
|===
| Element / Attribute | Replacement in 3.x | Comment

| `<mongo:db-factory mongo-ref="..." />`
| `<mongo:db-factory mongo-client-ref="..." />`
| Referencing a `com.mongodb.client.MongoClient`.

| `<mongo:mongo-client credentials="..." />`
| `<mongo:mongo-client credential="..." />`
| Single authentication data instead of list.

| `<mongo:client-options />`
| `<mongo:client-settings />`
| See `com.mongodb.MongoClientSettings` for details.
|===

.New XML Namespace Elements and Attributes:
|===
| Element | Comment

| `<mongo:db-factory mongo-client-ref="..." />`
| Replacement for `<mongo:db-factory mongo-ref="..." />`

| `<mongo:db-factory connection-string="..." />`
| Replacement for `uri` and `client-uri`.

| `<mongo:mongo-client connection-string="..." />`
| Replacement for `uri` and `client-uri`.

| `<mongo:client-settings />`
| Namespace element for `com.mongodb.MongoClientSettings`.

|===

=== Java Configuration

.Java API changes
|===
| Type | Comment

| `MongoClientFactoryBean`
| Creates `com.mongodb.client.MongoClient` instead of `com.mongodb.MongoClient` +
Uses `MongoClientSettings` instead of `MongoClientOptions`.

| `MongoDataIntegrityViolationException`
| Uses `WriteConcernResult` instead of `WriteResult`.

| `BulkOperationException`
| Uses `MongoBulkWriteException` and `com.mongodb.bulk.BulkWriteError` instead of `BulkWriteException` and `com.mongodb.BulkWriteError`

| `ReactiveMongoClientFactoryBean`
| Uses `com.mongodb.MongoClientSettings` instead of `com.mongodb.async.client.MongoClientSettings`

| `ReactiveMongoClientSettingsFactoryBean`
| Now produces `com.mongodb.MongoClientSettings` instead of `com.mongodb.async.client.MongoClientSettings`
|===

.Removed Java API:
|===
| 2.x | Replacement in 3.x | Comment

| `MongoClientOptionsFactoryBean`
| `MongoClientSettingsFactoryBean`
| Creating a `com.mongodb.MongoClientSettings`.

| `AbstractMongoConfiguration`
| `AbstractMongoClientConfiguration` +
(Available since 2.1)
| Using `com.mongodb.client.MongoClient`.

| `MongoDbFactory#getLegacyDb()`
| -
| -

| `SimpleMongoDbFactory`
| `SimpleMongoClientDbFactory` +
(Available since 2.1)
|

| `MapReduceOptions#getOutputType()`
| `MapReduceOptions#getMapReduceAction()`
| Returns `MapReduceAction` instead of `MapReduceCommand.OutputType`.

| `Meta\|Query` maxScan & snapshot
|
|
|===

=== Other Changes

==== UUID Types

The MongoDB UUID representation can now be configured with different formats.
This has to be done via `MongoClientSettings` as shown in the snippet below.

.UUID Codec Configuration
====
[source,java]
----
static class Config extends AbstractMongoClientConfiguration {
@Override
public void configureClientSettings(MongoClientSettings.Builder builder) {
builder.uuidRepresentation(UuidRepresentation.STANDARD);
}
// ...
}
----
====
Instructions for how to upgrade from earlier versions of Spring Data are provided on the project https://github.com/spring-projects/spring-data-commons/wiki[wiki].
Follow the links in the https://github.com/spring-projects/spring-data-commons/wiki#release-notes[release notes section] to find the version that you want to upgrade to.

[[getting-help]]
== Getting Help
Expand Down Expand Up @@ -313,7 +182,7 @@ To initialize the replica set, start a mongo client:
[source,bash]
----
$ $MONGODB_HOME/bin/mongo
MongoDB server version: 5.0.0
MongoDB server version: 6.0.0
...
----

Expand Down
235 changes: 7 additions & 228 deletions src/main/asciidoc/upgrading.adoc
@@ -1,231 +1,10 @@
[[upgrading.2-3]]
= Upgrading from 2.x to 3.x
[[upgrading.data-mongo]]
= Upgrading

Spring Data MongoDB 3.x requires the MongoDB Java Driver 4.x. +
The 4.0 MongoDB Java Driver does no longer support certain features that have already been deprecated in one of the last minor versions.
Some of the changes affect the initial setup configuration as well as compile/runtime features.
We summarized the most typical changes one might encounter.
include::{spring-data-commons-docs}/upgrade.adoc[leveloffset=+1]

Things to keep in mind when using the 4.0 driver:
[[upgrading.3-4]]
== Upgrading MongoDB Drivers

* `IndexOperations.resetIndexCache()` is no longer supported.
* Any `MapReduceOptions.extraOption` is silently ignored.
* `WriteResult` no longer holds error information but, instead, throws an `Exception`.
* `MongoOperations.executeInSession(…)` no longer calls `requestStart` and `requestDone`.
* Index name generation has become a driver-internal operation.
Spring Data MongoDB still uses the 2.x schema to generate names.
* Some `Exception` messages differ between the generation 2 and 3 servers as well as between the MMap.v1 and WiredTiger storage engines.

== Dependency Changes

Instead of the single artifact uber-jar `mongo-java-driver`, imports are now split to include separate artifacts:

* `org.mongodb:mongodb-driver-core` (required)
* `org.mongodb:mongodb-driver-sync` (optional)
* `org.mongodb:mongodb-driver-reactivestreams` (optional)

Depending on the application one of the `mongodb-driver-sync`, `mongodb-driver-reactivestreams` artifacts is is required next to the mandatory `mongodb-driver-core`.
It is possible to combine the sync and reactive drivers in one application if needed.

== Java Configuration

.Java API changes
|===
Type | Comment

| `MongoClientFactoryBean`
| Creates `com.mongodb.client.MongoClient` instead of `com.mongodb.MongoClient` +
Uses `MongoClientSettings` instead of `MongoClientOptions`.

| `MongoDataIntegrityViolationException`
| Uses `WriteConcernResult` instead of `WriteResult`.

| `BulkOperationException`
| Uses `MongoBulkWriteException` and `com.mongodb.bulk.BulkWriteError` instead of `BulkWriteException` and `com.mongodb.BulkWriteError`

| `ReactiveMongoClientFactoryBean`
| Uses `com.mongodb.MongoClientSettings` instead of `com.mongodb.async.client.MongoClientSettings`

| `ReactiveMongoClientSettingsFactoryBean`
| Now produces `com.mongodb.MongoClientSettings` instead of `com.mongodb.async.client.MongoClientSettings`

| `AbstractMongoClientConfiguration`, `AbstractReactiveMongoConfiguration`
| Configuration methods use parameter injection instead of calling local methods to avoid the need for cglib proxies
|===

.Removed Java API:
|===
2.x | Replacement in 3.x | Comment

| `MongoClientOptionsFactoryBean`
| `MongoClientSettingsFactoryBean`
| Creating a `com.mongodb.MongoClientSettings`.

| `AbstractMongoConfiguration`
| `AbstractMongoClientConfiguration` +
(Available since 2.1)
| Using `com.mongodb.client.MongoClient`.

| `MongoDbFactory#getLegacyDb()`
| -
| -

| `SimpleMongoDbFactory`
| `SimpleMongoClientDbFactory` +
(Available since 2.1)
|

| `MapReduceOptions#getOutputType()`
| `MapReduceOptions#getMapReduceAction()`
| Returns `MapReduceAction` instead of `MapReduceCommand.OutputType`.

| `Meta\|Query` maxScan & snapshot
|
|
|===

== XML Namespace

.Changed XML Namespace Elements and Attributes:
|===
Element / Attribute | 2.x | 3.x

| `<mongo:mongo-client />`
| Used to create a `com.mongodb.MongoClient`
| Now exposes a `com.mongodb.client.MongoClient`

| `<mongo:mongo-client replica-set="..." />`
| Was a comma delimited list of replica set members (host/port)
| Now defines the replica set name. +
Use `<mongo:client-settings cluster-hosts="..." />` instead

| `<mongo:db-factory writeConcern="..." />`
| NONE, NORMAL, SAFE, FSYNC_SAFE, REPLICAS_SAFE, MAJORITY
| W1, W2, W3, UNAKNOWLEDGED, AKNOWLEDGED, JOURNALED, MAJORITY
|===

.Removed XML Namespace Elements and Attributes:
|===
Element / Attribute | Replacement in 3.x | Comment

| `<mongo:db-factory mongo-ref="..." />`
| `<mongo:db-factory mongo-client-ref="..." />`
| Referencing a `com.mongodb.client.MongoClient`.

| `<mongo:mongo-client credentials="..." />`
| `<mongo:mongo-client credential="..." />`
| Single authentication data instead of list.

| `<mongo:client-options />`
| `<mongo:client-settings />`
| See `com.mongodb.MongoClientSettings` for details.
|===

.New XML Namespace Elements and Attributes:
|===
Element | Comment

| `<mongo:db-factory mongo-client-ref="..." />`
| Replacement for `<mongo:db-factory mongo-ref="..." />`

| `<mongo:db-factory connection-string="..." />`
| Replacement for `uri` and `client-uri`.

| `<mongo:mongo-client connection-string="..." />`
| Replacement for `uri` and `client-uri`.

| `<mongo:client-settings />`
| Namespace element for `com.mongodb.MongoClientSettings`.

|===

.Deprecations:
|===
2.x | Replacement in 3.x | Comment

| `MongoDbFactorySupport`
| `MongoDatabaseFactorySupport`
|

| `SimpleMongoClientDbFactory`
| `SimpleMongoClientDatabaseFactory`
|

| `MongoDbFactory`
| `MongoDatabaseFactory`
|

|===

== Other Changes

=== Auto Index Creation

Annotation based index creation is now turned **OFF** by default and needs to be enabled eg. when relying on `@GeoSpatialIndexed`.
Please refer to <<mapping.index-creation>> on how to create indexes programmatically.

.Enable Auto Index Creation
====
.Java
[source,java,role="primary"]
----
@Configuration
public class Config extends AbstractMongoClientConfiguration {
@Override
protected boolean autoIndexCreation() {
return true;
}
// ...
}
----
.XML
[source,xml,role="secondary"]
----
<mongo:mapping-converter auto-index-creation="true" />
----
.Programmatic
[source,java,role="secondary"]
----
MongoDatabaseFactory dbFactory = new SimpleMongoClientDatabaseFactory(...);
DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(dbFactory);
MongoMappingContext mappingContext = new MongoMappingContext();
mappingContext.setAutoIndexCreation(true);
// ...
mappingContext.afterPropertiesSet();
MongoTemplate template = new MongoTemplate(dbFactory, new MappingMongoConverter(dbRefResolver, mappingContext));
----
====

=== UUID Types

The MongoDB UUID representation can now be configured with different formats.
This has to be done via `MongoClientSettings` as shown in the snippet below.

.UUid Codec Configuration
====
[source,java]
----
@Configuration
public class Config extends AbstractMongoClientConfiguration {
@Override
public void configureClientSettings(MongoClientSettings.Builder builder) {
builder.uuidRepresentation(UuidRepresentation.STANDARD);
}
// ...
}
----
====

=== Deferred MongoDatabase lookup in `ReactiveMongoDatabaseFactory`

`ReactiveMongoDatabaseFactory` now returns `Mono<MongoDatabase>` instead of `MongoDatabase` to allow access to the Reactor Subscriber context to enable context-specific routing functionality.

This change affects `ReactiveMongoTemplate.getMongoDatabase()` and `ReactiveMongoTemplate.getCollection()` so both methods must follow deferred retrieval.
Spring Data MongoDB 4.x requires the MongoDB Java Driver 4.8.x +
To learn more about driver versions please visit the https://www.mongodb.com/docs/drivers/java/sync/current/upgrade/[MongoDB Documentation].

0 comments on commit 62f3656

Please sign in to comment.