如何在JBOSS 7中动态加载class.forName的类



我正在将web应用程序迁移到JBOSS 7,但Class.forName方法有问题。

我基本上有两个罐子,每个罐子在一个不同的模块中:

  • Campus组件Java-1.4.4.jar
  • CampusGateway-2.5.3-SNAPSHOT.jar

CampusComponentsJava中的代码动态加载CampusGateway-2.5.3-SNAPSHOT.jar中的一个类以以下方式:

Class.forName("edu.uoc.campusgateway.osid.authentication.AuthenticationManager")

我在模块文件夹中创建了两个模块:

 <?xml version="1.0" encoding="UTF-8"?>
 <module xmlns="urn:jboss:module:1.1" name="edu.uoc.oki2">
     <resources>
    <resource-root path="CampusGateway-2.5.3-SNAPSHOT.jar" />
    <resource-root path="CampusLauncherJava-1.1.3-SNAPSHOT-filter.jar"/>
    <resource-root path="OkiBusJava-1.2.2-config-uoc.jar"/>
    <resource-root path="OkiBusXmlSchemas-1.1.1-SNAPSHOT.jar"/>
    <resource-root path="OkiOSID-2.0.jar"/>
    <resource-root path="JavaUtils-1.1.2-SNAPSHOT.jar"/>
    <resource-root path="LibTecsidel.jar"/>
    </resources>
    <dependencies>
    </dependencies>
   </module>

 <?xml version="1.0" encoding="UTF-8"?>
 <module xmlns="urn:jboss:module:1.1" name="edu.uoc.okicomps">
   <resources>
     <resource-root path="CampusComponentsJava-1.4.4.jar"/>
    <resource-root path="CampusComponentsJava-1.4.4-config-uoc.jar"/>
    </resources>
    <dependencies>
       <module name="edu.uoc.oki2" export="true"/>
    </dependencies>
 </module>

我在后面的标签中表达了模块edu.uoc.okicomps依赖于模块edu.uoc.oki2的想法,因为edu.uoc.okicomps模块的一个jar想要从模块edu.uoc.oki2:的一个jar动态加载一个类

最后,由于Web应用程序需要我在META-INF/MANIFEST.xml 中明确声明的对Web应用程序的两个模块的访问权限的所有jar

 Manifest-Version: 1.0
 Class-Path: 
 Dependencies: edu.uoc.okicomps,edu.uoc.oki2

然而,它并没有工作失败,例外情况是:

java.lang.NoClassDefFoundError: Could not initialize class edu.uoc.campusgateway.osid.authentication.AuthenticationManager

任何帮助都将被感激!

事先非常感谢。

我发现了问题。问题是Class.forName由于其自身的性质,执行静态代码和构造函数。

在这种情况下,静态代码试图通过类加载器加载一个属性文件,该文件包含在我忘记添加的另一个jar中。因此,解决我的问题的方法是:

1) 将以下行添加到module.xml

2) 将文件CampusComponentsJava-1.4.4-config-uoc.jar物理添加到modules\edu\uoc\oki2\main文件夹

相关内容

最新更新