|
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