![](/img/trans.png)
[英]Why does multiple ejb jars in an EAR share the same classloader whereas each WAR gets its own classloader?
[英]Using same classloader for ear and war
目前我们有超过 100 个 wars/ejbs 捆绑在一个耳朵里。 因为我们不想总是部署所有这些,所以我们希望将部署拆分为:
ejb耳
第一战
怎么可能从其中一场部署的战争中简单地查找 ejb1.jar - 如果可能的话。
我阅读了以下文档,但我不知道如何使它工作。
我可以在耳朵上查找 ejb,但我不能将它投射到接口。 这似乎是正确的,因为这是不同的 class 装载机。
要么使用导致编组和解组(性能)的远程接口,要么通过添加 deployment.MY_DEPLOYMENT_NAME 例如到jboss-deployment-structure.xml
来引入从 WAR 到 EAR 的模块依赖性。 然后您使用相同的类加载器,但您的 WAR 可能在您重新部署 EAR 时离线 go。
用于文档。
可以有不同的解决方案。
1) Package 进入 EAR 那些仅使用 EJB 的 WAR。 然后,您可以通过本地接口使用 EJB。 所有其他 WAR 仍然可以独立部署,它们不需要与 EAR 相同的 class 加载程序。
2) 使用远程 EJB。 Package 将它们使用的 EJB 的接口放入 WAR 中。 同样,不需要在同一个 class 加载程序中。 如果你担心远程 EJB 的性能,那么首先测试一下真正的性能。 Jboss 开发人员对性能进行了很多优化。 例如, 在这里阅读,他们优化了 EJB 调用
...避免进行不必要的服务器端通信,这些通信通常涉及网络调用、编组/解组等。
3) 分析 WAR 和 EJB 的依赖关系,以及 EJB 之间的依赖关系。 尝试识别 4-5 个 EJB 和 WAR 组或“集群”,它们彼此非常接近,并且只使用其他组中的少数 EJB,甚至不使用其他组中的 EJB。 然后将 package 这样的组分成单独的 EAR。 例如,您可以拥有:
然后在大多数情况下,您将只部署其中一个 EAR,因此您的部署时间将快 4-5 倍。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.