11
11
import java .util .List ;
12
12
import java .util .Properties ;
13
13
import java .util .concurrent .CountDownLatch ;
14
+ import java .util .concurrent .CyclicBarrier ;
14
15
import java .util .concurrent .TimeUnit ;
15
16
16
17
import org .hibernate .Session ;
@@ -102,7 +103,7 @@ public void testPutDoesNotBlockGet() throws Exception {
102
103
@ Override
103
104
public void run () {
104
105
try {
105
- assertNotEquals (VALUE2 , callWithSession (sessionFactory , session -> region .get (session , KEY )));
106
+ assertNotEquals (VALUE2 , callWithSession (sessionFactory , session -> region .get (session , KEY )));
106
107
} catch (AssertionFailedError e ) {
107
108
holder .addAssertionFailure (e );
108
109
} catch (Exception e ) {
@@ -118,7 +119,7 @@ public void run() {
118
119
public void run () {
119
120
try {
120
121
withSession (sessionFactory , session -> {
121
- region .put (( SessionImplementor ) session , KEY , VALUE2 );
122
+ region .put (session , KEY , VALUE2 );
122
123
writerLatch .await ();
123
124
});
124
125
} catch (Exception e ) {
@@ -143,7 +144,7 @@ public void run() {
143
144
144
145
assertTrue ("Reader finished promptly" , completionLatch .await (100 , TimeUnit .MILLISECONDS ));
145
146
146
- assertEquals (VALUE2 , region .get (null , KEY ));
147
+ assertEquals (VALUE2 , callWithSession ( sessionFactory , session -> region .get (session , KEY ) ));
147
148
});
148
149
}
149
150
@@ -313,6 +314,71 @@ public void run() {
313
314
});
314
315
}
315
316
317
+ @ Test
318
+ public void testQueryUpdate () throws Exception {
319
+ withQueryRegion ((sessionFactory , region ) -> {
320
+ ExceptionHolder holder = new ExceptionHolder ();
321
+ CyclicBarrier barrier = new CyclicBarrier (2 );
322
+ withSession (sessionFactory , session -> region .put (session , KEY , VALUE1 ));
323
+
324
+ Thread updater = new Thread () {
325
+ @ Override
326
+ public void run () {
327
+ try {
328
+ withSession (sessionFactory , (session ) -> {
329
+ assertEquals (VALUE1 , region .get (session , KEY ));
330
+ region .put (session , KEY , VALUE2 );
331
+ assertEquals (VALUE2 , region .get (session , KEY ));
332
+ barrier .await (5 , TimeUnit .SECONDS );
333
+ barrier .await (5 , TimeUnit .SECONDS );
334
+ region .put (session , KEY , VALUE3 );
335
+ assertEquals (VALUE3 , region .get (session , KEY ));
336
+ barrier .await (5 , TimeUnit .SECONDS );
337
+ barrier .await (5 , TimeUnit .SECONDS );
338
+ });
339
+ } catch (AssertionFailedError e ) {
340
+ holder .addAssertionFailure (e );
341
+ barrier .reset ();
342
+ } catch (Exception e ) {
343
+ holder .addException (e );
344
+ barrier .reset ();
345
+ }
346
+ }
347
+ };
348
+
349
+ Thread reader = new Thread () {
350
+ @ Override
351
+ public void run () {
352
+ try {
353
+ withSession (sessionFactory , (session ) -> {
354
+ assertEquals (VALUE1 , region .get (session , KEY ));
355
+ barrier .await (5 , TimeUnit .SECONDS );
356
+ assertEquals (VALUE1 , region .get (session , KEY ));
357
+ barrier .await (5 , TimeUnit .SECONDS );
358
+ barrier .await (5 , TimeUnit .SECONDS );
359
+ assertEquals (VALUE1 , region .get (session , KEY ));
360
+ barrier .await (5 , TimeUnit .SECONDS );
361
+ });
362
+ } catch (AssertionFailedError e ) {
363
+ holder .addAssertionFailure (e );
364
+ barrier .reset ();
365
+ } catch (Exception e ) {
366
+ holder .addException (e );
367
+ barrier .reset ();
368
+ }
369
+ }
370
+ };
371
+
372
+ updater .start ();
373
+ reader .start ();
374
+ updater .join ();
375
+ reader .join ();
376
+ holder .checkExceptions ();
377
+
378
+ assertEquals (VALUE3 , callWithSession (sessionFactory , session -> region .get (session , KEY )));
379
+ });
380
+ }
381
+
316
382
@ Listener
317
383
public class GetBlocker {
318
384
private final CountDownLatch latch ;
0 commit comments