6
6
package org .hibernate .reactive .context .impl ;
7
7
8
8
import java .lang .invoke .MethodHandles ;
9
+ import java .util .concurrent .ConcurrentHashMap ;
10
+ import java .util .concurrent .ConcurrentMap ;
9
11
10
12
import io .vertx .core .Vertx ;
11
13
import io .vertx .core .impl .ContextInternal ;
14
+ import io .vertx .core .spi .context .storage .AccessMode ;
12
15
13
16
import org .hibernate .reactive .context .Context ;
14
17
import org .hibernate .reactive .logging .impl .Log ;
@@ -39,7 +42,7 @@ public <T> void put(Key<T> key, T instance) {
39
42
final ContextInternal context = ContextInternal .current ();
40
43
if ( context != null ) {
41
44
if ( trace ) LOG .tracef ( "Putting key,value in context: [%1$s, %2$s]" , key , instance );
42
- context . localContextData ( ).put ( key , instance );
45
+ VertxContext .< T > contextualDataMap ( context ).put ( key , instance );
43
46
}
44
47
else {
45
48
if ( trace ) LOG .tracef ( "Context is null for key,value: [%1$s, %2$s]" , key , instance );
@@ -51,8 +54,7 @@ public <T> void put(Key<T> key, T instance) {
51
54
public <T > T get (Key <T > key ) {
52
55
final ContextInternal context = ContextInternal .current ();
53
56
if ( context != null ) {
54
- @ SuppressWarnings ("unchecked" )
55
- T local = (T ) context .localContextData ().get ( key );
57
+ T local = VertxContext .<T >contextualDataMap ( context ).get ( key );
56
58
if ( trace ) LOG .tracef ( "Getting value %2$s from context for key %1$s" , key , local );
57
59
return local ;
58
60
}
@@ -66,7 +68,7 @@ public <T> T get(Key<T> key) {
66
68
public void remove (Key <?> key ) {
67
69
final ContextInternal context = ContextInternal .current ();
68
70
if ( context != null ) {
69
- boolean removed = context . localContextData ( ).remove ( key ) != null ;
71
+ boolean removed = contextualDataMap ( context ).remove ( key ) != null ;
70
72
if ( trace ) LOG .tracef ( "Key %s removed from context: %s" , key , removed );
71
73
}
72
74
else {
@@ -93,4 +95,12 @@ public void execute(Runnable runnable) {
93
95
}
94
96
}
95
97
98
+ @ SuppressWarnings ({ "unchecked" })
99
+ private static <T > ConcurrentMap <Key <T >, T > contextualDataMap (ContextInternal vertxContext ) {
100
+ return vertxContext .getLocal (
101
+ ContextualDataStorage .CONTEXTUAL_DATA_KEY ,
102
+ AccessMode .CONCURRENT ,
103
+ ConcurrentHashMap ::new
104
+ );
105
+ }
96
106
}
0 commit comments