parent
7d0f48289b
commit
6f0a76a65f
|
@ -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 {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue