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,45 @@ 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
+ var disabledCategories = ((InternalNotificationConfig ) notificationConfig ).disabledCategories ();
346
+ return disabledCategories != null
347
+ ? ((InternalNotificationConfig ) notificationConfig )
348
+ .disabledCategories ().stream ()
349
+ .map (NotificationClassification .class ::cast )
350
+ .collect (Collectors .toUnmodifiableSet ())
351
+ : Collections .emptySet ();
352
+ }
353
+
354
+ /**
355
+ * Returns the number of {@link EventLoop} threads.
356
+ *
316
357
* @return the number of threads
317
358
*/
318
359
public int eventLoopThreads () {
@@ -328,6 +369,7 @@ public boolean isMetricsEnabled() {
328
369
329
370
/**
330
371
* Returns the {@link MetricsAdapter}.
372
+ *
331
373
* @return the metrics adapter
332
374
*/
333
375
public MetricsAdapter metricsAdapter () {
@@ -373,6 +415,8 @@ public static final class ConfigBuilder {
373
415
private MetricsAdapter metricsAdapter = MetricsAdapter .DEV_NULL ;
374
416
private long fetchSize = FetchSizeUtil .DEFAULT_FETCH_SIZE ;
375
417
private int eventLoopThreads = 0 ;
418
+
419
+ @ SuppressWarnings ("deprecation" )
376
420
private NotificationConfig notificationConfig = NotificationConfig .defaultConfig ();
377
421
378
422
private boolean telemetryDisabled = false ;
@@ -399,7 +443,7 @@ public ConfigBuilder withLogging(Logging logging) {
399
443
* Enable logging of leaked sessions.
400
444
* <p>
401
445
* 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.
446
+ * {@link Resource resource} that needs to be explicitly closed.
403
447
* Unclosed sessions will result in socket leaks and could cause {@link OutOfMemoryError}s.
404
448
* <p>
405
449
* Session is considered to be leaked when it is finalized via {@link Object#finalize()} while not being
@@ -579,8 +623,8 @@ public ConfigBuilder withTrustStrategy(TrustStrategy trustStrategy) {
579
623
public ConfigBuilder withRoutingTablePurgeDelay (long delay , TimeUnit unit ) {
580
624
var routingTablePurgeDelayMillis = unit .toMillis (delay );
581
625
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 ));
626
+ throw new IllegalArgumentException (
627
+ format ( "The routing table purge delay may not be smaller than 0, but was %d %s." , delay , unit ));
584
628
}
585
629
this .routingTablePurgeDelayMillis = routingTablePurgeDelayMillis ;
586
630
return this ;
@@ -591,11 +635,11 @@ public ConfigBuilder withRoutingTablePurgeDelay(long delay, TimeUnit unit) {
591
635
* This config is only valid when the driver is used with servers that support Bolt V4 (Server version 4.0 and later).
592
636
* <p>
593
637
* 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}.
638
+ * This config specifies the default fetch size for all query runs using {@link Session} and {@link AsyncSession}.
595
639
* By default, the value is set to {@code 1000}.
596
640
* Use {@code -1} to disables back pressure and config client to pull all records at once after each run.
597
641
* <p>
598
- * This config only applies to run results obtained via {@link Session} and {@link org.neo4j.driver.async. AsyncSession}.
642
+ * This config only applies to run results obtained via {@link Session} and {@link AsyncSession}.
599
643
* As with the reactive sessions the batch size is managed by the subscription requests instead.
600
644
*
601
645
* @param size the default record fetch size when pulling records in batches using Bolt V4.
@@ -627,11 +671,11 @@ public ConfigBuilder withConnectionTimeout(long value, TimeUnit unit) {
627
671
var connectionTimeoutMillis = unit .toMillis (value );
628
672
if (connectionTimeoutMillis < 0 ) {
629
673
throw new IllegalArgumentException (
630
- String . format ("The connection timeout may not be smaller than 0, but was %d %s." , value , unit ));
674
+ format ("The connection timeout may not be smaller than 0, but was %d %s." , value , unit ));
631
675
}
632
676
var connectionTimeoutMillisInt = (int ) connectionTimeoutMillis ;
633
677
if (connectionTimeoutMillisInt != connectionTimeoutMillis ) {
634
- throw new IllegalArgumentException (String . format (
678
+ throw new IllegalArgumentException (format (
635
679
"The connection timeout must represent int value when converted to milliseconds %d." ,
636
680
connectionTimeoutMillis ));
637
681
}
@@ -655,7 +699,7 @@ public ConfigBuilder withMaxTransactionRetryTime(long value, TimeUnit unit) {
655
699
var maxRetryTimeMs = unit .toMillis (value );
656
700
if (maxRetryTimeMs < 0 ) {
657
701
throw new IllegalArgumentException (
658
- String . format ("The max retry time may not be smaller than 0, but was %d %s." , value , unit ));
702
+ format ("The max retry time may not be smaller than 0, but was %d %s." , value , unit ));
659
703
}
660
704
this .maxTransactionRetryTimeMillis = maxRetryTimeMs ;
661
705
return this ;
@@ -732,7 +776,7 @@ public ConfigBuilder withMetricsAdapter(MetricsAdapter metricsAdapter) {
732
776
public ConfigBuilder withEventLoopThreads (int size ) {
733
777
if (size < 1 ) {
734
778
throw new IllegalArgumentException (
735
- String . format ("The event loop thread may not be smaller than 1, but was %d." , size ));
779
+ format ("The event loop thread may not be smaller than 1, but was %d." , size ));
736
780
}
737
781
this .eventLoopThreads = size ;
738
782
return this ;
@@ -762,12 +806,51 @@ public ConfigBuilder withUserAgent(String userAgent) {
762
806
* @param notificationConfig the notification config
763
807
* @return this builder
764
808
* @since 5.7
809
+ * @deprecated superseded by {@link #withMinimumNotificationSeverity(NotificationSeverity)} and {@link #withDisabledNotificationClassifications(Set)}
765
810
*/
811
+ @ Deprecated
812
+ @ SuppressWarnings ("DeprecatedIsStillUsed" )
766
813
public ConfigBuilder withNotificationConfig (NotificationConfig notificationConfig ) {
767
814
this .notificationConfig = Objects .requireNonNull (notificationConfig , "notificationConfig must not be null" );
768
815
return this ;
769
816
}
770
817
818
+ /**
819
+ * Sets a minimum severity for notifications produced by the server.
820
+ *
821
+ * @param minimumNotificationSeverity the minimum notification severity
822
+ * @return this builder
823
+ * @since 5.22.0
824
+ */
825
+ @ SuppressWarnings ("deprecation" )
826
+ public ConfigBuilder withMinimumNotificationSeverity (NotificationSeverity minimumNotificationSeverity ) {
827
+ if (minimumNotificationSeverity == null ) {
828
+ notificationConfig = NotificationConfig .disableAllConfig ();
829
+ } else {
830
+ notificationConfig = notificationConfig .enableMinimumSeverity (minimumNotificationSeverity );
831
+ }
832
+ return this ;
833
+ }
834
+
835
+ /**
836
+ * Sets a set of disabled classifications for notifications produced by the server.
837
+ *
838
+ * @param disabledNotificationClassifications the set of disabled notification classifications
839
+ * @return this builder
840
+ * @since 5.22.0
841
+ */
842
+ @ SuppressWarnings ("deprecation" )
843
+ public ConfigBuilder withDisabledNotificationClassifications (
844
+ Set <NotificationClassification > disabledNotificationClassifications ) {
845
+ var disabledCategories = disabledNotificationClassifications == null
846
+ ? Collections .<NotificationCategory >emptySet ()
847
+ : disabledNotificationClassifications .stream ()
848
+ .map (NotificationCategory .class ::cast )
849
+ .collect (Collectors .toSet ());
850
+ notificationConfig = notificationConfig .disableCategories (disabledCategories );
851
+ return this ;
852
+ }
853
+
771
854
/**
772
855
* Sets if telemetry is disabled on the driver side.
773
856
* <p>
0 commit comments