首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Tomcat容器在Geronimo下进行自定义注释扫描

使用Tomcat容器在Geronimo下进行自定义注释扫描
EN

Stack Overflow用户
提问于 2011-12-11 03:06:24
回答 1查看 196关注 0票数 1

如何访问Geronimo的“共享/库”目录中的jars?

我使用下面的代码来遍历类加载器层次结构,但无法获得在“shared/lib”文件夹中找到的jars库。知道我该怎么做吗?下面的代码是在Servlet上下文侦听器中执行的,当服务器启动时,任何帮助都是非常感谢的?

代码语言:javascript
复制
    ClassLoader c =  Thread.currentThread().getContextClassLoader();
    while(c!=null) {
        System.out.println("CLASS Loader TYPE : " + c.getClass().getName());

        if(URLClassLoader.class.isInstance(c)){

            URLClassLoader urlclazz = (URLClassLoader) c;
            for(URL u : urlclazz.getURLs()) {
                System.out.println("SCANNING : " + u);

            }
        }else{
            System.out.println("CLASS Loader : " + c.getClass().getName());

        }
        c = c.getParent();
    }

这是样本输出:

代码语言:javascript
复制
INFO   | jvm 1    | 2001/12/10 19:03:30 | CLASS Loader TYPE : org.apache.geronimo.kernel.classloader.JarFileClassLoader
INFO   | jvm 1    | 2011/12/10 19:03:30 | SCANNING : file:/C:/v3app/CORE/webapps/cmsample/WEB-INF/classes/
INFO   | jvm 1    | 2011/12/10 19:07:32 | CLASS Loader TYPE : sun.misc.Launcher$AppClassLoader
INFO   | jvm 1    | 2011/12/10 19:07:32 | SCANNING : file:/C:/v3app/CORE/lib/wrapper.jar
INFO   | jvm 1    | 2011/12/10 19:07:32 | SCANNING : file:/C:/v3app/CORE/bin/server.jar
INFO   | jvm 1    | 2011/12/10 19:07:32 | SCANNING : file:/C:/v3app/CORE/bin/shutdown.jar
INFO   | jvm 1    | 2011/12/10 19:07:39 | CLASS Loader TYPE : sun.misc.Launcher$ExtClassLoader                    ==   Boot strap Class Loader() 
INFO   | jvm 1    | 2011/12/10 19:07:41 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/activation.jar
INFO   | jvm 1    | 2011/12/10 19:07:42 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/CmpCrmf.jar
INFO   | jvm 1    | 2011/12/10 19:07:43 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/dnsns.jar
INFO   | jvm 1    | 2011/12/10 19:07:43 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/dtfj-interface.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/dtfj.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/dtfjview.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/gskikm.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/healthcenter.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/ibmcmsprovider.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/ibmjcefips.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/ibmjceprovider.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/ibmkeycert.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/IBMKeyManagementServer.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/ibmpkcs11impl.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/ibmsaslprovider.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/ibmxmlencprovider.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/jaccess.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/JawBridge.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/jdmpview.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/localedata.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/mail.jar
INFO   | jvm 1    | 2011/12/10 19:07:44 | SCANNING : file:/C:/v3java/CORE/jre/lib/ext/xmlencfw.jar
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-13 20:34:32

以下代码正在工作:

代码语言:javascript
复制
ClassLoader c =  Thread.currentThread().getContextClassLoader();
Class<? extends ClassLoader > geronimoClazz =  null;
Method parentesMethod = null;

try{
            geronimoClazz = (Class<? extends ClassLoader>) Class.forName("org.apache.geronimo.kernel.config.MultiParentClassLoader");
            parentesMethod = geronimoClazz.getMethod("getParents", null);
        }catch(ClassNotFoundException e){
            // OK KEEP ME not Geronimo Container....it is ok..
        }catch(NoSuchMethodException ne){
            // OK KEEP ME HERE...
        }           
        java.util.Queue<ClassLoader> queue = new LinkedList<ClassLoader>();
        queue.add(c);

        while (!queue.isEmpty()) {
            c = queue.poll();
            if (URLClassLoader.class.isInstance(c)) {
                    URLClassLoader urlclazz = (URLClassLoader) c;
                for (URL u : urlclazz.getURLs()) {
                    System.out.println("SCANNING : " + u);

                }

                if (geronimoClazz != null && 
                        geronimoClazz.isInstance(c) ){

                    try {
                        ClassLoader[]  loaders =  (ClassLoader[])parentesMethod.invoke(c,null);
                        if(loaders != null){
                            for(ClassLoader ld :loaders){
                                // add each one of the class loader to queue..
                                queue.offer(ld);
                            }
                        }

                    } catch (Exception e) {

                    }
                }

            } else {
                System.out.println("CLASS Loader Type : " + c.getClass().getName());
            }
            if(c.getParent() != null){
                queue.offer(c.getParent());
            }
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8461677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档