我试图掌握Oracles Weblogic EE-Server版本12中的类加载。我的问题是生成一个webapp,可以在JBoss和Weblogic中部署。此应用程序应使用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放在域的lib目录中似乎不起作用,因为<prefer-application-packages>
也将它们擦除。
有没有办法删除WLS-Logging实现,但仍然在EAR外部提供所需的库?
修改
我想我已经为自己明确了JBoss和WLS之间的区别。在JBoss中,可以有许多不同的类加载器层,可以独立配置(对于每个模块,每个应用程序和服务器本身),WLS似乎在服务器本身和服务器之间没有独立的可配置类加载器层。 web应用程序。
虽然可以向服务器类加载器添加库,但似乎不可能对服务器类加载器中的类进行一些精细的粗调。在服务器和应用程序层之间,只有选择允许或禁止某个程序包,这是不够的,当您要排除特定于wls的org.slf4j.impl
类但包含特定于日志的org.slf4j.impl
时
我欢迎有人向我证明错误。
答案 0 :(得分:1)
答案很简单,已经在我的问题中:引用自己:&#34;没有办法提供logback / slf4j作为外部库。&#34;简单的答案是在EAR文件中提供所需的库。这在某种程度上是令人讨厌的,因为当appserver和应用程序中存在冲突的版本时,总会有一个挥之不去的问题,其他应用程序服务器会做什么?但是使用Jboss 7.1和WLS 12c就可以了。