Polish "Replace relevant code with lambda"
Closes gh-1454
This commit is contained in:
parent
4b1478d830
commit
fc64b8040f
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2012 the original author or authors.
|
* Copyright 2002-2017 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.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2016 the original author or authors.
|
* Copyright 2002-2017 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.
|
||||||
|
@ -28,7 +28,6 @@ import java.beans.PropertyDescriptor;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -139,7 +138,7 @@ class ExtendedBeanInfo implements BeanInfo {
|
||||||
// Sort non-void returning write methods to guard against the ill effects of
|
// Sort non-void returning write methods to guard against the ill effects of
|
||||||
// non-deterministic sorting of methods returned from Class#getDeclaredMethods
|
// non-deterministic sorting of methods returned from Class#getDeclaredMethods
|
||||||
// under JDK 7. See http://bugs.sun.com/view_bug.do?bug_id=7023180
|
// under JDK 7. See http://bugs.sun.com/view_bug.do?bug_id=7023180
|
||||||
Collections.sort(matches, (m1, m2) -> m2.toString().compareTo(m1.toString()));
|
matches.sort((m1, m2) -> m2.toString().compareTo(m1.toString()));
|
||||||
return matches;
|
return matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -412,43 +412,43 @@ public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBean
|
||||||
final LinkedList<InjectionMetadata.InjectedElement> currElements = new LinkedList<>();
|
final LinkedList<InjectionMetadata.InjectedElement> currElements = new LinkedList<>();
|
||||||
|
|
||||||
ReflectionUtils.doWithLocalFields(targetClass, field -> {
|
ReflectionUtils.doWithLocalFields(targetClass, field -> {
|
||||||
AnnotationAttributes ann = findAutowiredAnnotation(field);
|
AnnotationAttributes ann = findAutowiredAnnotation(field);
|
||||||
if (ann != null) {
|
if (ann != null) {
|
||||||
if (Modifier.isStatic(field.getModifiers())) {
|
if (Modifier.isStatic(field.getModifiers())) {
|
||||||
if (logger.isWarnEnabled()) {
|
if (logger.isWarnEnabled()) {
|
||||||
logger.warn("Autowired annotation is not supported on static fields: " + field);
|
logger.warn("Autowired annotation is not supported on static fields: " + field);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
boolean required = determineRequiredStatus(ann);
|
boolean required = determineRequiredStatus(ann);
|
||||||
currElements.add(new AutowiredFieldElement(field, required));
|
currElements.add(new AutowiredFieldElement(field, required));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ReflectionUtils.doWithLocalMethods(targetClass, method -> {
|
ReflectionUtils.doWithLocalMethods(targetClass, method -> {
|
||||||
Method bridgedMethod = BridgeMethodResolver.findBridgedMethod(method);
|
Method bridgedMethod = BridgeMethodResolver.findBridgedMethod(method);
|
||||||
if (!BridgeMethodResolver.isVisibilityBridgeMethodPair(method, bridgedMethod)) {
|
if (!BridgeMethodResolver.isVisibilityBridgeMethodPair(method, bridgedMethod)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
AnnotationAttributes ann = findAutowiredAnnotation(bridgedMethod);
|
AnnotationAttributes ann = findAutowiredAnnotation(bridgedMethod);
|
||||||
if (ann != null && method.equals(ClassUtils.getMostSpecificMethod(method, clazz))) {
|
if (ann != null && method.equals(ClassUtils.getMostSpecificMethod(method, clazz))) {
|
||||||
if (Modifier.isStatic(method.getModifiers())) {
|
if (Modifier.isStatic(method.getModifiers())) {
|
||||||
if (logger.isWarnEnabled()) {
|
if (logger.isWarnEnabled()) {
|
||||||
logger.warn("Autowired annotation is not supported on static methods: " + method);
|
logger.warn("Autowired annotation is not supported on static methods: " + method);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (method.getParameterCount() == 0) {
|
if (method.getParameterCount() == 0) {
|
||||||
if (logger.isWarnEnabled()) {
|
if (logger.isWarnEnabled()) {
|
||||||
logger.warn("Autowired annotation should only be used on methods with parameters: " +
|
logger.warn("Autowired annotation should only be used on methods with parameters: " +
|
||||||
method);
|
method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
boolean required = determineRequiredStatus(ann);
|
boolean required = determineRequiredStatus(ann);
|
||||||
PropertyDescriptor pd = BeanUtils.findPropertyForMethod(bridgedMethod, clazz);
|
PropertyDescriptor pd = BeanUtils.findPropertyForMethod(bridgedMethod, clazz);
|
||||||
currElements.add(new AutowiredMethodElement(method, required, pd));
|
currElements.add(new AutowiredMethodElement(method, required, pd));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
elements.addAll(0, currElements);
|
elements.addAll(0, currElements);
|
||||||
targetClass = targetClass.getSuperclass();
|
targetClass = targetClass.getSuperclass();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2016 the original author or authors.
|
* Copyright 2002-2017 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.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2014 the original author or authors.
|
* Copyright 2002-2017 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.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2016 the original author or authors.
|
* Copyright 2002-2017 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.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2012 the original author or authors.
|
* Copyright 2002-2017 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.
|
||||||
|
|
|
@ -363,7 +363,7 @@ public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBean
|
||||||
throw new IllegalStateException("@EJB annotation is not supported on static fields");
|
throw new IllegalStateException("@EJB annotation is not supported on static fields");
|
||||||
}
|
}
|
||||||
currElements.add(new EjbRefElement(field, field, null));
|
currElements.add(new EjbRefElement(field, field, null));
|
||||||
}
|
}
|
||||||
else if (field.isAnnotationPresent(Resource.class)) {
|
else if (field.isAnnotationPresent(Resource.class)) {
|
||||||
if (Modifier.isStatic(field.getModifiers())) {
|
if (Modifier.isStatic(field.getModifiers())) {
|
||||||
throw new IllegalStateException("@Resource annotation is not supported on static fields");
|
throw new IllegalStateException("@Resource annotation is not supported on static fields");
|
||||||
|
|
|
@ -19,8 +19,6 @@ package org.springframework.context.annotation;
|
||||||
import java.beans.PropertyDescriptor;
|
import java.beans.PropertyDescriptor;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
|
@ -280,7 +278,7 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort by previously determined @Order value, if applicable
|
// Sort by previously determined @Order value, if applicable
|
||||||
Collections.sort(configCandidates, (bd1, bd2) -> {
|
configCandidates.sort((bd1, bd2) -> {
|
||||||
int i1 = ConfigurationClassUtils.getOrder(bd1.getBeanDefinition());
|
int i1 = ConfigurationClassUtils.getOrder(bd1.getBeanDefinition());
|
||||||
int i2 = ConfigurationClassUtils.getOrder(bd2.getBeanDefinition());
|
int i2 = ConfigurationClassUtils.getOrder(bd2.getBeanDefinition());
|
||||||
return (i1 < i2) ? -1 : (i1 > i2) ? 1 : 0;
|
return (i1 < i2) ? -1 : (i1 > i2) ? 1 : 0;
|
||||||
|
|
|
@ -47,12 +47,6 @@ import org.springframework.lang.Nullable;
|
||||||
*/
|
*/
|
||||||
public abstract class ReflectionUtils {
|
public abstract class ReflectionUtils {
|
||||||
|
|
||||||
/**
|
|
||||||
* Pre-built FieldFilter that matches all non-static, non-final fields.
|
|
||||||
*/
|
|
||||||
public static final FieldFilter COPYABLE_FIELDS =
|
|
||||||
field -> !(Modifier.isStatic(field.getModifiers()) || Modifier.isFinal(field.getModifiers()));
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Naming prefix for CGLIB-renamed methods.
|
* Naming prefix for CGLIB-renamed methods.
|
||||||
* @see #isCglibRenamedMethod
|
* @see #isCglibRenamedMethod
|
||||||
|
@ -851,6 +845,13 @@ public abstract class ReflectionUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pre-built FieldFilter that matches all non-static, non-final fields.
|
||||||
|
*/
|
||||||
|
public static final FieldFilter COPYABLE_FIELDS =
|
||||||
|
field -> !(Modifier.isStatic(field.getModifiers()) || Modifier.isFinal(field.getModifiers()));
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pre-built MethodFilter that matches all non-bridge methods.
|
* Pre-built MethodFilter that matches all non-bridge methods.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -21,9 +21,6 @@ import java.util.concurrent.CompletionStage;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
import java.util.function.BiFunction;
|
|
||||||
|
|
||||||
import org.springframework.lang.Nullable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adapts a {@link CompletableFuture} or {@link CompletionStage} into a
|
* Adapts a {@link CompletableFuture} or {@link CompletionStage} into a
|
||||||
|
@ -53,9 +50,9 @@ public class CompletableToListenableFutureAdapter<T> implements ListenableFuture
|
||||||
*/
|
*/
|
||||||
public CompletableToListenableFutureAdapter(CompletableFuture<T> completableFuture) {
|
public CompletableToListenableFutureAdapter(CompletableFuture<T> completableFuture) {
|
||||||
this.completableFuture = completableFuture;
|
this.completableFuture = completableFuture;
|
||||||
this.completableFuture.handle((result, exception) -> {
|
this.completableFuture.handle((result, ex) -> {
|
||||||
if (exception != null) {
|
if (ex != null) {
|
||||||
callbacks.failure(exception);
|
callbacks.failure(ex);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
callbacks.success(result);
|
callbacks.success(result);
|
||||||
|
|
|
@ -20,7 +20,6 @@ import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.springframework.asm.ClassWriter;
|
|
||||||
import org.springframework.asm.MethodVisitor;
|
import org.springframework.asm.MethodVisitor;
|
||||||
import org.springframework.expression.EvaluationException;
|
import org.springframework.expression.EvaluationException;
|
||||||
import org.springframework.expression.TypedValue;
|
import org.springframework.expression.TypedValue;
|
||||||
|
@ -137,10 +136,11 @@ public class InlineList extends SpelNodeImpl {
|
||||||
final String constantFieldName = "inlineList$" + codeflow.nextFieldId();
|
final String constantFieldName = "inlineList$" + codeflow.nextFieldId();
|
||||||
final String className = codeflow.getClassName();
|
final String className = codeflow.getClassName();
|
||||||
|
|
||||||
codeflow.registerNewField((cw, codeflow1)
|
codeflow.registerNewField((cw, cflow) ->
|
||||||
-> cw.visitField(ACC_PRIVATE|ACC_STATIC|ACC_FINAL, constantFieldName, "Ljava/util/List;", null, null));
|
cw.visitField(ACC_PRIVATE | ACC_STATIC | ACC_FINAL, constantFieldName, "Ljava/util/List;", null, null));
|
||||||
|
|
||||||
codeflow.registerNewClinit((mv1, codeflow12) -> generateClinitCode(className, constantFieldName, mv1, codeflow12, false));
|
codeflow.registerNewClinit((mVisitor, cflow) ->
|
||||||
|
generateClinitCode(className, constantFieldName, mVisitor, cflow, false));
|
||||||
|
|
||||||
mv.visitFieldInsn(GETSTATIC, className, constantFieldName, "Ljava/util/List;");
|
mv.visitFieldInsn(GETSTATIC, className, constantFieldName, "Ljava/util/List;");
|
||||||
codeflow.pushDescriptor("Ljava/util/List");
|
codeflow.pushDescriptor("Ljava/util/List");
|
||||||
|
|
|
@ -21,8 +21,6 @@ import java.lang.reflect.Modifier;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -121,7 +119,7 @@ public class ReflectiveMethodResolver implements MethodResolver {
|
||||||
|
|
||||||
// Sort methods into a sensible order
|
// Sort methods into a sensible order
|
||||||
if (methods.size() > 1) {
|
if (methods.size() > 1) {
|
||||||
Collections.sort(methods, (m1, m2) -> {
|
methods.sort((m1, m2) -> {
|
||||||
int m1pl = m1.getParameterCount();
|
int m1pl = m1.getParameterCount();
|
||||||
int m2pl = m2.getParameterCount();
|
int m2pl = m2.getParameterCount();
|
||||||
// varargs methods go last
|
// varargs methods go last
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2016 the original author or authors.
|
* Copyright 2002-2017 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.
|
||||||
|
@ -20,7 +20,6 @@ import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.springframework.beans.factory.FactoryBean;
|
import org.springframework.beans.factory.FactoryBean;
|
||||||
|
|
|
@ -16,15 +16,12 @@
|
||||||
|
|
||||||
package org.springframework.jdbc.core.support;
|
package org.springframework.jdbc.core.support;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||||
import org.springframework.beans.factory.support.PropertiesBeanDefinitionReader;
|
import org.springframework.beans.factory.support.PropertiesBeanDefinitionReader;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.jdbc.core.RowCallbackHandler;
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -105,10 +102,10 @@ public class JdbcBeanDefinitionReader {
|
||||||
public void loadBeanDefinitions(String sql) {
|
public void loadBeanDefinitions(String sql) {
|
||||||
Assert.notNull(this.jdbcTemplate, "Not fully configured - specify DataSource or JdbcTemplate");
|
Assert.notNull(this.jdbcTemplate, "Not fully configured - specify DataSource or JdbcTemplate");
|
||||||
final Properties props = new Properties();
|
final Properties props = new Properties();
|
||||||
this.jdbcTemplate.query(sql, resultSet -> {
|
this.jdbcTemplate.query(sql, rs -> {
|
||||||
String beanName = resultSet.getString(1);
|
String beanName = rs.getString(1);
|
||||||
String property = resultSet.getString(2);
|
String property = rs.getString(2);
|
||||||
String value = resultSet.getString(3);
|
String value = rs.getString(3);
|
||||||
// Make a properties entry by combining bean name and property.
|
// Make a properties entry by combining bean name and property.
|
||||||
props.setProperty(beanName + '.' + property, value);
|
props.setProperty(beanName + '.' + property, value);
|
||||||
});
|
});
|
||||||
|
|
|
@ -586,9 +586,9 @@ public class StompBrokerRelayMessageHandler extends AbstractBrokerMessageHandler
|
||||||
}
|
}
|
||||||
this.tcpConnection = connection;
|
this.tcpConnection = connection;
|
||||||
this.tcpConnection.onReadInactivity(() -> {
|
this.tcpConnection.onReadInactivity(() -> {
|
||||||
if (tcpConnection != null && !isStompConnected) {
|
if (this.tcpConnection != null && !this.isStompConnected) {
|
||||||
handleTcpConnectionFailure("No CONNECTED frame received in " +
|
handleTcpConnectionFailure("No CONNECTED frame received in " +
|
||||||
MAX_TIME_TO_CONNECTED_FRAME + " ms.", null);
|
MAX_TIME_TO_CONNECTED_FRAME + " ms.", null);
|
||||||
}
|
}
|
||||||
}, MAX_TIME_TO_CONNECTED_FRAME);
|
}, MAX_TIME_TO_CONNECTED_FRAME);
|
||||||
connection.send(MessageBuilder.createMessage(EMPTY_PAYLOAD, this.connectHeaders.getMessageHeaders()));
|
connection.send(MessageBuilder.createMessage(EMPTY_PAYLOAD, this.connectHeaders.getMessageHeaders()));
|
||||||
|
@ -697,18 +697,19 @@ public class StompBrokerRelayMessageHandler extends AbstractBrokerMessageHandler
|
||||||
long serverReceiveInterval = connectedHeaders.getHeartbeat()[1];
|
long serverReceiveInterval = connectedHeaders.getHeartbeat()[1];
|
||||||
|
|
||||||
if (clientSendInterval > 0 && serverReceiveInterval > 0) {
|
if (clientSendInterval > 0 && serverReceiveInterval > 0) {
|
||||||
long interval = Math.max(clientSendInterval, serverReceiveInterval);
|
long interval = Math.max(clientSendInterval, serverReceiveInterval);
|
||||||
this.tcpConnection.onWriteInactivity(() -> {
|
this.tcpConnection.onWriteInactivity(() -> {
|
||||||
TcpConnection<byte[]> conn = tcpConnection;
|
TcpConnection<byte[]> conn = this.tcpConnection;
|
||||||
if (conn != null) {
|
if (conn != null) {
|
||||||
conn.send(HEARTBEAT_MESSAGE).addCallback(
|
conn.send(HEARTBEAT_MESSAGE).addCallback(
|
||||||
new ListenableFutureCallback<Void>() {
|
new ListenableFutureCallback<Void>() {
|
||||||
public void onSuccess(Void result) {
|
public void onSuccess(Void result) {
|
||||||
}
|
}
|
||||||
public void onFailure(Throwable ex) {
|
|
||||||
handleTcpConnectionFailure("Failed to forward heartbeat: " + ex.getMessage(), ex);
|
public void onFailure(Throwable ex) {
|
||||||
}
|
handleTcpConnectionFailure("Failed to forward heartbeat: " + ex.getMessage(), ex);
|
||||||
});
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}, interval);
|
}, interval);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,6 @@ import java.util.LinkedHashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import javax.persistence.EntityManager;
|
import javax.persistence.EntityManager;
|
||||||
|
@ -350,7 +349,8 @@ public abstract class AbstractEntityManagerFactoryBean implements
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.bootstrapExecutor != null) {
|
if (this.bootstrapExecutor != null) {
|
||||||
this.nativeEntityManagerFactoryFuture = this.bootstrapExecutor.submit(this::buildNativeEntityManagerFactory);
|
this.nativeEntityManagerFactoryFuture = this.bootstrapExecutor.submit(
|
||||||
|
this::buildNativeEntityManagerFactory);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.nativeEntityManagerFactory = buildNativeEntityManagerFactory();
|
this.nativeEntityManagerFactory = buildNativeEntityManagerFactory();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2016 the original author or authors.
|
* Copyright 2002-2017 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.
|
||||||
|
@ -25,7 +25,6 @@ import org.hamcrest.Matcher;
|
||||||
|
|
||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
import org.springframework.http.client.ClientHttpRequest;
|
import org.springframework.http.client.ClientHttpRequest;
|
||||||
import org.springframework.test.util.AssertionErrors;
|
|
||||||
import org.springframework.test.web.client.MockRestServiceServer;
|
import org.springframework.test.web.client.MockRestServiceServer;
|
||||||
import org.springframework.test.web.client.RequestMatcher;
|
import org.springframework.test.web.client.RequestMatcher;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
@ -145,11 +144,12 @@ public abstract class MockRestRequestMatchers {
|
||||||
*/
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public static RequestMatcher header(final String name, final Matcher<? super String>... matchers) {
|
public static RequestMatcher header(final String name, final Matcher<? super String>... matchers) {
|
||||||
return request-> {
|
return request -> {
|
||||||
assertValueCount("header", name, request.getHeaders(), matchers.length);
|
assertValueCount("header", name, request.getHeaders(), matchers.length);
|
||||||
List<String> headerValues = request.getHeaders().get(name);
|
List<String> headerValues = request.getHeaders().get(name);
|
||||||
Assert.state(headerValues != null, "No header values");for (int i = 0 ; i < matchers.length; i++) {
|
Assert.state(headerValues != null, "No header values");
|
||||||
assertThat("Request header["+name+ "]", headerValues.get(i), matchers[i]);
|
for (int i = 0; i < matchers.length; i++) {
|
||||||
|
assertThat("Request header[" + name + "]", headerValues.get(i), matchers[i]);
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -159,12 +159,13 @@ public abstract class MockRestRequestMatchers {
|
||||||
* Assert request header values.
|
* Assert request header values.
|
||||||
*/
|
*/
|
||||||
public static RequestMatcher header(final String name, final String... expectedValues) {
|
public static RequestMatcher header(final String name, final String... expectedValues) {
|
||||||
return request-> {
|
return request -> {
|
||||||
assertValueCount("header", name, request.getHeaders(), expectedValues.length);
|
assertValueCount("header", name, request.getHeaders(), expectedValues.length);
|
||||||
List<String> headerValues = request.getHeaders().get(name);
|
List<String> headerValues = request.getHeaders().get(name);
|
||||||
Assert.state(headerValues != null, "No header values");for (int i = 0 ; i < expectedValues.length; i++) {
|
Assert.state(headerValues != null, "No header values");
|
||||||
assertEquals("Request header [" + name + "]",
|
for (int i = 0; i < expectedValues.length; i++) {
|
||||||
expectedValues[i], headerValues.get(i));
|
assertEquals("Request header [" + name + "]",
|
||||||
|
expectedValues[i], headerValues.get(i));
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2012 the original author or authors.
|
* Copyright 2002-2017 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.
|
||||||
|
@ -59,7 +59,8 @@ public class ResourceAdapterApplicationContext extends GenericApplicationContext
|
||||||
beanFactory.registerResolvableDependency(BootstrapContext.class, this.bootstrapContext);
|
beanFactory.registerResolvableDependency(BootstrapContext.class, this.bootstrapContext);
|
||||||
|
|
||||||
// JCA WorkManager resolved lazily - may not be available.
|
// JCA WorkManager resolved lazily - may not be available.
|
||||||
beanFactory.registerResolvableDependency(WorkManager.class, (ObjectFactory<WorkManager>) bootstrapContext::getWorkManager);
|
beanFactory.registerResolvableDependency(WorkManager.class,
|
||||||
|
(ObjectFactory<WorkManager>) this.bootstrapContext::getWorkManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,6 @@ import org.springframework.transaction.PlatformTransactionManager;
|
||||||
import org.springframework.transaction.TransactionStatus;
|
import org.springframework.transaction.TransactionStatus;
|
||||||
import org.springframework.transaction.TransactionSystemException;
|
import org.springframework.transaction.TransactionSystemException;
|
||||||
import org.springframework.transaction.support.CallbackPreferringPlatformTransactionManager;
|
import org.springframework.transaction.support.CallbackPreferringPlatformTransactionManager;
|
||||||
import org.springframework.transaction.support.TransactionCallback;
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
import org.springframework.util.ConcurrentReferenceHashMap;
|
import org.springframework.util.ConcurrentReferenceHashMap;
|
||||||
|
@ -307,19 +306,23 @@ public abstract class TransactionAspectSupport implements BeanFactoryAware, Init
|
||||||
TransactionInfo txInfo = prepareTransactionInfo(tm, txAttr, joinpointIdentification, status);
|
TransactionInfo txInfo = prepareTransactionInfo(tm, txAttr, joinpointIdentification, status);
|
||||||
try {
|
try {
|
||||||
return invocation.proceedWithInvocation();
|
return invocation.proceedWithInvocation();
|
||||||
} catch (Throwable ex) {
|
}
|
||||||
|
catch (Throwable ex) {
|
||||||
if (txAttr.rollbackOn(ex)) {
|
if (txAttr.rollbackOn(ex)) {
|
||||||
// A RuntimeException: will lead to a rollback.
|
// A RuntimeException: will lead to a rollback.
|
||||||
if (ex instanceof RuntimeException) {
|
if (ex instanceof RuntimeException) {
|
||||||
throw (RuntimeException) ex;
|
throw (RuntimeException) ex;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
throw new ThrowableHolderException(ex);
|
throw new ThrowableHolderException(ex);
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
// A normal return value: will lead to a commit.
|
// A normal return value: will lead to a commit.
|
||||||
return new ThrowableHolder(ex);
|
return new ThrowableHolder(ex);
|
||||||
}
|
}
|
||||||
} finally {
|
}
|
||||||
|
finally {
|
||||||
cleanupTransactionInfo(txInfo);
|
cleanupTransactionInfo(txInfo);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -290,43 +290,6 @@ public class MediaType extends MimeType implements Serializable {
|
||||||
*/
|
*/
|
||||||
public final static String APPLICATION_PROBLEM_XML_VALUE = "application/problem+xml";
|
public final static String APPLICATION_PROBLEM_XML_VALUE = "application/problem+xml";
|
||||||
|
|
||||||
/**
|
|
||||||
* Comparator used by {@link #sortByQualityValue(List)}.
|
|
||||||
*/
|
|
||||||
public static final Comparator<MediaType> QUALITY_VALUE_COMPARATOR = (mediaType1, mediaType2) -> {
|
|
||||||
double quality1 = mediaType1.getQualityValue();
|
|
||||||
double quality2 = mediaType2.getQualityValue();
|
|
||||||
int qualityComparison = Double.compare(quality2, quality1);
|
|
||||||
if (qualityComparison != 0) {
|
|
||||||
return qualityComparison; // audio/*;q=0.7 < audio/*;q=0.3
|
|
||||||
}
|
|
||||||
else if (mediaType1.isWildcardType() && !mediaType2.isWildcardType()) { // */* < audio/*
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (mediaType2.isWildcardType() && !mediaType1.isWildcardType()) { // audio/* > */*
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else if (!mediaType1.getType().equals(mediaType2.getType())) { // audio/basic == text/html
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else { // mediaType1.getType().equals(mediaType2.getType())
|
|
||||||
if (mediaType1.isWildcardSubtype() && !mediaType2.isWildcardSubtype()) { // audio/* < audio/basic
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (mediaType2.isWildcardSubtype() && !mediaType1.isWildcardSubtype()) { // audio/basic > audio/*
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else if (!mediaType1.getSubtype().equals(mediaType2.getSubtype())) { // audio/basic == audio/wave
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
int paramsSize1 = mediaType1.getParameters().size();
|
|
||||||
int paramsSize2 = mediaType2.getParameters().size();
|
|
||||||
return (paramsSize2 < paramsSize1 ? -1 : (paramsSize2 == paramsSize1 ? 0 : 1)); // audio/basic;level=1 < audio/basic
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private static final String PARAM_QUALITY_FACTOR = "q";
|
private static final String PARAM_QUALITY_FACTOR = "q";
|
||||||
|
|
||||||
|
|
||||||
|
@ -687,6 +650,44 @@ public class MediaType extends MimeType implements Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comparator used by {@link #sortByQualityValue(List)}.
|
||||||
|
*/
|
||||||
|
public static final Comparator<MediaType> QUALITY_VALUE_COMPARATOR = (mediaType1, mediaType2) -> {
|
||||||
|
double quality1 = mediaType1.getQualityValue();
|
||||||
|
double quality2 = mediaType2.getQualityValue();
|
||||||
|
int qualityComparison = Double.compare(quality2, quality1);
|
||||||
|
if (qualityComparison != 0) {
|
||||||
|
return qualityComparison; // audio/*;q=0.7 < audio/*;q=0.3
|
||||||
|
}
|
||||||
|
else if (mediaType1.isWildcardType() && !mediaType2.isWildcardType()) { // */* < audio/*
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (mediaType2.isWildcardType() && !mediaType1.isWildcardType()) { // audio/* > */*
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else if (!mediaType1.getType().equals(mediaType2.getType())) { // audio/basic == text/html
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else { // mediaType1.getType().equals(mediaType2.getType())
|
||||||
|
if (mediaType1.isWildcardSubtype() && !mediaType2.isWildcardSubtype()) { // audio/* < audio/basic
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (mediaType2.isWildcardSubtype() && !mediaType1.isWildcardSubtype()) { // audio/basic > audio/*
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else if (!mediaType1.getSubtype().equals(mediaType2.getSubtype())) { // audio/basic == audio/wave
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int paramsSize1 = mediaType1.getParameters().size();
|
||||||
|
int paramsSize2 = mediaType2.getParameters().size();
|
||||||
|
return (paramsSize2 < paramsSize1 ? -1 : (paramsSize2 == paramsSize1 ? 0 : 1)); // audio/basic;level=1 < audio/basic
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Comparator used by {@link #sortBySpecificity(List)}.
|
* Comparator used by {@link #sortBySpecificity(List)}.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -107,8 +107,8 @@ public final class WebAsyncManager {
|
||||||
public void setAsyncWebRequest(final AsyncWebRequest asyncWebRequest) {
|
public void setAsyncWebRequest(final AsyncWebRequest asyncWebRequest) {
|
||||||
Assert.notNull(asyncWebRequest, "AsyncWebRequest must not be null");
|
Assert.notNull(asyncWebRequest, "AsyncWebRequest must not be null");
|
||||||
this.asyncWebRequest = asyncWebRequest;
|
this.asyncWebRequest = asyncWebRequest;
|
||||||
this.asyncWebRequest.addCompletionHandler(()
|
this.asyncWebRequest.addCompletionHandler(() -> asyncWebRequest.removeAttribute(
|
||||||
-> asyncWebRequest.removeAttribute(WebAsyncUtils.WEB_ASYNC_MANAGER_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST));
|
WebAsyncUtils.WEB_ASYNC_MANAGER_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -287,13 +287,14 @@ public final class WebAsyncManager {
|
||||||
|
|
||||||
this.asyncWebRequest.addTimeoutHandler(() -> {
|
this.asyncWebRequest.addTimeoutHandler(() -> {
|
||||||
logger.debug("Processing timeout");
|
logger.debug("Processing timeout");
|
||||||
Object result = interceptorChain.triggerAfterTimeout(asyncWebRequest, callable);
|
Object result = interceptorChain.triggerAfterTimeout(this.asyncWebRequest, callable);
|
||||||
if (result != CallableProcessingInterceptor.RESULT_NONE) {
|
if (result != CallableProcessingInterceptor.RESULT_NONE) {
|
||||||
setConcurrentResultAndDispatch(result);
|
setConcurrentResultAndDispatch(result);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.asyncWebRequest.addCompletionHandler(() -> interceptorChain.triggerAfterCompletion(asyncWebRequest, callable));
|
this.asyncWebRequest.addCompletionHandler(() ->
|
||||||
|
interceptorChain.triggerAfterCompletion(this.asyncWebRequest, callable));
|
||||||
|
|
||||||
interceptorChain.applyBeforeConcurrentHandling(this.asyncWebRequest, callable);
|
interceptorChain.applyBeforeConcurrentHandling(this.asyncWebRequest, callable);
|
||||||
startAsyncProcessing(processingContext);
|
startAsyncProcessing(processingContext);
|
||||||
|
@ -301,14 +302,14 @@ public final class WebAsyncManager {
|
||||||
this.taskExecutor.submit(() -> {
|
this.taskExecutor.submit(() -> {
|
||||||
Object result = null;
|
Object result = null;
|
||||||
try {
|
try {
|
||||||
interceptorChain.applyPreProcess(asyncWebRequest, callable);
|
interceptorChain.applyPreProcess(this.asyncWebRequest, callable);
|
||||||
result = callable.call();
|
result = callable.call();
|
||||||
}
|
}
|
||||||
catch (Throwable ex) {
|
catch (Throwable ex) {
|
||||||
result = ex;
|
result = ex;
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
result = interceptorChain.applyPostProcess(asyncWebRequest, callable, result);
|
result = interceptorChain.applyPostProcess(this.asyncWebRequest, callable, result);
|
||||||
}
|
}
|
||||||
setConcurrentResultAndDispatch(result);
|
setConcurrentResultAndDispatch(result);
|
||||||
});
|
});
|
||||||
|
@ -375,7 +376,7 @@ public final class WebAsyncManager {
|
||||||
|
|
||||||
this.asyncWebRequest.addTimeoutHandler(() -> {
|
this.asyncWebRequest.addTimeoutHandler(() -> {
|
||||||
try {
|
try {
|
||||||
interceptorChain.triggerAfterTimeout(asyncWebRequest, deferredResult);
|
interceptorChain.triggerAfterTimeout(this.asyncWebRequest, deferredResult);
|
||||||
}
|
}
|
||||||
catch (Throwable ex) {
|
catch (Throwable ex) {
|
||||||
setConcurrentResultAndDispatch(ex);
|
setConcurrentResultAndDispatch(ex);
|
||||||
|
@ -383,7 +384,7 @@ public final class WebAsyncManager {
|
||||||
});
|
});
|
||||||
|
|
||||||
this.asyncWebRequest.addCompletionHandler(()
|
this.asyncWebRequest.addCompletionHandler(()
|
||||||
-> interceptorChain.triggerAfterCompletion(asyncWebRequest, deferredResult));
|
-> interceptorChain.triggerAfterCompletion(this.asyncWebRequest, deferredResult));
|
||||||
|
|
||||||
interceptorChain.applyBeforeConcurrentHandling(this.asyncWebRequest, deferredResult);
|
interceptorChain.applyBeforeConcurrentHandling(this.asyncWebRequest, deferredResult);
|
||||||
startAsyncProcessing(processingContext);
|
startAsyncProcessing(processingContext);
|
||||||
|
@ -391,7 +392,7 @@ public final class WebAsyncManager {
|
||||||
try {
|
try {
|
||||||
interceptorChain.applyPreProcess(this.asyncWebRequest, deferredResult);
|
interceptorChain.applyPreProcess(this.asyncWebRequest, deferredResult);
|
||||||
deferredResult.setResultHandler(result -> {
|
deferredResult.setResultHandler(result -> {
|
||||||
result = interceptorChain.applyPostProcess(asyncWebRequest, deferredResult, result);
|
result = interceptorChain.applyPostProcess(this.asyncWebRequest, deferredResult, result);
|
||||||
setConcurrentResultAndDispatch(result);
|
setConcurrentResultAndDispatch(result);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,8 +47,8 @@ public class ExceptionHandlerMethodResolver {
|
||||||
/**
|
/**
|
||||||
* A filter for selecting {@code @ExceptionHandler} methods.
|
* A filter for selecting {@code @ExceptionHandler} methods.
|
||||||
*/
|
*/
|
||||||
public static final MethodFilter EXCEPTION_HANDLER_METHODS =
|
public static final MethodFilter EXCEPTION_HANDLER_METHODS = method ->
|
||||||
method -> (AnnotationUtils.findAnnotation(method, ExceptionHandler.class) != null);
|
(AnnotationUtils.findAnnotation(method, ExceptionHandler.class) != null);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Arbitrary {@link Method} reference, indicating no method found in the cache.
|
* Arbitrary {@link Method} reference, indicating no method found in the cache.
|
||||||
|
|
|
@ -21,7 +21,6 @@ import java.util.ArrayList;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
@ -117,19 +116,6 @@ import org.springframework.web.util.WebUtils;
|
||||||
public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter
|
public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter
|
||||||
implements BeanFactoryAware, InitializingBean {
|
implements BeanFactoryAware, InitializingBean {
|
||||||
|
|
||||||
/**
|
|
||||||
* MethodFilter that matches {@link InitBinder @InitBinder} methods.
|
|
||||||
*/
|
|
||||||
public static final MethodFilter INIT_BINDER_METHODS =
|
|
||||||
method -> AnnotationUtils.findAnnotation(method, InitBinder.class) != null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* MethodFilter that matches {@link ModelAttribute @ModelAttribute} methods.
|
|
||||||
*/
|
|
||||||
public static final MethodFilter MODEL_ATTRIBUTE_METHODS =
|
|
||||||
method -> ((AnnotationUtils.findAnnotation(method, RequestMapping.class) == null)
|
|
||||||
&& (AnnotationUtils.findAnnotation(method, ModelAttribute.class) != null));
|
|
||||||
|
|
||||||
private List<HandlerMethodArgumentResolver> customArgumentResolvers;
|
private List<HandlerMethodArgumentResolver> customArgumentResolvers;
|
||||||
|
|
||||||
private HandlerMethodArgumentResolverComposite argumentResolvers;
|
private HandlerMethodArgumentResolverComposite argumentResolvers;
|
||||||
|
@ -994,4 +980,18 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter
|
||||||
return mav;
|
return mav;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MethodFilter that matches {@link InitBinder @InitBinder} methods.
|
||||||
|
*/
|
||||||
|
public static final MethodFilter INIT_BINDER_METHODS = method ->
|
||||||
|
AnnotationUtils.findAnnotation(method, InitBinder.class) != null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MethodFilter that matches {@link ModelAttribute @ModelAttribute} methods.
|
||||||
|
*/
|
||||||
|
public static final MethodFilter MODEL_ATTRIBUTE_METHODS = method ->
|
||||||
|
((AnnotationUtils.findAnnotation(method, RequestMapping.class) == null) &&
|
||||||
|
(AnnotationUtils.findAnnotation(method, ModelAttribute.class) != null));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2016 the original author or authors.
|
* Copyright 2002-2017 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.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2016 the original author or authors.
|
* Copyright 2002-2017 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.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2016 the original author or authors.
|
* Copyright 2002-2017 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.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2015 the original author or authors.
|
* Copyright 2002-2017 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.
|
||||||
|
@ -110,9 +110,9 @@ public class WebSocketMessageBrokerStats {
|
||||||
@Nullable
|
@Nullable
|
||||||
private ScheduledFuture<?> initLoggingTask(long initialDelay) {
|
private ScheduledFuture<?> initLoggingTask(long initialDelay) {
|
||||||
if (logger.isInfoEnabled() && this.loggingPeriod > 0) {
|
if (logger.isInfoEnabled() && this.loggingPeriod > 0) {
|
||||||
return this.sockJsTaskScheduler.scheduleAtFixedRate(()
|
return this.sockJsTaskScheduler.scheduleAtFixedRate(() ->
|
||||||
-> logger.info(WebSocketMessageBrokerStats.this.toString()),
|
logger.info(WebSocketMessageBrokerStats.this.toString()),
|
||||||
initialDelay, this.loggingPeriod, TimeUnit.MILLISECONDS);
|
initialDelay, this.loggingPeriod, TimeUnit.MILLISECONDS);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -402,17 +402,17 @@ public class WebSocketStompClient extends StompClientSupport implements SmartLif
|
||||||
Assert.state(getTaskScheduler() != null, "No TaskScheduler configured");
|
Assert.state(getTaskScheduler() != null, "No TaskScheduler configured");
|
||||||
this.lastReadTime = System.currentTimeMillis();
|
this.lastReadTime = System.currentTimeMillis();
|
||||||
this.inactivityTasks.add(getTaskScheduler().scheduleWithFixedDelay(() -> {
|
this.inactivityTasks.add(getTaskScheduler().scheduleWithFixedDelay(() -> {
|
||||||
if (System.currentTimeMillis() - lastReadTime > duration) {
|
if (System.currentTimeMillis() - lastReadTime > duration) {
|
||||||
try {
|
try {
|
||||||
runnable.run();
|
runnable.run();
|
||||||
}
|
}
|
||||||
catch (Throwable ex) {
|
catch (Throwable ex) {
|
||||||
if (logger.isDebugEnabled()) {
|
if (logger.isDebugEnabled()) {
|
||||||
logger.debug("ReadInactivityTask failure", ex);
|
logger.debug("ReadInactivityTask failure", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, duration / 2));
|
}, duration / 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue