Skip to content

Commit dbb752c

Browse files
committed
Introduce a preview feature status
The preview feature status better defines the status of some of the new features and has a more definitive description.
1 parent 7f0a194 commit dbb752c

File tree

11 files changed

+95
-20
lines changed

11 files changed

+95
-20
lines changed

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,25 @@ As a policy, patch versions will not be released except on rare occasions. Bug f
2424

2525
The compatibility with Neo4j Server versions is documented in the [Neo4j Knowledge Base](https://neo4j.com/developer/kb/neo4j-supported-versions/).
2626

27+
## Preview features
28+
29+
The preview feature is a new feature that is a candidate for a future <abbr title="Generally Available">GA</abbr>
30+
status.
31+
32+
It enables users to try the feature out and maintainers to refine and update it.
33+
34+
The preview features are not considered to be experimental, temporary or unstable.
35+
36+
However, they may change more rapidly, without following the usual deprecation cycle.
37+
38+
Most preview features are expected to be granted the GA status unless some unexpected conditions arise.
39+
40+
Due to the increased flexibility of the preview status, user feedback is encouraged so that it can be considered before
41+
the GA status.
42+
43+
Every feature gets a dedicated [GitHub Discussion](https://github.com/neo4j/neo4j-java-driver/discussions/categories/preview-features)
44+
where feedback may be shared.
45+
2746
## Usage
2847

2948
This section provides general information for engineers who are building Neo4j-backed applications.

driver/src/main/java/org/neo4j/driver/BookmarkManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
import java.io.Serializable;
2222
import java.util.Set;
23-
import org.neo4j.driver.util.Experimental;
23+
import org.neo4j.driver.util.Preview;
2424

2525
/**
2626
* Keeps track of bookmarks and is used by the driver to ensure causal consistency between sessions and query executions.
@@ -31,7 +31,7 @@
3131
*
3232
* @see org.neo4j.driver.SessionConfig.Builder#withBookmarkManager(BookmarkManager)
3333
*/
34-
@Experimental
34+
@Preview(name = "Bookmark Manager")
3535
public interface BookmarkManager extends Serializable {
3636
/**
3737
* Updates bookmarks by deleting the given previous bookmarks and adding the new bookmarks.

driver/src/main/java/org/neo4j/driver/BookmarkManagers.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
package org.neo4j.driver;
2020

2121
import org.neo4j.driver.internal.Neo4jBookmarkManager;
22-
import org.neo4j.driver.util.Experimental;
22+
import org.neo4j.driver.util.Preview;
2323

2424
/**
2525
* Setups new instances of {@link BookmarkManager}.
2626
*/
27-
@Experimental
27+
@Preview(name = "Bookmark Manager")
2828
public final class BookmarkManagers {
2929
private BookmarkManagers() {}
3030
/**

driver/src/main/java/org/neo4j/driver/Config.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.neo4j.driver.net.ServerAddressResolver;
4242
import org.neo4j.driver.util.Experimental;
4343
import org.neo4j.driver.util.Immutable;
44+
import org.neo4j.driver.util.Preview;
4445

4546
/**
4647
* A configuration class to config driver properties.
@@ -187,7 +188,7 @@ private Config(ConfigBuilder builder) {
187188
* @return bookmark manager, must not be {@code null}
188189
* @since 5.5
189190
*/
190-
@Experimental
191+
@Preview(name = "Driver Level Queries")
191192
public BookmarkManager queryTaskBookmarkManager() {
192193
return queryBookmarkManager;
193194
}
@@ -393,7 +394,7 @@ private ConfigBuilder() {}
393394
* @return this builder
394395
* @since 5.5
395396
*/
396-
@Experimental
397+
@Preview(name = "Driver Level Queries")
397398
public ConfigBuilder withQueryTaskBookmarkManager(BookmarkManager bookmarkManager) {
398399
Objects.requireNonNull(bookmarkManager, "bookmarkManager must not be null");
399400
this.queryBookmarkManager = bookmarkManager;

driver/src/main/java/org/neo4j/driver/Driver.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.neo4j.driver.reactive.RxSession;
2626
import org.neo4j.driver.types.TypeSystem;
2727
import org.neo4j.driver.util.Experimental;
28+
import org.neo4j.driver.util.Preview;
2829

2930
/**
3031
* Accessor for a specific Neo4j graph database.
@@ -71,7 +72,7 @@ public interface Driver extends AutoCloseable {
7172
* @return new query task instance
7273
* @since 5.5
7374
*/
74-
@Experimental
75+
@Preview(name = "Driver Level Queries")
7576
QueryTask queryTask(String query);
7677

7778
/**
@@ -80,7 +81,7 @@ public interface Driver extends AutoCloseable {
8081
* @return bookmark manager, must not be {@code null}
8182
* @since 5.6
8283
*/
83-
@Experimental
84+
@Preview(name = "Driver Level Queries")
8485
BookmarkManager queryTaskBookmarkManager();
8586

8687
/**

driver/src/main/java/org/neo4j/driver/EagerResult.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020

2121
import java.util.List;
2222
import org.neo4j.driver.summary.ResultSummary;
23-
import org.neo4j.driver.util.Experimental;
23+
import org.neo4j.driver.util.Preview;
2424

2525
/**
2626
* An in-memory result of executing a Cypher query that has been consumed in full.
2727
* @since 5.5
2828
*/
29-
@Experimental
29+
@Preview(name = "Driver Level Queries")
3030
public interface EagerResult {
3131
/**
3232
* Returns the keys of the records this result contains.

driver/src/main/java/org/neo4j/driver/QueryConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@
2424
import java.io.Serializable;
2525
import java.util.Objects;
2626
import java.util.Optional;
27-
import org.neo4j.driver.util.Experimental;
27+
import org.neo4j.driver.util.Preview;
2828

2929
/**
3030
* Query configuration used by {@link Driver#queryTask(String)} and its variants.
3131
* @since 5.5
3232
*/
33-
@Experimental
33+
@Preview(name = "Driver Level Queries")
3434
public final class QueryConfig implements Serializable {
3535
@Serial
3636
private static final long serialVersionUID = -2632780731598141754L;

driver/src/main/java/org/neo4j/driver/QueryTask.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import java.util.stream.Collectors;
2727
import org.neo4j.driver.internal.EagerResultValue;
2828
import org.neo4j.driver.summary.ResultSummary;
29-
import org.neo4j.driver.util.Experimental;
29+
import org.neo4j.driver.util.Preview;
3030

3131
/**
3232
* A task that executes a query in a managed transaction with automatic retries on retryable errors.
@@ -97,7 +97,7 @@
9797
*
9898
* @since 5.5
9999
*/
100-
@Experimental
100+
@Preview(name = "Driver Level Queries")
101101
public interface QueryTask {
102102
/**
103103
* Sets query parameters.
@@ -167,7 +167,7 @@ default <T> T execute(Collector<Record, ?, T> recordCollector) {
167167
* @param <T> the final value type
168168
* @since 5.5
169169
*/
170-
@Experimental
170+
@Preview(name = "Driver Level Queries")
171171
@FunctionalInterface
172172
interface ResultFinisher<S, T> {
173173
/**

driver/src/main/java/org/neo4j/driver/RoutingControl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@
1818
*/
1919
package org.neo4j.driver;
2020

21-
import org.neo4j.driver.util.Experimental;
21+
import org.neo4j.driver.util.Preview;
2222

2323
/**
2424
* Defines routing mode for query.
2525
* @since 5.5
2626
*/
27-
@Experimental
27+
@Preview(name = "Driver Level Queries")
2828
public enum RoutingControl {
2929
/**
3030
* Routes to the leader of the cluster.

driver/src/main/java/org/neo4j/driver/SessionConfig.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import org.neo4j.driver.exceptions.UnsupportedFeatureException;
3131
import org.neo4j.driver.reactive.ReactiveSession;
3232
import org.neo4j.driver.reactive.RxSession;
33-
import org.neo4j.driver.util.Experimental;
33+
import org.neo4j.driver.util.Preview;
3434
import org.reactivestreams.Subscription;
3535

3636
/**
@@ -162,7 +162,7 @@ public Optional<String> impersonatedUser() {
162162
*
163163
* @return bookmark implementation
164164
*/
165-
@Experimental
165+
@Preview(name = "Bookmark Manager")
166166
public Optional<BookmarkManager> bookmarkManager() {
167167
return Optional.ofNullable(bookmarkManager);
168168
}
@@ -377,7 +377,7 @@ public Builder withImpersonatedUser(String impersonatedUser) {
377377
* @param bookmarkManager bookmark manager implementation. Providing {@code null} effectively disables bookmark manager.
378378
* @return this builder.
379379
*/
380-
@Experimental
380+
@Preview(name = "Bookmark Manager")
381381
public Builder withBookmarkManager(BookmarkManager bookmarkManager) {
382382
this.bookmarkManager = bookmarkManager;
383383
return this;
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
* Copyright (c) "Neo4j"
3+
* Neo4j Sweden AB [http://neo4j.com]
4+
*
5+
* This file is part of Neo4j.
6+
*
7+
* Licensed under the Apache License, Version 2.0 (the "License");
8+
* you may not use this file except in compliance with the License.
9+
* You may obtain a copy of the License at
10+
*
11+
* http://www.apache.org/licenses/LICENSE-2.0
12+
*
13+
* Unless required by applicable law or agreed to in writing, software
14+
* distributed under the License is distributed on an "AS IS" BASIS,
15+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
* See the License for the specific language governing permissions and
17+
* limitations under the License.
18+
*/
19+
package org.neo4j.driver.util;
20+
21+
import java.lang.annotation.Documented;
22+
import java.lang.annotation.ElementType;
23+
import java.lang.annotation.Inherited;
24+
import java.lang.annotation.Retention;
25+
import java.lang.annotation.RetentionPolicy;
26+
import java.lang.annotation.Target;
27+
28+
/**
29+
* A marker annotation indicating that the annotated target belongs to a preview feature.
30+
* <p>
31+
* The preview feature is a new feature that is a candidate for a future GA status. It enables users to try the feature
32+
* out and maintainers to refine and update it.
33+
* <p>
34+
* The preview features are not considered to be experimental, temporary or unstable. However, they may change more
35+
* rapidly without the deprecation cycle. Most preview features are expected to be granted the GA status unless some
36+
* unexpected conditions arise.
37+
* <p>
38+
* Due to the increased flexibility of the preview status, user feedback is encouraged so that it can be considered
39+
* before the GA status. See the driver's README for details on how to provide the feedback.
40+
*
41+
* @since 5.7
42+
*/
43+
@Inherited
44+
@Retention(RetentionPolicy.RUNTIME)
45+
@Documented
46+
@Target({ElementType.TYPE, ElementType.METHOD})
47+
public @interface Preview {
48+
/**
49+
* The feature name or a reference.
50+
*
51+
* @return the feature name or a reference
52+
*/
53+
String name();
54+
}

0 commit comments

Comments
 (0)