Skip to content

Commit

Permalink
Replaced the single cache of scanned classes with per-app cache.
Browse files Browse the repository at this point in the history
  • Loading branch information
nmihajlovski committed Jul 28, 2015
1 parent 27c3dab commit 9f86db8
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 15 deletions.
5 changes: 5 additions & 0 deletions rapidoid-ctx/pom.xml
Expand Up @@ -17,6 +17,11 @@
<artifactId>rapidoid-annotations</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.rapidoid</groupId>
<artifactId>rapidoid-tuple</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.rapidoid</groupId>
<artifactId>rapidoid-test-commons</artifactId>
Expand Down
11 changes: 11 additions & 0 deletions rapidoid-ctx/src/main/java/org/rapidoid/ctx/Classes.java
Expand Up @@ -20,17 +20,24 @@
* #L%
*/

import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.tuple.Tuple;

@Authors("Nikolche Mihajlovski")
@Since("2.1.0")
public class Classes extends LinkedHashMap<String, Class<?>> {

private static final long serialVersionUID = 8987037790459772014L;

private final Map<Tuple, List<Class<?>>> cache = Collections.synchronizedMap(new HashMap<Tuple, List<Class<?>>>());

public static Classes from(Iterable<Class<?>> classes) {
Classes clss = new Classes();

Expand All @@ -41,4 +48,8 @@ public static Classes from(Iterable<Class<?>> classes) {
return clss;
}

public Map<Tuple, List<Class<?>>> getCache() {
return cache;
}

}
24 changes: 9 additions & 15 deletions rapidoid-http/src/main/java/org/rapidoid/appctx/Scan.java
Expand Up @@ -40,8 +40,6 @@
@Since("2.0.0")
public class Scan {

private static final Map<Tuple, List<Class<?>>> CLASSES_CACHE = U.map();

private Scan() {}

public static List<Class<?>> classes() {
Expand Down Expand Up @@ -78,32 +76,28 @@ private static synchronized List<Class<?>> scanClasses(String packageName, Strin

packageName = U.or(packageName, "");

boolean caching = classLoader == null;
Tuple cacheKey = null;

if (caching) {
cacheKey = new Tuple(packageName, nameRegex, filter, annotated, classLoader);
List<Class<?>> classes = CLASSES_CACHE.get(cacheKey);
if (classes != null) {
return classes;
}
Application app = Ctxs.ctx().app();
Classes appClasses = app.getClasses();
Map<Tuple, List<Class<?>>> cache = appClasses.getCache();

cacheKey = new Tuple(packageName, nameRegex, filter, annotated, classLoader);
List<Class<?>> cachedClasses = cache.get(cacheKey);
if (cachedClasses != null) {
return cachedClasses;
}

long startingAt = U.time();

Application app = Ctxs.ctx().app();
Classes appClasses = app.getClasses();

Log.info("Filtering " + appClasses.size() + " classes", "annotated", annotated, "package", packageName, "name",
nameRegex);

Pattern regex = nameRegex != null ? Pattern.compile(nameRegex) : null;

List<Class<?>> classes = filterClasses(appClasses, packageName, regex, filter, annotated);

if (caching) {
CLASSES_CACHE.put(cacheKey, classes);
}
cache.put(cacheKey, classes);

long timeMs = U.time() - startingAt;
Log.info("Finished classpath scan", "time", timeMs + "ms", "classes", classes);
Expand Down

0 comments on commit 9f86db8

Please sign in to comment.