Author: rmannibucau
Date: Sun Sep 30 17:38:43 2012
New Revision: 1392083
URL: http://svn.apache.org/viewvc?rev=1392083&view=rev
Log:
slight refactoring of @WebXX handling - no need of threadlocal normally + more
generic handling of web-inf/classes (advanced webapp config, not default)
Modified:
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
Modified:
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java?rev=1392083&r1=1392082&r2=1392083&view=diff
==============================================================================
---
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
(original)
+++
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
Sun Sep 30 17:38:43 2012
@@ -51,7 +51,7 @@ public class OpenEJBContextConfig extend
// processAnnotationXXX is called for each folder of WEB-INF
// since we store all classes in WEB-INF we will do it only once so use
this boolean to avoid multiple processing
- private ThreadLocal<Boolean> webInfClassesAnnotationsProcessed = new
ThreadLocal<Boolean>();
+ private boolean webInfClassesAnnotationsProcessed = false;
public OpenEJBContextConfig(TomcatWebAppBuilder.StandardContextInfo
standardContextInfo) {
logger.debug("OpenEJBContextConfig({0})",
standardContextInfo.toString());
@@ -128,64 +128,50 @@ public class OpenEJBContextConfig extend
@Override // called before processAnnotationsFile so using it as hook to
init webInfClassesAnnotationsProcessed
protected void processServletContainerInitializers(final Set<WebXml>
fragments) {
- webInfClassesAnnotationsProcessed.set(false);
+ webInfClassesAnnotationsProcessed = false;
try {
super.processServletContainerInitializers(fragments);
} catch (RuntimeException e) { // if exception occurs we have to clear
the threadlocal
- webInfClassesAnnotationsProcessed.remove();
+ webInfClassesAnnotationsProcessed = false;
throw e;
}
}
@Override // called after processAnnotationsXX so using it as hook to
reset webInfClassesAnnotationsProcessed
protected void processAnnotations(final Set<WebXml> fragments, final
boolean handlesTypesOnly) {
- webInfClassesAnnotationsProcessed.remove();
+ webInfClassesAnnotationsProcessed = false;
super.processAnnotations(fragments, handlesTypesOnly);
}
@Override
protected void processAnnotationsFile(File file, WebXml fragment, boolean
handlesTypesOnly) {
- if (webInfClassesAnnotationsProcessed.get()) {
- return;
- }
-
final WebAppInfo webAppInfo = info.get();
if (webAppInfo == null) {
super.processAnnotationsFile(file, fragment, handlesTypesOnly);
return;
}
- for (ClassListInfo webAnnotated : webAppInfo.webAnnotatedClasses) {
- try {
- final File classContainerAsFile = URLs.toFile(new
URL(webAnnotated.name));
- if (!isIncludedIn(classContainerAsFile, file)) {
- continue;
- }
-
- internalProcessAnnotationsStream(webAnnotated.list, fragment,
handlesTypesOnly);
- } catch (MalformedURLException e) {
- throw new IllegalArgumentException(e);
- } catch (IOException e) {
- throw new IllegalArgumentException(e);
- }
- }
- webInfClassesAnnotationsProcessed.set(true);
+ internalProcessAnnotations(file, webAppInfo, fragment,
handlesTypesOnly);
}
@Override
protected void processAnnotationsUrl(URL currentUrl, WebXml fragment,
boolean handlesTypeOnly) {
+ final File currentUrlAsFile = URLs.toFile(currentUrl);
+
final WebAppInfo webAppInfo = info.get();
if (webAppInfo == null) {
super.processAnnotationsUrl(currentUrl, fragment, handlesTypeOnly);
return;
}
+ internalProcessAnnotations(currentUrlAsFile, webAppInfo, fragment,
handlesTypeOnly);
+ }
+
+ private void internalProcessAnnotations(final File currentUrlAsFile, final
WebAppInfo webAppInfo, final WebXml fragment, final boolean handlesTypeOnly) {
for (ClassListInfo webAnnotated : webAppInfo.webAnnotatedClasses) {
try {
- final File classContainerAsFile = URLs.toFile(new
URL(webAnnotated.name));
- final File currentUrlAsFile = URLs.toFile(currentUrl);
- if (!isIncludedIn(classContainerAsFile, currentUrlAsFile)) {
+ if (!isIncludedIn(webAnnotated.name, currentUrlAsFile)) {
continue;
}
@@ -214,11 +200,21 @@ public class OpenEJBContextConfig extend
}
}
- private static boolean isIncludedIn(final File file, final File
classAsFile) {
+ private boolean isIncludedIn(final String filePath, final File
classAsFile) throws MalformedURLException {
+ final File file = URLs.toFile(new URL(filePath));
+
File current = classAsFile;
boolean webInf = false;
while (current != null && current.exists()) {
if (current.equals(file)) {
+ final File parent = current.getParentFile();
+ if ("classes".equals(current.getName()) && parent != null &&
"WEB-INF".equals(parent.getName())) {
+ if (webInfClassesAnnotationsProcessed) {
+ return false;
+ }
+ webInfClassesAnnotationsProcessed = true;
+ return true;
+ }
return true;
}
if (current.getName().equals("WEB-INF")) {
@@ -226,6 +222,6 @@ public class OpenEJBContextConfig extend
}
current = current.getParentFile();
}
- return !webInf;
+ return !webInf; // not in the file but not in a war too so use it
}
}