Skip to content

Commit

Permalink
Updated to SB 3.2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
stojsavljevic committed Nov 30, 2023
1 parent 263335a commit 00859bd
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 30 deletions.
2 changes: 1 addition & 1 deletion multi-ctx-app-builder/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.alex.demo.ctx</groupId>
<artifactId>multi-ctx-app</artifactId>
<version>1.3.1</version>
<version>1.3.2</version>
</parent>

<artifactId>multi-ctx-app-builder</artifactId>
Expand Down
4 changes: 2 additions & 2 deletions multi-ctx-app-embed/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ public AnnotationConfigServletWebServerApplicationContext createChildContext(App
```

It's exposed on port 8082 while actuator is exposed on port 8081.
Most of the logic used for child context creation is taken from: `org.springframework.boot.actuate.autoconfigure.web.servlet.WebMvcEndpointChildContextConfiguration`.
So, child and actuator contexts are very similar.
Most of the logic used for child context creation is taken from: `org.springframework.boot.actuate.autoconfigure.web.server.ChildManagementContextInitializer` and `org.springframework.boot.actuate.autoconfigure.web.ManagementContextFactory`.
So, child and actuator contexts are very similar in case child context is child of parent context.

This demo application provides two options:
* child context is standalone (not child of parent web context). This is default.
Expand Down
2 changes: 1 addition & 1 deletion multi-ctx-app-embed/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.alex.demo.ctx</groupId>
<artifactId>multi-ctx-app</artifactId>
<version>1.3.1</version>
<version>1.3.2</version>
</parent>

<artifactId>multi-ctx-app-embed</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.beans.factory.HierarchicalBeanFactory;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
Expand Down Expand Up @@ -47,6 +45,9 @@
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

/**
* @see org.springframework.boot.actuate.autoconfigure.web.servlet.WebMvcEndpointChildContextConfiguration
*/
Expand Down Expand Up @@ -211,12 +212,9 @@ public ModelAndView handle(HttpServletRequest request, HttpServletResponse respo
return null;
}

/**
* @deprecated
*/
@SuppressWarnings("deprecation")
@Override
@Deprecated
@Deprecated(since = "2.4.9", forRemoval = false)
@SuppressWarnings("deprecation")
public long getLastModified(HttpServletRequest request, Object handler) {
Optional<HandlerAdapter> adapter = getAdapter(handler);
return adapter.map((handlerAdapter) -> handlerAdapter.getLastModified(request, handler)).orElse(0L);
Expand Down Expand Up @@ -245,28 +243,43 @@ class CompositeHandlerExceptionResolver implements HandlerExceptionResolver {
@Autowired
private ListableBeanFactory beanFactory;

private List<HandlerExceptionResolver> resolvers;
private volatile List<HandlerExceptionResolver> resolvers;

@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
if (this.resolvers == null) {
this.resolvers = extractResolvers();
for (HandlerExceptionResolver resolver : getResolvers()) {
ModelAndView resolved = resolver.resolveException(request, response, handler, ex);
if (resolved != null) {
return resolved;
}
}
return this.resolvers.stream().map((resolver) -> resolver.resolveException(request, response, handler, ex))
.filter(Objects::nonNull).findFirst().orElse(null);
return null;
}

private List<HandlerExceptionResolver> extractResolvers() {
List<HandlerExceptionResolver> list = new ArrayList<>(
this.beanFactory.getBeansOfType(HandlerExceptionResolver.class).values());
list.remove(this);
AnnotationAwareOrderComparator.sort(list);
if (list.isEmpty()) {
list.add(new DefaultErrorAttributes());
list.add(new DefaultHandlerExceptionResolver());
private List<HandlerExceptionResolver> getResolvers() {
List<HandlerExceptionResolver> resolvers = this.resolvers;
if (resolvers == null) {
resolvers = new ArrayList<>();
collectResolverBeans(resolvers, this.beanFactory);
resolvers.remove(this);
AnnotationAwareOrderComparator.sort(resolvers);
if (resolvers.isEmpty()) {
resolvers.add(new DefaultErrorAttributes());
resolvers.add(new DefaultHandlerExceptionResolver());
}
this.resolvers = resolvers;
}
return resolvers;
}

private void collectResolverBeans(List<HandlerExceptionResolver> resolvers, BeanFactory beanFactory) {
if (beanFactory instanceof ListableBeanFactory listableBeanFactory) {
resolvers.addAll(listableBeanFactory.getBeansOfType(HandlerExceptionResolver.class).values());
}
if (beanFactory instanceof HierarchicalBeanFactory hierarchicalBeanFactory) {
collectResolverBeans(resolvers, hierarchicalBeanFactory.getParentBeanFactory());
}
return list;
}
}
}
2 changes: 1 addition & 1 deletion multi-ctx-app-servlets/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.alex.demo.ctx</groupId>
<artifactId>multi-ctx-app</artifactId>
<version>1.3.1</version>
<version>1.3.2</version>
</parent>

<artifactId>multi-ctx-app-servlets</artifactId>
Expand Down
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.5</version>
<version>3.2.0</version>
<relativePath />
</parent>

<groupId>com.alex.demo.ctx</groupId>
<artifactId>multi-ctx-app</artifactId>
<version>1.3.1</version>
<version>1.3.2</version>
<packaging>pom</packaging>

<name>Multi Context App</name>
Expand Down

0 comments on commit 00859bd

Please sign in to comment.