【发布时间】:2013-06-28 13:02:21
【问题描述】:
我打包了一个 EAR (myear.ear) 文件并将其部署在 JBoss EAP 6(即 JBoss 7 :))中。 它看起来像这样:
lib/
my-common.jar (Custom library containing common classes used by both the WAR and BIZ)
--- (other libraries used by both WAR and BIZ) ---
META-INF/
jboss-deployment-structure.xml (specifies just <ear-subdeployments-isolated>false</ear-subdeployments-isolated> )
my-biz.jar (EJB Module)
META-INF/
beans.xml
MANIFEST.MF
-- java classes --
my-war.war (WAR Module)
WEB-INF/
beans.xml
lib/ (empty! I made a skinny war)
META-INF/
MANIFEST.MF
resources/
-- java classes --
在my-war.war 中有一个类调用来自my-common.jar 的类的方法。这是发生了什么:
public class MyWarMember implements Serializable{//my-war.war
public void foo(){
MyCommonMember.deepCopy(this);
}
}
---------------------------------------------------------------------
public class MyCommonMember{//my-common.jar
public static Object deepCopy(Serializable obj){
ObjectOutputStream oos .....
...
oos.writeObject(obj);
....
ObjectInputStream ois ....;
....
ois.readObject();
}
}
对ois.readObject(); 的调用将为 MyWarMember 抛出 ClassNotFoundException:
java.lang.ClassNotFoundException: my.war.MyWarMember from [Module "deployment.myear.ear:main" from Service Module Loader]
你会如何解决这个问题?谢谢!
【问题讨论】:
-
您列出的代码中存在一些混淆,
MyWarMember方法foo调用MyCommonClass.deepCopy,但下面的行显示deepCopy是MyCommonMember的方法班级。此外,您说在MyCommonMember.deepCopy中发生的对ois.readObject的调用会为MyWarMember抛出ClassNotFoundException,这似乎在同一个包中。你能更好地解释问题出在哪里吗? -
@remigio 你说得对,我太快了。我更新了问题,希望现在清楚了。。
-
您的
my-common.jar需要使用任何库吗? -
我不明白对
ObjectInputStream.readObject的调用如何引发MyWarMember类的异常,也许您将结果分配给该类的对象? -
@Quincy 是的,my-common.jar 对外部库有几个依赖项
标签: java jboss classloader classnotfoundexception