Skip to content

Commit 3ea428a

Browse files
committed
JAVA-2751: Add What's New section for Java 9 to the reference documentation
1 parent 4752cd1 commit 3ea428a

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

docs/reference/content/whats-new.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,41 @@ title = "What's New"
1111

1212
Key new features of the 3.7 Java driver release:
1313

14+
### Java 9 support
15+
16+
#### Modules
17+
18+
The Java driver now provides a set of JAR files that are compliant with the Java 9
19+
[module specification](http://cr.openjdk.java.net/~mr/jigsaw/spec/), and `Automatic-Module-Name` declarations have been added
20+
to the manifests of those JAR files. See the [Installation Guide]({{<ref "driver/getting-started/installation.md">}})
21+
for information on which JAR files are now Java 9-compliant modules as well as what each of their module names is.
22+
23+
Note that it was not possible to modularize all the existing JAR files due to the fact that, for some of them, packages are split amongst
24+
multiple JAR files, and this violates a core rule of the Java 9 module system which states that at most one module contains classes for any
25+
given package. For instance, the `mongodb-driver` and `mongodb-driver-core` JAR files both contain classes in the `com.mongodb` package,
26+
and thus it's not possible to make both `mongodb-driver` and `mongodb-driver-core` Java 9 modules. Also so-called
27+
"uber jars" like `mongo-java-driver` are not appropriate for Java 9 modularization, as they can conflict with their non-uber brethren, and
28+
thus have not been given module names.
29+
30+
Note that none of the modular JAR files contain `module-info` class files yet. Addition of these classes will be considered in a future
31+
release.
32+
33+
#### New Entry Point
34+
35+
So that the driver can offer a modular option, a new entry point has been added to the `com.mongodb.client` package.
36+
Static methods in this entry point, `com.mongodb.client.MongoClients`, returns instances of a new `com.mongodb.client.MongoClient`
37+
interface. This interface, while similar to the existing `com.mongodb.MongoClient` class in that it is a factory for
38+
`com.mongodb.client.MongoDatabase` instances, does not support the legacy `com.mongodb.DBCollection`-based API, and thus does not suffer
39+
from the aforementioned package-splitting issue that prevents Java 9 modularization. This new entry point is encapsulated in the new
40+
`mongodb-driver-sync` JAR file, which is also a Java 9-compliant module.
41+
42+
The new entry point also moves the driver further in the direction of effective deprecation of the legacy API, which is now only available
43+
only via the `mongo-java-driver` and `mongodb-driver` uber-jars, which are not Java 9 modules. At this point there are no plans to offer
44+
the legacy API as a Java 9 module.
45+
46+
See [Connect To MongoDB]({{<ref "driver/tutorials/connect-to-mongodb.md">}}) for details on the new `com.mongodb.client.MongoClients`
47+
and how it compares to the existing `com.mongodb.MongoClient` class.
48+
1449
### Unix domain socket support
1550

1651
The 3.7 driver adds support for Unix domain sockets via the [`jnr.unixsocket`](http://https://github.com/jnr/jnr-unixsocket) library.

0 commit comments

Comments
 (0)