【问题标题】:Class-Loading in WeblogicWeblogic 中的类加载
【发布时间】:2014-03-11 14:21:31
【问题描述】:

我尝试在 Oracles Weblogic EE-Server 版本 12 中掌握类加载。我的问题是生成一个可在 JBoss 和 Weblogic 中部署的 webapp。此应用程序应使用 Logback 而不是 WLS/JBoss 提供的日志记录。

在 JBoss 中,以下方法可以正常工作:我定义一个包含 slf4j/logback 的模块,然后我从我的 EAR 部署中排除 JBoss 日志记录,最后声明从 EAR 部署到 slf4j/logback 模块的依赖关系。

在 WLS 中,我似乎在最后一步失败了。首先,我通过添加排除 WLS-slf4j 实现

<prefer-application-packages>
    <package-name>org.slf4j.*</package-name>
    <package-name>org.slf4j.impl.*</package-name>
</prefer-application-packages>

到 weblogic-application.xml。

但似乎这样做之后,没有办法提供 logback/slf4j 作为外部库。在管理控制台中重新定义 CLASSPATH 以及将库放在域的 lib 目录中似乎都不起作用,因为 &lt;prefer-application-packages&gt; 也会将它们擦掉。

有什么方法可以删除 WLS-Logging 实现,但仍提供 EAR 外部所需的库?

编辑

我想我已经为自己阐明了 JBoss 和 WLS 之间的区别。虽然在 JBoss 中可以有许多不同的类加载器层可以独立配置(对于每个模块、每个应用程序和服务器本身),但 WLS 似乎在服务器本身和服务器之间没有独立的可配置类加载器层网络应用程序。

虽然可以将库添加到服务器类加载器,但似乎不可能对服务器类加载器中的类进行一些微调。在服务器和应用层之间,只有允许或禁止某个包的选择,当您想要排除 wls 特定的 org.slf4j.impl 类但包含 logback 特定的 org.slf4j.impl 时,这还不够。

我欢迎有人证明我错了。

【问题讨论】:

  • 您是否尝试过查看prefer-web-inf-classesdocs.oracle.com/cd/E13222_01/wls/docs90/programming/…
  • 我看过这个,我的理解是:prefer-web-inf-classes 不会解决我的问题,因为我想使用的外部库不会是 webapp 本身的一部分,因此不会有任何东西在 webapp 中更喜欢。
  • 您的问题解决了吗?我现在踏上这片土地,我发现&lt;prefer-web-inf-classes&gt;&lt;prefer-application-packages&gt; 被完全忽略了。

标签: jakarta-ee weblogic classpath


【解决方案1】:

答案很简单,并且已经在我的问题中:引用我自己的话:“没有办法提供 logback/slf4j 作为外部库。”简单的答案是在 EAR 文件中提供所需的库。这有点令人讨厌,因为总是有一个挥之不去的问题,当应用服务器和应用程序中存在冲突的版本时,其他应用程序服务器会做什么?但在 Jboss 7.1 和 WLS 12c 中,这是可行的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2020-07-23
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多