2017-02-17 87 views
4

我想了解父亲 - 最后在应用程序JBoss应用程序服务器中加载。我们在JBoss 4.2.1 GA中部署了一个遗留应用程序。我们正在尝试使用父代最后一次加载。我是指link。 我想学习一个家长最后一次加载。所以用maven-jar-plugin和配置 - > addDefaultImplementationEntries = true创建了简单的Maven jar包应用程序。我从同一个jar创建maven应用程序创建了2个jar版本1.0.0和1.0.1。该jar包含单个类TestClass和一个简单的String返回方法,该方法返回从类加载的jar版本。 我想要体验使用java2ClassLoadingCompliance。我已经在服务器/ deploy/MyApplication/WEB-INF/lib中打包了版本1.0.0 jar(我的web应用程序是一个简单的servlet应用程序,它调用该类的方法,从而打印从其调用的jar版本号)和server/lib中的版本1.0.1 jar。JBoss类加载父 - 最后加载

:按道理它没有意义在应用程序中使用的jar的旧版本,并与目前在服务器lib中的较新版本覆盖它,只是想体验类加载。

我曾尝试以下

  1. 没有在META-INF文件夹中任何的jboss-web.xml中。
  2. 我试着在META-INF中引入jboss-we.xml,并用java2ClassLoadingCompliance = false做相同的操作。
  3. With java2ClassLoadingCompliance = true。

应用程序库中的所有时间类都将被应用程序加载。

我的jboss-web.xml文件看起来像reference

<jboss-web> 
    <class-loading java2ClassLoadingCompliance="true"> 
     <loader-repository> 
     com.example:archive=JBossClassLoadingTestServlet-0.0.1-SNAPSHOT.ear 
     <loader-repository-config>java2ParentDelegation=true</loader-repository-config> 
     </loader-repository> 
    </class-loading> 
</jboss-web> 

有人可以帮助我理解到JBoss父最后的配置?我在这里做的错误是什么,总是从应用程序库中获得类加载?

+0

哦,上帝的JBoss 4.2,有什么不对吗? :-o – Aaron

回答

0

恐怕您的链接与您的实验没有太大关系。它与EAR部署更相关,其中存在多模块部署,需要多个版本的lib进行隔离。

就你而言,你只需在一个Jar中覆盖lib。

以下是从Servlet Spec:

它也是应用程序类加载器被实施为使得 使得WAR内包装的类和资源被加载优先于 类和资源驻留在容器范围推荐库JAR。

因此,JBoss遵循规范,它总是首先加载应用程序库。

我没有找到这样的老版本的文件,但它应该类似AS7

在最高优先顺序到最低优先级

  1. 系统相关性 - 这些是添加依赖由容器自动将模块发送到模块,包括Java EE API。
  2. 用户依赖关系 - 这些依赖关系是通过JBoss-deployment-structure.xml或Dependencies:清单条目添加的。
  3. 本地资源 - 部署内部打包的类文件,例如来自WEB-INF/classes或WEB-INF/lib的类文件。
  4. 部署间依赖关系 - 这些依赖于耳部署中的其他部署。这可以包括ear的lib目录中的类,或者其他EJB jar中定义的类。

相关: