0

我正在尝试以一种允许我将 Quartz 作业动态添加到类路径的方式部署一个动态 Web 项目。这是我的想法。

'如果我从包含完全限定类路径的 XML 文件中读取配置,然后在类中使用 Class.forName() 从配置 XML 创建所述类的实例,那么我应该能够访问放置在 Tomcat 中的动态添加的类TOMCAT_HOME/lib 目录”。

在此更新之前,该应用程序运行良好,但我在战争中包含了这些新的外部化类。但是,我不能再这样做了,因为我:

  1. 不想每次需要新工作时都重新部署战争。
  2. 无法关闭服务器以添加新作业,因为有些作业需要连续运行。

但是,当我运行 class.forName() 方法时,我得到了 NoClassDefFoundError。我已经在 catalina.properties 中验证了 Tomcat 中的 lib 目录位于 common.loader 属性中。

我的问题是,如何让我的 WAR 类识别 Tomcat 公共库中 jar 中的类。有任何想法吗?谢谢。

添加:

@BalusC:我实际上已经开发了一个基于 Web 的管理屏幕,它允许用户编辑 XML 配置文件以添加新作业。但是,要添加的不仅仅是另一个作业实例,而是一个全新的作业,需要对这个新作业进行代码定义。我希望将它放入一个 jar 文件中,然后放入 tomcat lib 目录中,以便由 class.forName() 获取。

4

1 回答 1

0

希望 Tomcat 不会自动重新加载您的上下文或在您的类加载器中自动加载 jar。它可能导致无法控制的行为。

如果不WebAppClassLoader通过URLClassLoader. 我会建议使用 jar 的绝对路径。由于一些黑暗的原因,我遇到了相对路径的问题。

如果您想知道 tomcat 的安装路径,例如 lib 目录,您可以使用catalina.homecatalina.base环境变量。

HIH

于 2012-12-10T20:15:28.487 回答