二、项目组织、依赖性和类解析
JEE规范为企业应用程序定义了一个分层的Java类解决策略,这个自下而上的搜索策略如下图所示。当任何模块引用Java类时,其本地类加载器首先搜索该模块的代码库。如果该类不是本地模块,那么该模块会在上一级的类加载器上进行搜索请求。 此过程一直持续到找到类或达到顶级Java引导类加载器(未在图中显示)。
Classloader层次结构
了解JEE企业应用程序类加载器策略非常重要:加载策略会影响如何在Web和EJB模块项目之间分配类。例如,如果您有一个或多个在Web模块中的用户界面元素和EJB模块的服务之间传递业务的数据对象,通过在EJB模块中定位数据对象,它们对Web模块和EJB模块都是可见的。
导致类加载问题的两个常见项目组织错误是:
将数据对象类放在Web模块中,从而导致运行时ClassNotFoundExceptions。将共享类复制到Web和EJB模块项目,该方法通常导致很难诊断序列化和类不兼容性相关的错误。
MyEclipse JEE项目模仿了这种层次化类加载器策略,为您提供准确的集结时间了解MyEclipse企业项目及其组成Web和EJB模块项目的类加载器。这是使用Eclipse项目依赖关系完成的,如下图所示。 当将Web或EJB项目添加到MyEclipse EAR项目时,相应地设置项目依赖关系。不要手动修改这些项目依赖关系,这样做可能会引起不必要的编译问题。
注意:MyEclipse开发团队认为,支持类加载器仿真是一个至关重要的要求,用来帮助开发人员识别难以解决由类加载程序可见性问题引起的运行时错误。这是MyEclipse不支持在EAR项目中嵌入模块代码的原因之一。 相反,EAR项目将维护与单个Web和EJB项目的关联作为模块。
JEE EAR类加载器操作项目的依赖关系