【问题标题】:Loading class using System Classloader in Tomcat在 Tomcat 中使用 System Classloader 加载类
【发布时间】:2014-09-05 18:55:26
【问题描述】:

我需要为在 Tomcat 中运行的应用程序提供 RMIClassLoaderSpi 的自定义实现。但是,这个类似乎需要使用 System Classloader 来加载。

有没有人知道向 Tomcat 提供一个类以便可以使用系统类加载器加载它的好方法?

我知道我可以设置 shared.loader 和 server.loader 属性,但据我所知,这些不会影响系统类加载器。

如果有人感兴趣,这是在 RMIClassLoader 中强制使用系统类加载器的代码:

Class providerClass =
            Class.forName(providerClassName, false,
                  ClassLoader.getSystemClassLoader());

其中providerClass 是我的RMIClassLoaderSpi 自定义实现的名称。

【问题讨论】:

    标签: java tomcat classloader


    【解决方案1】:

    再看一下,似乎我可以修改 setenv.sh 来设置 CLASSPATH 变量,然后将其传播到系统类路径。

    来自 catalina.sh:

    # Ensure that any user defined CLASSPATH variables are not used on startup,
    # but allow them to be specified in setenv.sh, in rare case when it is needed.
    CLASSPATH=
    
    if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
      . "$CATALINA_BASE/bin/setenv.sh"
    elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
      . "$CATALINA_HOME/bin/setenv.sh"
    fi
    

    所以看起来这是“预期”的方式。

    【讨论】:

      猜你喜欢
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多