66package org .hibernate .reactive .context .impl ;
77
88import java .lang .invoke .MethodHandles ;
9+ import java .util .concurrent .ConcurrentHashMap ;
10+ import java .util .concurrent .ConcurrentMap ;
911
1012import io .vertx .core .Vertx ;
1113import io .vertx .core .impl .ContextInternal ;
14+ import io .vertx .core .spi .context .storage .AccessMode ;
1215
1316import org .hibernate .reactive .context .Context ;
1417import org .hibernate .reactive .logging .impl .Log ;
@@ -39,7 +42,7 @@ public <T> void put(Key<T> key, T instance) {
3942 final ContextInternal context = ContextInternal .current ();
4043 if ( context != null ) {
4144 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 );
4346 }
4447 else {
4548 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) {
5154 public <T > T get (Key <T > key ) {
5255 final ContextInternal context = ContextInternal .current ();
5356 if ( context != null ) {
54- @ SuppressWarnings ("unchecked" )
55- T local = (T ) context .localContextData ().get ( key );
57+ T local = VertxContext .<T >contextualDataMap ( context ).get ( key );
5658 if ( trace ) LOG .tracef ( "Getting value %2$s from context for key %1$s" , key , local );
5759 return local ;
5860 }
@@ -66,7 +68,7 @@ public <T> T get(Key<T> key) {
6668 public void remove (Key <?> key ) {
6769 final ContextInternal context = ContextInternal .current ();
6870 if ( context != null ) {
69- boolean removed = context . localContextData ( ).remove ( key ) != null ;
71+ boolean removed = contextualDataMap ( context ).remove ( key ) != null ;
7072 if ( trace ) LOG .tracef ( "Key %s removed from context: %s" , key , removed );
7173 }
7274 else {
@@ -93,4 +95,12 @@ public void execute(Runnable runnable) {
9395 }
9496 }
9597
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+ }
96106}
0 commit comments