Package org.springframework.issues

Source Code of org.springframework.issues.ReproTests

package org.springframework.issues;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.issues.config.AppConfig;
import org.springframework.issues.data.Book;
import org.springframework.issues.service.BookService;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { AppConfig.class })
public class ReproTests {

  @Autowired
  private BookService books;
 
  @Test
  public void test() throws InterruptedException {
    final Book book1 = new Book(1, "A");
    books.createBook(book1);
    final Book book2 = new Book(2, "B");
    books.createBook(book2);

    final Book book3 = new Book(3, "C");
    books.createBookWithoutTx(book3);
   
    final Book bookAfterCommit = new Book(55, "AFTER COMMIT");
    books.triggerCreatePostCommit(bookAfterCommit);
    final Book book4 = new Book(4, "D");
    books.createBook(book4);
   
    assertEquals(book1, books.lookupBookById(1));
    assertEquals(book2, books.lookupBookById(2));
   
    // Book triggered post commit is found
    assertEquals(bookAfterCommit, books.lookupBookById(55));
    // Books after the post commit are not found within the same thread.
    assertEquals(book4, books.lookupBookById(4));
    // Even the older ones
    assertEquals(book3, books.lookupBookById(3));
   
    final Reference<Boolean> foundBook4 = new Reference<Boolean>(false);
    final Reference<Boolean> foundBookAfterCommit = new Reference<Boolean>(false);
   
    Thread thread = new Thread() {
      @Override
      public void run() {
        // Books are not found however while executing in a separate thread (not even in DB)
        foundBook4.set(books.lookupBookById(4) != null);
        foundBookAfterCommit.set(books.lookupBookById(55) != null);
      }
    };
   
    thread.start();
    thread.join();
   
    assertTrue(foundBookAfterCommit.get());
    assertTrue(foundBook4.get()); // Should fail since book was not found in separate thread
   
  }
}
TOP

Related Classes of org.springframework.issues.ReproTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.