Use the proper servlet classloader here.
Otherwise if samskivert.jar is loaded via the root classloader, this will fail to find classes and resources in the servlet/webapp classloader. Let's not require that samskivert.jar be duplicated into the webapp in cases where we're doing complex things like hosting webapps inside larger app servers. That can cause other fiddly problems with mismatched duplicate copies of classes.
This commit is contained in:
@@ -185,7 +185,8 @@ public class DispatcherServlet extends HttpServlet
|
|||||||
if (StringUtil.isBlank(appcl)) {
|
if (StringUtil.isBlank(appcl)) {
|
||||||
return new Application();
|
return new Application();
|
||||||
} else {
|
} else {
|
||||||
Class<?> appclass = Class.forName(appcl);
|
ClassLoader servletClassLoader = Thread.currentThread().getContextClassLoader();
|
||||||
|
Class<?> appclass = servletClassLoader.loadClass(appcl);
|
||||||
return (Application)appclass.getDeclaredConstructor().newInstance();
|
return (Application)appclass.getDeclaredConstructor().newInstance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -202,7 +203,8 @@ public class DispatcherServlet extends HttpServlet
|
|||||||
"in the servlet configuration.");
|
"in the servlet configuration.");
|
||||||
}
|
}
|
||||||
// config util loads properties files from the classpath
|
// config util loads properties files from the classpath
|
||||||
Properties props = ConfigUtil.loadProperties(propsPath);
|
ClassLoader servletClassLoader = Thread.currentThread().getContextClassLoader();
|
||||||
|
Properties props = ConfigUtil.loadProperties(propsPath, servletClassLoader);
|
||||||
if (props == null) {
|
if (props == null) {
|
||||||
throw new IOException("Unable to load velocity properties " +
|
throw new IOException("Unable to load velocity properties " +
|
||||||
"from file '" + INIT_PROPS_KEY + "'.");
|
"from file '" + INIT_PROPS_KEY + "'.");
|
||||||
@@ -596,7 +598,8 @@ public class DispatcherServlet extends HttpServlet
|
|||||||
*/
|
*/
|
||||||
protected Logic instantiateLogic (String path, String lclass) {
|
protected Logic instantiateLogic (String path, String lclass) {
|
||||||
try {
|
try {
|
||||||
Class<?> pcl = Class.forName(lclass);
|
ClassLoader servletClassLoader = Thread.currentThread().getContextClassLoader();
|
||||||
|
Class<?> pcl = servletClassLoader.loadClass(lclass);
|
||||||
return (Logic)pcl.getDeclaredConstructor().newInstance();
|
return (Logic)pcl.getDeclaredConstructor().newInstance();
|
||||||
} catch (ClassNotFoundException cnfe) {
|
} catch (ClassNotFoundException cnfe) {
|
||||||
// nothing interesting to report
|
// nothing interesting to report
|
||||||
|
|||||||
Reference in New Issue
Block a user