Author: rmannibucau
Date: Mon Oct 1 22:14:05 2012
New Revision: 1392659
URL: http://svn.apache.org/viewvc?rev=1392659&view=rev
Log:
TOMEE-439 avoiding NPE when appInfo was not built
Modified:
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java
Modified:
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1392659&r1=1392658&r2=1392659&view=diff
==============================================================================
---
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
(original)
+++
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
Mon Oct 1 22:14:05 2012
@@ -156,7 +156,7 @@ public class TomcatWebAppBuilder impleme
/**
* Context information for web applications
*/
- private final TreeMap<String, ContextInfo> infos = new TreeMap<String,
ContextInfo>();
+ private final Map<String, ContextInfo> infos = new HashMap<String,
ContextInfo>();
/**
* Global listener for Tomcat fired events.
*/
@@ -481,10 +481,13 @@ public class TomcatWebAppBuilder impleme
}
}
- public AppInfo standaAloneWebAppInfo(final String path) {
+ public synchronized ContextInfo standaAloneWebAppInfo(final String path) {
for (ContextInfo info : infos.values()) {
- if (info.appInfo.webAppAlone && (path.equals(info.appInfo.path) ||
path.equals(info.appInfo.path + ".war"))) {
- return info.appInfo;
+ if (info.appInfo != null
+ && (info.appInfo.webAppAlone &&
(path.equals(info.appInfo.path) || path.equals(info.appInfo.path + ".war")))) {
+ return info;
+ } else if (info.standardContext != null &&
(path.equals(info.standardContext.getDocBase()) ||
path.equals(info.standardContext.getDocBase() + ".war"))) {
+ return info;
}
}
return null;
@@ -1317,7 +1320,7 @@ public class TomcatWebAppBuilder impleme
* {@inheritDoc}
*/
@Override
- public void afterStop(final StandardServer standardServer) {
+ public synchronized void afterStop(final StandardServer standardServer) {
// clean ear based webapps after shutdown
for (final ContextInfo contextInfo : infos.values()) {
if (contextInfo != null && contextInfo.deployer != null) {
@@ -1643,7 +1646,11 @@ public class TomcatWebAppBuilder impleme
*/
public ContextInfo getContextInfo(final StandardContext standardContext) {
final String id = getId(standardContext);
- return infos.get(id);
+ final ContextInfo value;
+ synchronized (infos) {
+ value = infos.get(id);
+ }
+ return value;
}
/**
@@ -1651,13 +1658,17 @@ public class TomcatWebAppBuilder impleme
*
* @return context info
*/
- private ContextInfo getContextInfo(final String webAppHost, final String
webAppContextRoot) {
+ private synchronized ContextInfo getContextInfo(final String webAppHost,
final String webAppContextRoot) {
String host = webAppHost;
if (host == null) {
host = defaultHost;
}
final String id = host + "/" + webAppContextRoot;
- return infos.get(id);
+ final ContextInfo value;
+ synchronized (infos) {
+ value = infos.get(id);
+ }
+ return value;
}
/**
@@ -1672,12 +1683,17 @@ public class TomcatWebAppBuilder impleme
if (!contextRoot.startsWith("/")) {
contextRoot = "/" + contextRoot;
}
+
final String id = host + contextRoot;
- ContextInfo contextInfo = infos.get(id);
- if (contextInfo == null) {
- contextInfo = new ContextInfo();
- contextInfo.standardContext = standardContext;
- infos.put(id, contextInfo);
+
+ ContextInfo contextInfo;
+ synchronized (infos) {
+ contextInfo = infos.get(id);
+ if (contextInfo == null) {
+ contextInfo = new ContextInfo();
+ contextInfo.standardContext = standardContext;
+ infos.put(id, contextInfo);
+ }
}
return contextInfo;
}
@@ -1689,7 +1705,9 @@ public class TomcatWebAppBuilder impleme
*/
private void removeContextInfo(final StandardContext standardContext) {
final String id = getId(standardContext);
- infos.remove(id);
+ synchronized (infos) {
+ infos.remove(id);
+ }
}
public static class ContextInfo {
@@ -1699,6 +1717,15 @@ public class TomcatWebAppBuilder impleme
public HostConfig deployer;
public Host host;
public LinkResolver<EntityManagerFactory> emfLinkResolver;
+
+ @Override
+ public String toString() {
+ return "ContextInfo{"
+ + "appInfo = " + appInfo + ", "
+ + "deployer = " + deployer + ", "
+ + "host = " + host
+ + "}";
+ }
}
private static class DeployedApplication {
Modified:
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java?rev=1392659&r1=1392658&r2=1392659&view=diff
==============================================================================
---
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java
(original)
+++
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java
Mon Oct 1 22:14:05 2012
@@ -23,7 +23,6 @@ import org.apache.openejb.assembler.clas
import org.apache.openejb.assembler.classic.WebAppBuilder;
import org.apache.openejb.assembler.classic.WebAppInfo;
import org.apache.openejb.loader.SystemInstance;
-import org.apache.tomee.catalina.TomEERuntimeException;
import org.apache.tomee.catalina.TomcatWebAppBuilder;
import java.io.File;
@@ -37,7 +36,12 @@ public class TomcatWebappDeployer implem
} catch (Exception e) {
throw new OpenEJBRuntimeException(e);
}
- return
tomcatWebAppBuilder.standaAloneWebAppInfo(file.getAbsolutePath());
+
+ final TomcatWebAppBuilder.ContextInfo info =
tomcatWebAppBuilder.standaAloneWebAppInfo(file.getAbsolutePath());
+ if (info == null) { // error
+ return null;
+ }
+ return info.appInfo;
}
private AppInfo fakeInfo(final File file, final String context) {