Thanks a lot Violeta.... Adding the following code , It did the trick for embedded tomcat program... List<File> filterdJarfiles = getAppJarFilesAlone(folderName);
WebResourceRoot resources = new StandardRoot(contextNew); for(File jf:filterdJarfiles){ String st = jf.getAbsolutePath().substring(0,jf.getAbsolutePath().lastIndexOf(File.separator)); resources.addPreResources(new DirResourceSet(resources, "/WEB-INF/lib", st, "/")); } contextNew.setResources(resources); CustomLoader loader= new CustomLoader(contextNew.getParentClassLoader(),contextNew); contextNew.setLoader(loader); But required to set the loader though.. Thanks a lot... Hassan On Fri, Jun 2, 2017 at 6:40 AM, Violeta Georgieva <violet...@apache.org> wrote: > Hi, > > 2017-06-01 18:26 GMT+03:00 Hassan Khan <hassankhan...@gmail.com>: > > > > Any pointers to the problem .. pls... Have extended webapploader and use > > Instead of extending the class loader you might consider the new Web > Application Resources feature: > http://tomcat.apache.org/tomcat-8.5-doc/config/resources.html > > Regards, > Violeta > > > the below function for adding jar in tomcat 6... for tomcat 8.5 the jar > are > > loading but not getting included in the classpath somehow... > > /** > > * reflectively add a jar to the classloader. This only works when > > called after super.start() has completed. > > */ > > private void addJar(final File jarRealFile) { > > try { > > final String jarPath = getFilePathRelativeToBase( > jarRealFile); > > final JarFile jarFile = new JarFile(jarRealFile); > > final ClassLoader cl = getClassLoader(); > > if (cl instanceof WebappClassLoader) { > > final WebappClassLoader wcl = (WebappClassLoader) cl; > > final Class<?> clazz = WebappClassLoader.class; > > final Method addJar = clazz.getDeclaredMethod("addJar", > new > > Class[]{String.class, JarFile.class, File.class}); > > addJar.setAccessible(true); > > addJar.invoke(wcl, jarPath, jarFile, jarRealFile); > > } > > log("added jar " + jarRealFile.getCanonicalPath()); > > } > > catch (IOException e) { > > log("Exception accessing jar file: " + jarRealFile + ": " + > > e.getMessage()); > > } > > catch (SecurityException e) { > > log("Exception finding method in WebappClassLoader to add jar > > file: " + jarRealFile + ": " + e.getMessage()); > > } > > catch (NoSuchMethodException e) { > > log("Exception finding method in WebappClassLoader to add jar > > file: " + jarRealFile + ": " + e.getMessage()); > > } > > catch (IllegalArgumentException e) { > > log("Exception calling method in WebappClassLoader to add jar > > file: " + jarRealFile + ": " + e.getMessage()); > > } > > catch (IllegalAccessException e) { > > log("Exception calling method in WebappClassLoader to add jar > > file: " + jarRealFile + ": " + e.getMessage()); > > } > > catch (InvocationTargetException e) { > > log("Exception calling method in WebappClassLoader to add jar > > file: " + jarRealFile + ": " + e.getMessage()); > > } > > } > > > > Thanks > > > > > > > > > > On Wed, May 31, 2017 at 5:13 PM, Hassan Khan <hassankhan...@gmail.com> > > wrote: > > > > > So the precise exception is Only a type can be imported. ABC resolves > to a > > > package.. > > > > > > Stacktrace is : > > > at org.apache.jasper.compiler.DefaultErrorHandler.javacError( > > > DefaultErrorHandler.java:102) > > > at org.apache.jasper.compiler.ErrorDispatcher.javacError( > > > ErrorDispatcher.java:212) > > > at org.apache.jasper.compiler.JDTCompiler.generateClass( > > > JDTCompiler.java:457) > > > at org.apache.jasper.compiler.Compiler.compile(Compiler.java:377) > > > at org.apache.jasper.compiler.Compiler.compile(Compiler.java:349) > > > at org.apache.jasper.compiler.Compiler.compile(Compiler.java:333) > > > at org.apache.jasper.JspCompilationContext.compile( > > > JspCompilationContext.java:600) > > > at org.apache.jasper.servlet.JspServletWrapper.service( > > > JspServletWrapper.java:368) > > > at org.apache.jasper.servlet.JspServlet.serviceJspFile( > > > JspServlet.java:385) > > > at org.apache.jasper.servlet.JspServlet.service(JspServlet. > java:329) > > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) > > > at org.apache.catalina.core.ApplicationFilterChain. > internalDoFilter( > > > ApplicationFilterChain.java:231) > > > at org.apache.catalina.core.ApplicationFilterChain.doFilter( > > > ApplicationFilterChain.java:166) > > > at org.apache.catalina.core.ApplicationDispatcher.invoke( > > > ApplicationDispatcher.java:728) > > > at org.apache.catalina.core.ApplicationDispatcher.doInclude( > > > ApplicationDispatcher.java:590) > > > at org.apache.catalina.core.ApplicationDispatcher.include( > > > ApplicationDispatcher.java:524) > > > at org.apache.jasper.runtime.JspRuntimeLibrary.include( > > > JspRuntimeLibrary.java:895) > > > at org.apache.jsp.iNexx.common._005fshinglesTop_jsp._ > > > jspService(_005fshinglesTop_jsp.java:385) ==> JSP page called from the > > > main webapp referencing the modular apps > > > > > > > > > > > > On Wed, May 31, 2017 at 5:05 PM, Hassan Khan <hassankhan...@gmail.com> > > > wrote: > > > > > >> Hi, > > >> > > >> We have a main webapp (Tomcat\Webapp) that has many modular webapps ( > > >> (Tomcat\Webapp\app\) under it that can be removed and added by the > user. > > >> The main webapp has the service and connectors , but the modular > webapps > > >> do not need it. > > >> > > >> The problem is currently when the main webapp tries to access a jar in > > >> the modular webapps lib dir... we have a class not found exception.. > that > > >> is why we need to load the jars from the modular webapps Web-INF\lib > > >> directory. > > >> > > >> Thanks > > >> > > >> > > >> > > >> On Wed, May 31, 2017 at 5:00 PM, Aurélien Terrestris < > > >> aterrest...@gmail.com> wrote: > > >> > > >>> hi > > >>> > > >>> what are you trying to do exactly ? > > >>> > > >>> If you just need to start one webapp after another one in a precise > > >>> order, > > >>> you need as many Services (+Connector on a different port, + Host) as > > >>> webapps. > > >>> > > >>> A.T. > > >>> > > >>> > > >>> > > >>> > > >>> > > >>> 2017-05-31 22:48 GMT+02:00 Hassan Khan <hassankhan...@gmail.com>: > > >>> > > >>> > Hi, > > >>> > > > >>> > We have the following structure for webapps in tomcat 6. > > >>> > > > >>> > Tomcat > Webapp > Application 1 >WEB-INF >lib > > >>> > Tomcat > Webapp > Application 1 > Application >WEB-INF> lib > > >>> > > > >>> > > > >>> > The Tomcat > Webapp > Application 1 >WEB-INF >lib gets loaded with > > >>> > addwebapp() function.. > > >>> > but for Tomcat > Webapp > Application 1 > Application >WEB-INF> lib > , > > >>> we > > >>> > wrote a custom webapploader that extended WebappLoader. > > >>> > > > >>> > Now we are upgrading to tomcat 8.5.... > > >>> > > > >>> > Wanted to know if any other way to accomplish the same task. > > >>> > > > >>> > Was working on using the same extended loader .. but the start() > > >>> function > > >>> > has changed to InternalStart() and getting a exception as below: > > >>> > Caused by: org.apache.catalina.LifecycleException: An invalid > > >>> Lifecycle > > >>> > transition was attempted ([after_start]) for component > > >>> > [WebappLoader[/SandBox/Primar]] in state [STARTING_PREP] > > >>> > > > >>> > Any pointer are appreciated.. not that familiar with extending > apache > > >>> > classes. > > >>> > > > >>> > Thanks > > >>> > Hassan > > >>> > > > >>> > > > >>> > > > >>> > > > >>> > On Wed, May 31, 2017 at 4:42 PM, Hassan Khan < > hassankhan...@gmail.com> > > >>> > wrote: > > >>> > > > >>> > > Hi, > > >>> > > > > >>> > > We have the following structure for webapp in tomcat 6. > > >>> > > > > >>> > > Tomcat > Webapp > Application 1 > Application >WEB-INF> lib > > >>> > > > > >>> > > T > > >>> > > he Alpp > > >>> > > > > >>> > > -- > > >>> > > Hassan Khan > > >>> > > > > >>> > > > >>> > > > >>> > > > >>> > -- > > >>> > Hassan Khan > > >>> > > > >>> > > >> > > >> > > >> > > >> -- > > >> Hassan Khan > > >> > > > > > > > > > > > > -- > > > Hassan Khan > > > > > > > > > > > -- > > Hassan Khan > -- Hassan Khan