我打包了一个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]
你会如何解决这个问题?谢谢!
答案 0 :(得分:1)
您已在my-war.war
和公共广告my-common.jar
之间创建了循环依赖关系。
从MyWarMember
开始调用
MyCommonMember.deepCopy(this);
- 这会有效,因为你已经在你的lib中添加了jar
从MyCommomMember
开始
public static Object deepCopy(Serializable obj){
- 未找到类的例外,因为它不知道MyWarMember
中的my-war.war
。
<强>解决方案:强> 删除循环依赖。
希望它有所帮助。
答案 1 :(得分:0)
这可能是多个孤立的类加载器的问题。从例外情况来看,它抱怨有问题的地方deployment.myear.ear:main
没有看到MyWarMember
。这可能是,因为war模块不在EAR的lib文件夹中。
注意:存在间接循环依赖关系,my-war.war
使用my-common.jar
处理来自my-war.war
的无类型类,但为了序列化,它需要知道实际类型。