20
20
import static org .neo4j .driver .internal .logging .DevNullLogging .DEV_NULL_LOGGING ;
21
21
import static org .neo4j .driver .internal .util .DriverInfoUtil .driverVersion ;
22
22
23
+ import io .netty .channel .EventLoop ;
23
24
import java .io .File ;
24
25
import java .io .Serial ;
25
26
import java .io .Serializable ;
28
29
import java .util .Collections ;
29
30
import java .util .List ;
30
31
import java .util .Objects ;
32
+ import java .util .Optional ;
33
+ import java .util .Set ;
31
34
import java .util .concurrent .TimeUnit ;
32
35
import java .util .logging .Level ;
36
+ import java .util .stream .Collectors ;
37
+ import org .neo4j .driver .async .AsyncSession ;
33
38
import org .neo4j .driver .exceptions .UnsupportedFeatureException ;
39
+ import org .neo4j .driver .internal .InternalNotificationConfig ;
34
40
import org .neo4j .driver .internal .SecuritySettings ;
35
41
import org .neo4j .driver .internal .async .pool .PoolSettings ;
36
42
import org .neo4j .driver .internal .cluster .RoutingSettings ;
39
45
import org .neo4j .driver .net .ServerAddressResolver ;
40
46
import org .neo4j .driver .util .Experimental ;
41
47
import org .neo4j .driver .util .Immutable ;
48
+ import org .neo4j .driver .util .Resource ;
42
49
43
50
/**
44
51
* A configuration class to config driver properties.
@@ -140,6 +147,7 @@ public final class Config implements Serializable {
140
147
/**
141
148
* The notification config.
142
149
*/
150
+ @ SuppressWarnings ("deprecation" )
143
151
private final NotificationConfig notificationConfig ;
144
152
/**
145
153
* The {@link MetricsAdapter}.
@@ -223,6 +231,7 @@ public int connectionTimeoutMillis() {
223
231
224
232
/**
225
233
* Returns the maximum connection pool size.
234
+ *
226
235
* @return the maximum size
227
236
*/
228
237
public int maxConnectionPoolSize () {
@@ -231,6 +240,7 @@ public int maxConnectionPoolSize() {
231
240
232
241
/**
233
242
* Returns the connection acquisition timeout in milliseconds.
243
+ *
234
244
* @return the acquisition timeout
235
245
*/
236
246
public long connectionAcquisitionTimeoutMillis () {
@@ -296,6 +306,7 @@ public long maxTransactionRetryTimeMillis() {
296
306
297
307
/**
298
308
* Returns the fetch size.
309
+ *
299
310
* @return the fetch size
300
311
*/
301
312
public long fetchSize () {
@@ -304,15 +315,42 @@ public long fetchSize() {
304
315
305
316
/**
306
317
* Returns notification config.
318
+ *
307
319
* @return the notification config
308
320
* @since 5.7
321
+ * @deprecated superseded by {@link #minimumNotificationSeverity()} and
322
+ * {@link #disabledNotificationClassifications()}
309
323
*/
324
+ @ Deprecated
310
325
public NotificationConfig notificationConfig () {
311
326
return notificationConfig ;
312
327
}
313
328
314
329
/**
315
- * Returns the number of {@link io.netty.channel.EventLoop} threads.
330
+ * Returns a minimum notification severity.
331
+ *
332
+ * @return an {@link Optional} of minimum {@link NotificationSeverity} or an empty {@link Optional} if it is not set
333
+ * @since 5.22.0
334
+ */
335
+ public Optional <NotificationSeverity > minimumNotificationSeverity () {
336
+ return Optional .ofNullable (((InternalNotificationConfig ) notificationConfig ).minimumSeverity ());
337
+ }
338
+
339
+ /**
340
+ * Returns a set of disabled notification classifications.
341
+ * @return the {@link Set} of disabled {@link NotificationClassification}
342
+ * @since 5.22.0
343
+ */
344
+ public Set <NotificationClassification > disabledNotificationClassifications () {
345
+ return ((InternalNotificationConfig ) notificationConfig )
346
+ .disabledCategories ().stream ()
347
+ .map (NotificationClassification .class ::cast )
348
+ .collect (Collectors .toUnmodifiableSet ());
349
+ }
350
+
351
+ /**
352
+ * Returns the number of {@link EventLoop} threads.
353
+ *
316
354
* @return the number of threads
317
355
*/
318
356
public int eventLoopThreads () {
@@ -328,6 +366,7 @@ public boolean isMetricsEnabled() {
328
366
329
367
/**
330
368
* Returns the {@link MetricsAdapter}.
369
+ *
331
370
* @return the metrics adapter
332
371
*/
333
372
public MetricsAdapter metricsAdapter () {
@@ -373,6 +412,8 @@ public static final class ConfigBuilder {
373
412
private MetricsAdapter metricsAdapter = MetricsAdapter .DEV_NULL ;
374
413
private long fetchSize = FetchSizeUtil .DEFAULT_FETCH_SIZE ;
375
414
private int eventLoopThreads = 0 ;
415
+
416
+ @ SuppressWarnings ("deprecation" )
376
417
private NotificationConfig notificationConfig = NotificationConfig .defaultConfig ();
377
418
378
419
private boolean telemetryDisabled = false ;
@@ -399,7 +440,7 @@ public ConfigBuilder withLogging(Logging logging) {
399
440
* Enable logging of leaked sessions.
400
441
* <p>
401
442
* Each {@link Session session} is associated with a network connection and thus is a
402
- * {@link org.neo4j.driver.util. Resource resource} that needs to be explicitly closed.
443
+ * {@link Resource resource} that needs to be explicitly closed.
403
444
* Unclosed sessions will result in socket leaks and could cause {@link OutOfMemoryError}s.
404
445
* <p>
405
446
* Session is considered to be leaked when it is finalized via {@link Object#finalize()} while not being
@@ -579,8 +620,8 @@ public ConfigBuilder withTrustStrategy(TrustStrategy trustStrategy) {
579
620
public ConfigBuilder withRoutingTablePurgeDelay (long delay , TimeUnit unit ) {
580
621
var routingTablePurgeDelayMillis = unit .toMillis (delay );
581
622
if (routingTablePurgeDelayMillis < 0 ) {
582
- throw new IllegalArgumentException (String . format (
583
- "The routing table purge delay may not be smaller than 0, but was %d %s." , delay , unit ));
623
+ throw new IllegalArgumentException (
624
+ format ( "The routing table purge delay may not be smaller than 0, but was %d %s." , delay , unit ));
584
625
}
585
626
this .routingTablePurgeDelayMillis = routingTablePurgeDelayMillis ;
586
627
return this ;
@@ -591,11 +632,11 @@ public ConfigBuilder withRoutingTablePurgeDelay(long delay, TimeUnit unit) {
591
632
* This config is only valid when the driver is used with servers that support Bolt V4 (Server version 4.0 and later).
592
633
* <p>
593
634
* Bolt V4 enables pulling records in batches to allow client to take control of data population and apply back pressure to server.
594
- * This config specifies the default fetch size for all query runs using {@link Session} and {@link org.neo4j.driver.async. AsyncSession}.
635
+ * This config specifies the default fetch size for all query runs using {@link Session} and {@link AsyncSession}.
595
636
* By default, the value is set to {@code 1000}.
596
637
* Use {@code -1} to disables back pressure and config client to pull all records at once after each run.
597
638
* <p>
598
- * This config only applies to run results obtained via {@link Session} and {@link org.neo4j.driver.async. AsyncSession}.
639
+ * This config only applies to run results obtained via {@link Session} and {@link AsyncSession}.
599
640
* As with the reactive sessions the batch size is managed by the subscription requests instead.
600
641
*
601
642
* @param size the default record fetch size when pulling records in batches using Bolt V4.
@@ -627,11 +668,11 @@ public ConfigBuilder withConnectionTimeout(long value, TimeUnit unit) {
627
668
var connectionTimeoutMillis = unit .toMillis (value );
628
669
if (connectionTimeoutMillis < 0 ) {
629
670
throw new IllegalArgumentException (
630
- String . format ("The connection timeout may not be smaller than 0, but was %d %s." , value , unit ));
671
+ format ("The connection timeout may not be smaller than 0, but was %d %s." , value , unit ));
631
672
}
632
673
var connectionTimeoutMillisInt = (int ) connectionTimeoutMillis ;
633
674
if (connectionTimeoutMillisInt != connectionTimeoutMillis ) {
634
- throw new IllegalArgumentException (String . format (
675
+ throw new IllegalArgumentException (format (
635
676
"The connection timeout must represent int value when converted to milliseconds %d." ,
636
677
connectionTimeoutMillis ));
637
678
}
@@ -655,7 +696,7 @@ public ConfigBuilder withMaxTransactionRetryTime(long value, TimeUnit unit) {
655
696
var maxRetryTimeMs = unit .toMillis (value );
656
697
if (maxRetryTimeMs < 0 ) {
657
698
throw new IllegalArgumentException (
658
- String . format ("The max retry time may not be smaller than 0, but was %d %s." , value , unit ));
699
+ format ("The max retry time may not be smaller than 0, but was %d %s." , value , unit ));
659
700
}
660
701
this .maxTransactionRetryTimeMillis = maxRetryTimeMs ;
661
702
return this ;
@@ -732,7 +773,7 @@ public ConfigBuilder withMetricsAdapter(MetricsAdapter metricsAdapter) {
732
773
public ConfigBuilder withEventLoopThreads (int size ) {
733
774
if (size < 1 ) {
734
775
throw new IllegalArgumentException (
735
- String . format ("The event loop thread may not be smaller than 1, but was %d." , size ));
776
+ format ("The event loop thread may not be smaller than 1, but was %d." , size ));
736
777
}
737
778
this .eventLoopThreads = size ;
738
779
return this ;
@@ -762,12 +803,50 @@ public ConfigBuilder withUserAgent(String userAgent) {
762
803
* @param notificationConfig the notification config
763
804
* @return this builder
764
805
* @since 5.7
806
+ * @deprecated superseded by {@link #withMinimumNotificationSeverity(NotificationSeverity)} and {@link #withDisabledNotificationClassifications(Set)}
765
807
*/
808
+ @ Deprecated
766
809
public ConfigBuilder withNotificationConfig (NotificationConfig notificationConfig ) {
767
810
this .notificationConfig = Objects .requireNonNull (notificationConfig , "notificationConfig must not be null" );
768
811
return this ;
769
812
}
770
813
814
+ /**
815
+ * Sets a minimum severity for notifications produced by the server.
816
+ *
817
+ * @param minimumNotificationSeverity the minimum notification severity
818
+ * @return this builder
819
+ * @since 5.22.0
820
+ */
821
+ @ SuppressWarnings ("deprecation" )
822
+ public ConfigBuilder withMinimumNotificationSeverity (NotificationSeverity minimumNotificationSeverity ) {
823
+ if (minimumNotificationSeverity == null ) {
824
+ notificationConfig = NotificationConfig .disableAllConfig ();
825
+ } else {
826
+ notificationConfig = notificationConfig .enableMinimumSeverity (minimumNotificationSeverity );
827
+ }
828
+ return this ;
829
+ }
830
+
831
+ /**
832
+ * Sets a set of disabled classifications for notifications produced by the server.
833
+ *
834
+ * @param disabledNotificationClassifications the set of disabled notification classifications
835
+ * @return this builder
836
+ * @since 5.22.0
837
+ */
838
+ @ SuppressWarnings ("deprecation" )
839
+ public ConfigBuilder withDisabledNotificationClassifications (
840
+ Set <NotificationClassification > disabledNotificationClassifications ) {
841
+ var disabledCategories = disabledNotificationClassifications == null
842
+ ? Collections .<NotificationCategory >emptySet ()
843
+ : disabledNotificationClassifications .stream ()
844
+ .map (NotificationCategory .class ::cast )
845
+ .collect (Collectors .toSet ());
846
+ notificationConfig = notificationConfig .disableCategories (disabledCategories );
847
+ return this ;
848
+ }
849
+
771
850
/**
772
851
* Sets if telemetry is disabled on the driver side.
773
852
* <p>
0 commit comments