Jakarta ee 类加载器过滤
我以前问过一个相关的问题,但这并不完全相同。早些时候有人告诉我,如果问题有点不同,就不要在同一个线程中问其他问题。所以我发布了这个新问题。如果我不应该,请告诉我Jakarta ee 类加载器过滤,jakarta-ee,weblogic-10.x,java-ee-5,Jakarta Ee,Weblogic 10.x,Java Ee 5,我以前问过一个相关的问题,但这并不完全相同。早些时候有人告诉我,如果问题有点不同,就不要在同一个线程中问其他问题。所以我发布了这个新问题。如果我不应该,请告诉我 我有一个web应用程序(war文件)。与apache commons lang相关的Jar与其他Jar文件一起添加到WEB-INF库中。然而,系统库中还存在一个与ApacheCommonsLang相关的较旧版本的jar,当部署时,系统类路径中的jar文件优先,我得到了“classnotfound”错误。必须为web-inf中指定的类指定
我有一个web应用程序(war文件)。与apache commons lang相关的Jar与其他Jar文件一起添加到WEB-INF库中。然而,系统库中还存在一个与ApacheCommonsLang相关的较旧版本的jar,当部署时,系统类路径中的jar文件优先,我得到了“classnotfound”错误。必须为web-inf中指定的类指定Preference web inf类,使其优先于系统类加载器中的类。但是,我只希望此特定jar优先于系统类加载器。当我发布类似问题时,有人建议我在weblogic中使用“过滤类加载器”。当我有耳朵的时候,这个解决方案非常有效。但是,我不能在war文件中添加weblogic-application.xml,也不能使用这个类加载器过滤概念。有出路吗?谢谢。我不太熟悉WebLogic,但是如果您知道如何使用较新的jar,并且代码的输入非常简单,只需实例化一个类并执行一个启动方法,那么您就可以使用定制的类加载器了? 请参见第页的示例
但是我承认,有些WebLogic大师知道如何通过WebLogic本身的一些配置来实现这一点。我的一位同事指出,在WebLogic.xml中指定相关的包可以解决这个问题。不过,我还是要尝试一下
<wls:prefer-application-packages>
<wls:package-name>javax.faces.*</wls:package-name>
<wls:package-name>com.sun.faces.*</wls:package-name>
<wls:package-name>javax.xml.*</wls:package-name>
<wls:package-name>org.apache.xerces.*</wls:package-name>
<wls:package-name>antlr.*</wls:package-name>
<wls:package-name>org.apache.log4j.*</wls:package-name>
<wls:package-name>org.apache.commons.*</wls:package-name>
</wls:prefer-application-packages>
javax.faces*
com.sun.faces*
javax.xml*
org.apache.xerces*
antlr*
org.apache.log4j*
org.apache.commons*
我不是网络逻辑大师,但我看到了两种方法(没有尝试过,只是猜测)
1) 在web-inf中只保留“首选web-inf类”所需的JAR,并将其余JAR移动到不同的位置,并将其指向war的MANIFEST.MF
2) 将war绑定到一个空白ear中,并在ear的MANIFEST.MF中指定所有JAR,并在weblogic-application.xml中指定首选项类。其想法是使war和ear成为同一应用程序的一部分,以便web应用程序可以使用相同的类加载器(而不是使用“首选web inf类”)
编辑:
对于第一点,我已经验证了weblogic忽略了war文件的清单文件。所以第一个sol不起作用。如果ear中没有EJB,那么关于第二个sol,weblogic会盲目地忽略ear的清单。因此,您必须将WAR库移动到APP-INF\lib或ear的lib dir,并在weblogic-application.xml中指定首选包apache commons lang
无论如何,不要认为这是一个有效的解决方案(尤其是当你不想仅仅为了它而制造耳朵的时候)Vicky,我和你有同样的问题。我的解决方案是在域下创建一个/lib文件夹(其中一些在weblogic文档中),添加任何需要覆盖的第三方JAR,然后在startWeblogic.cmd文件的PRE_CLASSPATH变量中指定该库
在我的例子中,weblogic有一个旧版本的commons lang,这导致了冲突。 因为我没有EAR部署,所以weblogic-application.xml解决方案是不可能的。 在我将以下内容添加到pre_类路径之后-
设置PRE_类路径=%PRE_类路径%;%DOMAIN_HOME%/lib/commons-lang-2.5.jar
我的问题解决了 如果无法通过配置来实现,我是否有可能编写一些代码来实现这一点?谢谢感谢Daranha,这是我们使用的解决方案之一。但是我们不想在pre_classpath变量中定义它,因为它适用于weblogic应用程序服务器中显示的所有应用程序。