Skip to content

Commit 4e0fa21

Browse files
committed
Merge branch '3.0.x'
2 parents af78cc9 + a1b548e commit 4e0fa21

File tree

8 files changed

+42
-12
lines changed

8 files changed

+42
-12
lines changed

build.gradle

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import org.apache.tools.ant.filters.ReplaceTokens
2-
31
buildscript {
42
repositories {
53
maven { url "https://repo.grails.org/grails/core" }
@@ -29,7 +27,7 @@ ext {
2927

3028
antTraxVersion = "1.7.1"
3129
antVersion = "1.9.4"
32-
aspectjVersion = "1.8.5" // use same version as org.springframework:spring-aspects uses
30+
aspectjVersion = "1.8.7" // use same version as org.springframework:spring-aspects uses
3331
commonsCliVersion = "1.2"
3432
commonsCollectionsVersion = "3.2.1"
3533
commonsIOVersion = "2.2"

grails-core/src/main/groovy/org/grails/core/artefact/DomainClassArtefactHandler.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.grails.core.artefact;
1717

18+
import grails.artefact.Artefact;
1819
import grails.core.*;
1920
import grails.core.support.GrailsApplicationAware;
2021
import grails.persistence.Entity;
@@ -31,6 +32,7 @@
3132
import org.grails.validation.ConstraintEvalUtils;
3233

3334
import java.io.IOException;
35+
import java.lang.annotation.Annotation;
3436
import java.lang.reflect.Modifier;
3537
import java.net.URL;
3638
import java.util.Map;
@@ -152,6 +154,11 @@ private static boolean doIsDomainClassCheck(Class<?> clazz) {
152154
return true;
153155
}
154156

157+
Artefact artefactAnn = clazz.getAnnotation(Artefact.class);
158+
if(artefactAnn != null && artefactAnn.value().equals(DomainClassArtefactHandler.TYPE)) {
159+
return true;
160+
}
161+
155162
Class<?> testClass = clazz;
156163
while (testClass != null && !testClass.equals(GroovyObject.class) && !testClass.equals(Object.class)) {
157164
try {

grails-core/src/main/groovy/org/grails/transaction/ChainedTransactionManager.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@
4747
*
4848
* @author Michael Hunger
4949
* @author Oliver Gierke
50+
* @author Lari Hotari
51+
* @author Graeme Rocher
52+
*
5053
* @since 2.3.6
5154
*/
5255
public class ChainedTransactionManager implements PlatformTransactionManager {
@@ -92,7 +95,7 @@ public MultiTransactionStatus getTransaction(TransactionDefinition definition) t
9295

9396
MultiTransactionStatus mts = new MultiTransactionStatus(transactionManagers.get(0));
9497

95-
if (!synchronizationManager.isSynchronizationActive()) {
98+
if (!synchronizationManager.isSynchronizationActive() && canCreateTransaction(definition)) {
9699
synchronizationManager.initSynchronization();
97100
mts.setNewSynchonization();
98101
}
@@ -127,6 +130,12 @@ public MultiTransactionStatus getTransaction(TransactionDefinition definition) t
127130
return mts;
128131
}
129132

133+
protected boolean canCreateTransaction(TransactionDefinition definition) {
134+
return definition.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRED ||
135+
definition.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRES_NEW ||
136+
definition.getPropagationBehavior() == TransactionDefinition.PROPAGATION_NESTED;
137+
}
138+
130139
/*
131140
* (non-Javadoc)
132141
* @see org.springframework.transaction.PlatformTransactionManager#commit(org.springframework.transaction.TransactionStatus)

grails-plugin-controllers/src/main/groovy/grails/artefact/controller/support/RequestForwarder.groovy

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,6 @@ trait RequestForwarder implements WebAttributes {
9696
WebUtils.exposeRequestAttributes(request, (Map)model);
9797

9898
request.setAttribute(GrailsApplicationAttributes.FORWARD_IN_PROGRESS, true)
99-
request.setAttribute(GrailsApplicationAttributes.FORWARD_ISSUED, true)
100-
10199
params.includeContext = false
102100
def fowardURI = lookupLinkGenerator().link(params)
103101

@@ -108,6 +106,7 @@ trait RequestForwarder implements WebAttributes {
108106
webRequest.removeAttribute(UrlMappingsHandlerMapping.MATCHED_REQUEST, WebRequest.SCOPE_REQUEST);
109107
webRequest.removeAttribute("grailsWebRequestFilter" + OncePerRequestFilter.ALREADY_FILTERED_SUFFIX, WebRequest.SCOPE_REQUEST);
110108
dispatcher.forward(request, response);
109+
request.setAttribute(GrailsApplicationAttributes.FORWARD_ISSUED, true)
111110
return fowardURI
112111
}
113112

grails-plugin-domain-class/src/main/groovy/org/grails/plugins/domain/support/GrailsDomainClassCleaner.groovy

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@ class GrailsDomainClassCleaner implements ApplicationListener<ContextClosedEvent
4343
if(GormEntity.isAssignableFrom(clz)) {
4444
try {
4545
clz.initInternalApi null
46-
} catch (e) {
47-
log.warn("Error clearing instance api property in ${clz.name}", e)
46+
} catch (Throwable e) {
47+
// ignore, GORM 5 doesn't have these methods
4848
}
4949
try {
5050
clz.initInternalStaticApi null
51-
} catch (e) {
52-
log.warn("Error clearing static api property in ${clz.name}", e)
51+
} catch (Throwable e) {
52+
// ignore, GORM 5 doesn't have these methods
5353
}
5454
} else {
5555
clearStaticApiInstances(clz)

grails-plugin-filters/src/main/groovy/org/grails/plugins/web/filters/CompositeInterceptor.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.grails.plugins.web.filters;
1717

1818
import org.grails.web.util.GrailsApplicationAttributes;
19+
import org.grails.web.util.WebUtils;
1920
import org.slf4j.Logger;
2021
import org.slf4j.LoggerFactory;
2122
import org.springframework.web.servlet.HandlerInterceptor;
@@ -52,7 +53,8 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
5253
return false;
5354
}
5455
// if forward is called, bail out
55-
if (request.getAttribute(GrailsApplicationAttributes.FORWARD_ISSUED) != null) {
56+
if (request.getAttribute(GrailsApplicationAttributes.FORWARD_ISSUED) != null && !WebUtils.isForwardOrInclude(request)) {
57+
request.removeAttribute(GrailsApplicationAttributes.FORWARD_ISSUED);
5658
return false;
5759
}
5860
}
@@ -65,6 +67,12 @@ public void postHandle(HttpServletRequest request, HttpServletResponse response,
6567
for (HandlerInterceptor handler : handlersReversed) {
6668
handler.postHandle(request, response, o, modelAndView);
6769
}
70+
71+
// remove the FORWARD_ISSUED attribute just in case forward was called from an action
72+
// this will ensure the subsequent action works since FORWARD_ISSUED is only used
73+
// to know whether forward was called from within a filter
74+
request.removeAttribute(GrailsApplicationAttributes.FORWARD_ISSUED);
75+
6876
}
6977

7078
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) throws Exception {

grails-web-common/src/main/groovy/org/grails/web/servlet/mvc/GrailsWebRequest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@
6868
*/
6969
public class GrailsWebRequest extends DispatcherServletWebRequest {
7070

71-
private static final String FORWARD_CALLED = GrailsApplicationAttributes.FORWARD_ISSUED;
7271
private static final String REDIRECT_CALLED = GrailsApplicationAttributes.REDIRECT_ISSUED;
7372

7473
private static final Class<? extends GrailsApplicationAttributes> grailsApplicationAttributesClass = GrailsFactoriesLoader.loadFactoryClasses(GrailsApplicationAttributes.class, GrailsWebRequest.class.getClassLoader()).get(0);

grails-web-common/src/main/groovy/org/grails/web/util/WebUtils.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,4 +495,14 @@ public static boolean isInclude(HttpServletRequest request) {
495495
return request.getAttribute(INCLUDE_REQUEST_URI_ATTRIBUTE) != null;
496496
}
497497

498+
/**
499+
* Check whether the given request is an include or forward request
500+
*
501+
* @param request The request
502+
* @return True if it is an include or forward request
503+
*/
504+
public static boolean isForwardOrInclude(HttpServletRequest request) {
505+
return isForward(request) || isInclude(request);
506+
}
507+
498508
}

0 commit comments

Comments
 (0)