Polishing

See gh-24835
This commit is contained in:
Rossen Stoyanchev 2020-04-02 08:34:44 +01:00
parent 7d0f48289b
commit 6f0a76a65f
1 changed files with 24 additions and 61 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2019 the original author or authors. * Copyright 2002-2020 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
package org.springframework.orm.jpa.support; package org.springframework.orm.jpa.support;
import java.io.IOException;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@ -25,9 +24,6 @@ import javax.persistence.EntityManagerFactory;
import javax.servlet.AsyncEvent; import javax.servlet.AsyncEvent;
import javax.servlet.AsyncListener; import javax.servlet.AsyncListener;
import javax.servlet.FilterChain; import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
@ -77,7 +73,7 @@ public class OpenEntityManagerInViewTests {
@BeforeEach @BeforeEach
public void setUp() throws Exception { public void setUp() {
factory = mock(EntityManagerFactory.class); factory = mock(EntityManagerFactory.class);
manager = mock(EntityManager.class); manager = mock(EntityManager.class);
@ -90,7 +86,7 @@ public class OpenEntityManagerInViewTests {
} }
@AfterEach @AfterEach
public void tearDown() throws Exception { public void tearDown() {
assertThat(TransactionSynchronizationManager.getResourceMap().isEmpty()).isTrue(); assertThat(TransactionSynchronizationManager.getResourceMap().isEmpty()).isTrue();
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse(); assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse(); assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
@ -98,7 +94,7 @@ public class OpenEntityManagerInViewTests {
} }
@Test @Test
public void testOpenEntityManagerInViewInterceptor() throws Exception { public void testOpenEntityManagerInViewInterceptor() {
OpenEntityManagerInViewInterceptor interceptor = new OpenEntityManagerInViewInterceptor(); OpenEntityManagerInViewInterceptor interceptor = new OpenEntityManagerInViewInterceptor();
interceptor.setEntityManagerFactory(this.factory); interceptor.setEntityManagerFactory(this.factory);
@ -150,12 +146,7 @@ public class OpenEntityManagerInViewTests {
WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(this.webRequest); WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(this.webRequest);
asyncManager.setTaskExecutor(new SyncTaskExecutor()); asyncManager.setTaskExecutor(new SyncTaskExecutor());
asyncManager.setAsyncWebRequest(asyncWebRequest); asyncManager.setAsyncWebRequest(asyncWebRequest);
asyncManager.startCallableProcessing(new Callable<String>() { asyncManager.startCallableProcessing((Callable<String>) () -> "anything");
@Override
public String call() throws Exception {
return "anything";
}
});
interceptor.afterConcurrentHandlingStarted(this.webRequest); interceptor.afterConcurrentHandlingStarted(this.webRequest);
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse(); assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
@ -209,12 +200,7 @@ public class OpenEntityManagerInViewTests {
WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(this.request); WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(this.request);
asyncManager.setTaskExecutor(new SyncTaskExecutor()); asyncManager.setTaskExecutor(new SyncTaskExecutor());
asyncManager.setAsyncWebRequest(asyncWebRequest); asyncManager.setAsyncWebRequest(asyncWebRequest);
asyncManager.startCallableProcessing(new Callable<String>() { asyncManager.startCallableProcessing((Callable<String>) () -> "anything");
@Override
public String call() throws Exception {
return "anything";
}
});
interceptor.afterConcurrentHandlingStarted(this.webRequest); interceptor.afterConcurrentHandlingStarted(this.webRequest);
assertThat(TransactionSynchronizationManager.hasResource(this.factory)).isFalse(); assertThat(TransactionSynchronizationManager.hasResource(this.factory)).isFalse();
@ -251,17 +237,12 @@ public class OpenEntityManagerInViewTests {
WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(this.request); WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(this.request);
asyncManager.setTaskExecutor(new SyncTaskExecutor()); asyncManager.setTaskExecutor(new SyncTaskExecutor());
asyncManager.setAsyncWebRequest(asyncWebRequest); asyncManager.setAsyncWebRequest(asyncWebRequest);
asyncManager.startCallableProcessing(new Callable<String>() { asyncManager.startCallableProcessing((Callable<String>) () -> "anything");
@Override
public String call() throws Exception {
return "anything";
}
});
interceptor.afterConcurrentHandlingStarted(this.webRequest); interceptor.afterConcurrentHandlingStarted(this.webRequest);
assertThat(TransactionSynchronizationManager.hasResource(this.factory)).isFalse(); assertThat(TransactionSynchronizationManager.hasResource(this.factory)).isFalse();
// Async request timeout // Async request error
given(this.manager.isOpen()).willReturn(true); given(this.manager.isOpen()).willReturn(true);
@ -305,21 +286,14 @@ public class OpenEntityManagerInViewTests {
final OpenEntityManagerInViewFilter filter2 = new OpenEntityManagerInViewFilter(); final OpenEntityManagerInViewFilter filter2 = new OpenEntityManagerInViewFilter();
filter2.init(filterConfig2); filter2.init(filterConfig2);
final FilterChain filterChain = new FilterChain() { final FilterChain filterChain = (servletRequest, servletResponse) -> {
@Override assertThat(TransactionSynchronizationManager.hasResource(factory)).isTrue();
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) { servletRequest.setAttribute("invoked", Boolean.TRUE);
assertThat(TransactionSynchronizationManager.hasResource(factory)).isTrue();
servletRequest.setAttribute("invoked", Boolean.TRUE);
}
}; };
final FilterChain filterChain2 = new FilterChain() { final FilterChain filterChain2 = (servletRequest, servletResponse) -> {
@Override assertThat(TransactionSynchronizationManager.hasResource(factory2)).isTrue();
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) filter.doFilter(servletRequest, servletResponse, filterChain);
throws IOException, ServletException {
assertThat(TransactionSynchronizationManager.hasResource(factory2)).isTrue();
filter.doFilter(servletRequest, servletResponse, filterChain);
}
}; };
FilterChain filterChain3 = new PassThroughFilterChain(filter2, filterChain2); FilterChain filterChain3 = new PassThroughFilterChain(filter2, filterChain2);
@ -366,25 +340,18 @@ public class OpenEntityManagerInViewTests {
final AtomicInteger count = new AtomicInteger(0); final AtomicInteger count = new AtomicInteger(0);
final FilterChain filterChain = new FilterChain() { final FilterChain filterChain = (servletRequest, servletResponse) -> {
@Override assertThat(TransactionSynchronizationManager.hasResource(factory)).isTrue();
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) { servletRequest.setAttribute("invoked", Boolean.TRUE);
assertThat(TransactionSynchronizationManager.hasResource(factory)).isTrue(); count.incrementAndGet();
servletRequest.setAttribute("invoked", Boolean.TRUE);
count.incrementAndGet();
}
}; };
final AtomicInteger count2 = new AtomicInteger(0); final AtomicInteger count2 = new AtomicInteger(0);
final FilterChain filterChain2 = new FilterChain() { final FilterChain filterChain2 = (servletRequest, servletResponse) -> {
@Override assertThat(TransactionSynchronizationManager.hasResource(factory2)).isTrue();
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) filter.doFilter(servletRequest, servletResponse, filterChain);
throws IOException, ServletException { count2.incrementAndGet();
assertThat(TransactionSynchronizationManager.hasResource(factory2)).isTrue();
filter.doFilter(servletRequest, servletResponse, filterChain);
count2.incrementAndGet();
}
}; };
FilterChain filterChain3 = new PassThroughFilterChain(filter2, filterChain2); FilterChain filterChain3 = new PassThroughFilterChain(filter2, filterChain2);
@ -395,12 +362,7 @@ public class OpenEntityManagerInViewTests {
WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(this.request); WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(this.request);
asyncManager.setTaskExecutor(new SyncTaskExecutor()); asyncManager.setTaskExecutor(new SyncTaskExecutor());
asyncManager.setAsyncWebRequest(asyncWebRequest); asyncManager.setAsyncWebRequest(asyncWebRequest);
asyncManager.startCallableProcessing(new Callable<String>() { asyncManager.startCallableProcessing((Callable<String>) () -> "anything");
@Override
public String call() throws Exception {
return "anything";
}
});
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse(); assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
assertThat(TransactionSynchronizationManager.hasResource(factory2)).isFalse(); assertThat(TransactionSynchronizationManager.hasResource(factory2)).isFalse();
@ -434,6 +396,7 @@ public class OpenEntityManagerInViewTests {
wac.close(); wac.close();
} }
@SuppressWarnings("serial") @SuppressWarnings("serial")
private static class SyncTaskExecutor extends SimpleAsyncTaskExecutor { private static class SyncTaskExecutor extends SimpleAsyncTaskExecutor {