|
9 | 9 | import org.hibernate.ConnectionAcquisitionMode;
|
10 | 10 | import org.hibernate.ConnectionReleaseMode;
|
11 | 11 |
|
| 12 | +import static java.util.Objects.requireNonNull; |
12 | 13 | import static org.hibernate.ConnectionAcquisitionMode.AS_NEEDED;
|
13 | 14 | import static org.hibernate.ConnectionAcquisitionMode.IMMEDIATELY;
|
14 | 15 | import static org.hibernate.ConnectionReleaseMode.AFTER_STATEMENT;
|
15 | 16 | import static org.hibernate.ConnectionReleaseMode.AFTER_TRANSACTION;
|
16 | 17 | import static org.hibernate.ConnectionReleaseMode.BEFORE_TRANSACTION_COMPLETION;
|
17 | 18 | import static org.hibernate.ConnectionReleaseMode.ON_CLOSE;
|
| 19 | +import static org.hibernate.internal.util.StringHelper.isBlank; |
18 | 20 |
|
19 | 21 | /**
|
20 | 22 | * Enumerates valid combinations of {@link ConnectionAcquisitionMode} and
|
@@ -72,42 +74,39 @@ public ConnectionReleaseMode getReleaseMode() {
|
72 | 74 | }
|
73 | 75 |
|
74 | 76 | public static PhysicalConnectionHandlingMode interpret(Object setting) {
|
75 |
| - if ( setting == null ) { |
76 |
| - return null; |
| 77 | + if ( setting instanceof PhysicalConnectionHandlingMode mode ) { |
| 78 | + return mode; |
77 | 79 | }
|
| 80 | + else if ( setting instanceof String string ) { |
| 81 | + return isBlank( string ) ? null |
| 82 | + : valueOf( string.trim().toUpperCase( Locale.ROOT ) ); |
78 | 83 |
|
79 |
| - if ( setting instanceof PhysicalConnectionHandlingMode physicalConnectionHandlingMode ) { |
80 |
| - return physicalConnectionHandlingMode; |
81 | 84 | }
|
82 |
| - |
83 |
| - final String value = setting.toString().trim(); |
84 |
| - if ( value.isEmpty() ) { |
| 85 | + else { |
85 | 86 | return null;
|
86 | 87 | }
|
87 |
| - |
88 |
| - return valueOf( value.toUpperCase( Locale.ROOT ) ); |
89 | 88 | }
|
90 | 89 |
|
91 | 90 | public static PhysicalConnectionHandlingMode interpret(
|
92 | 91 | ConnectionAcquisitionMode acquisitionMode,
|
93 | 92 | ConnectionReleaseMode releaseMode) {
|
94 |
| - if ( acquisitionMode == IMMEDIATELY ) { |
95 |
| - if ( releaseMode != null && releaseMode != ON_CLOSE ) { |
96 |
| - throw new IllegalArgumentException( |
| 93 | + requireNonNull( acquisitionMode, "ConnectionAcquisitionMode must be specified" ); |
| 94 | + requireNonNull( acquisitionMode, "ConnectionReleaseMode must be specified" ); |
| 95 | + return switch ( acquisitionMode ) { |
| 96 | + case AS_NEEDED -> switch ( releaseMode ) { |
| 97 | + case ON_CLOSE -> DELAYED_ACQUISITION_AND_HOLD; |
| 98 | + case AFTER_STATEMENT -> DELAYED_ACQUISITION_AND_RELEASE_AFTER_STATEMENT; |
| 99 | + case BEFORE_TRANSACTION_COMPLETION -> DELAYED_ACQUISITION_AND_RELEASE_BEFORE_TRANSACTION_COMPLETION; |
| 100 | + case AFTER_TRANSACTION -> DELAYED_ACQUISITION_AND_RELEASE_AFTER_TRANSACTION; |
| 101 | + }; |
| 102 | + case IMMEDIATELY -> switch ( releaseMode ) { |
| 103 | + case ON_CLOSE -> IMMEDIATE_ACQUISITION_AND_HOLD; |
| 104 | + default -> throw new IllegalArgumentException( |
97 | 105 | "Only ConnectionReleaseMode.ON_CLOSE can be used in combination with "
|
98 | 106 | + "ConnectionAcquisitionMode.IMMEDIATELY; but ConnectionReleaseMode."
|
99 | 107 | + releaseMode.name() + " was specified."
|
100 | 108 | );
|
101 |
| - } |
102 |
| - return IMMEDIATE_ACQUISITION_AND_HOLD; |
103 |
| - } |
104 |
| - else { |
105 |
| - return switch ( releaseMode ) { |
106 |
| - case AFTER_STATEMENT -> DELAYED_ACQUISITION_AND_RELEASE_AFTER_STATEMENT; |
107 |
| - case BEFORE_TRANSACTION_COMPLETION -> DELAYED_ACQUISITION_AND_RELEASE_BEFORE_TRANSACTION_COMPLETION; |
108 |
| - case AFTER_TRANSACTION -> DELAYED_ACQUISITION_AND_RELEASE_AFTER_TRANSACTION; |
109 |
| - default -> DELAYED_ACQUISITION_AND_HOLD; |
110 | 109 | };
|
111 |
| - } |
| 110 | + }; |
112 | 111 | }
|
113 | 112 | }
|
0 commit comments