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

时间:2014-04-14 09:09:42

标签: java jboss7.x

我将我的网络应用程序迁移到JBOSS 7,我遇到了Class.forName方法的问题。

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

  • CampusComponentsJava-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")

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

 <?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要从一个jar中动态加载一个类。模块edu.uoc.oki2:

最后,由于webapp需要所有jar,我已声明明确访问META-INF / MANIFEST.xml中webapp的两个模块

 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

任何帮助都会被贬低!

非常感谢你。

1 个答案:

答案 0 :(得分:0)

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

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

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

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