Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 类加载器过滤_Jakarta Ee_Weblogic 10.x_Java Ee 5 - Fatal编程技术网

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应用程序服务器中显示的所有应用程序。