Skip to content

Commit 8beb0c4

Browse files
committed
Support concurrency on the OgnlClassResolver mybatis#1216
1 parent 75e617a commit 8beb0c4

File tree

2 files changed

+7
-24
lines changed

2 files changed

+7
-24
lines changed

src/main/java/org/apache/ibatis/scripting/xmltags/OgnlCache.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
public final class OgnlCache {
3434

3535
private static final OgnlMemberAccess MEMBER_ACCESS = new OgnlMemberAccess();
36+
private static final OgnlClassResolver CLASS_RESOLVER = new OgnlClassResolver();
3637
private static final Map<String, Object> expressionCache = new ConcurrentHashMap<String, Object>();
3738

3839
private OgnlCache() {
@@ -41,7 +42,7 @@ private OgnlCache() {
4142

4243
public static Object getValue(String expression, Object root) {
4344
try {
44-
Map context = Ognl.createDefaultContext(root, MEMBER_ACCESS, new OgnlClassResolver(), null);
45+
Map context = Ognl.createDefaultContext(root, MEMBER_ACCESS, CLASS_RESOLVER, null);
4546
return Ognl.getValue(parseExpression(expression), context, root);
4647
} catch (OgnlException e) {
4748
throw new BuilderException("Error evaluating expression '" + expression + "'. Cause: " + e, e);
Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2009-2017 the original author or authors.
2+
* Copyright 2009-2018 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,11 +15,7 @@
1515
*/
1616
package org.apache.ibatis.scripting.xmltags;
1717

18-
import java.util.HashMap;
19-
import java.util.Map;
20-
21-
import ognl.ClassResolver;
22-
18+
import ognl.DefaultClassResolver;
2319
import org.apache.ibatis.io.Resources;
2420

2521
/**
@@ -31,25 +27,11 @@
3127
*
3228
* @see <a href='https://github.com/mybatis/mybatis-3/issues/161'>Issue 161</a>
3329
*/
34-
public class OgnlClassResolver implements ClassResolver {
35-
36-
private final Map<String, Class<?>> classes = new HashMap<String, Class<?>>(101);
30+
public class OgnlClassResolver extends DefaultClassResolver {
3731

3832
@Override
39-
public Class classForName(String className, Map context) throws ClassNotFoundException {
40-
Class<?> result = null;
41-
if ((result = classes.get(className)) == null) {
42-
try {
43-
result = Resources.classForName(className);
44-
} catch (ClassNotFoundException e1) {
45-
if (className.indexOf('.') == -1) {
46-
result = Resources.classForName("java.lang." + className);
47-
classes.put("java.lang." + className, result);
48-
}
49-
}
50-
classes.put(className, result);
51-
}
52-
return result;
33+
protected Class toClassForName(String className) throws ClassNotFoundException {
34+
return Resources.classForName(className);
5335
}
5436

5537
}

0 commit comments

Comments
 (0)