我对ATG和EJB并不熟悉,只对后者有一个粗略的概念。刚刚开始阅读ATG,它的一个组件(即Nucleus)似乎使用了EJB。似乎ATG中的其他所有内容都基于Nucleus。 我可能很快就要和ATG合作了,所以:
1)ATG Nucleus和EJB之间有什么关系? 2)EJB是否使用通常的EJB? 3)Nucleus是否需要EJB?我可以用别的东西吗? 4)Nucleus是否使用EJB的全部功能或将其替换到某处? 5)Nucleus提供的功能是否可以完全被EJB取代? 6)我是否需要研究EJB才能使用Nucleus?它会提高我对Nucleus的理解吗?
很抱歉,如果这些问题很愚蠢,我只是想加快学习速度。
还在wikepedia上发现了一篇关于某些DataNucleus(以前称为Java Persistent Objects JPOX)的文章。它是同一个Nucleus吗?
答案 0 :(得分:4)
Nucleus不是EJB,也不使用EJB。
Nucleus是一个bean容器,有点类似于Spring Bean Factory或Application Context。
更具体地说,它是一个注册表和一个容器,用于管理组件的生命周期和绑定。
从这个意义上讲,您可能会认为它类似于EJB容器,但它的复杂程度要低得多。
它管理的组件是简单的JavaBeans(POJO),虽然约定规定它们通常是ATG提供的类的子类(例如GenericService)。
当您打包ATG应用程序时,它会被组装到EAR中。
在Java EE应用程序服务器中部署和实例化此EAR时,启动的是Nucleus。反过来,Nucleus会实例化它负责的组件。
您可以将应用程序与EJB一起打包,并且可以将其他EAR部署到同一应用程序服务器中,但这些不是ATG应用程序。这些不使用Nucleus,反之亦然。
所以,回答你的问题
1)ATG Nucleus和EJB之间有什么关系?
无。
2)EJB核心是否使用普通的EJB?
没有。 Nucleus不使用EJB。它使用POJOs
3)Nucleus是否需要EJB?
没有
我可以改用其他东西吗?
是。我建议您使用ATG提供的基类,然后根据需要扩展您需要的组件或创建新组件
4)Nucleus是否使用EJB的全部功能或将其替换为某个地方?
几乎在所有方面都取而代之。
Nucleus是一个注册表以及一个组件容器。 Nucleus管理的每个组件在Nucleus命名空间中都有一个唯一的名称。 Nucleus通过JNDI和Java名称解析API方法公开这些组件。
您还可以将Nucleus组件公开为Web服务(SOAP)和REST服务(基于HTTP的JSON)。 ATG作为一个平台(技术上不是Nucleus,但是在Nucleus中运行的ATG提供的组件)也提供了一个消息驱动的事件框架,用于通过JMS开发消息驱动的逻辑。
此外,ATG平台(同样不是Nucleus,而是在Nucleus内运行的ATG提供的组件)提供了一个存储库框架,它是一个ORM层,但不仅适用于关系数据库数据源,还包括LDAP,XML和其他文件数据来源。
5)Nucleus提供的功能是否可以完全被EJB取代?
在技术层面,是的。
然而,EJB(特别是在EJB3之前)非常笨重并且看起来过于复杂。依赖注入,托管实体(ORM)等ATG,以及其他一些框架(Spring Hibernate等)的工作量都要少得多。
此外,ATG作为一个平台(再次,技术上不仅仅是Nucleus),为个性化和商务提供了许多复杂的业务功能。
6)我是否需要研究EJB才能使用Nucleus?
没有。完全没有
它会提高我对Nucleus的理解吗?
是。但只是以非常有限的方式。任何学习或理解都是从已知到未知的旅程。已知的基数越大,越容易移向未知,因为你有更多的起点。
如果您已经非常了解Java EE,那么您将能够了解ATG平台正在做什么,因此将更容易理解。但是,如果你根本不了解EJB,那么为了更好地理解ATG而学习它实际上会产生不利影响。
另一方面,我认为您必须了解并理解Java EE Web应用程序(JSP,Servlet,过滤器等)才能最好地与ATG合作。
还在wikepedia上发现了一篇关于某些DataNucleus(以前称为Java Persistent Objects JPOX)的文章。它是同一个Nucleus吗?
没有。这是完全不相关的
答案 1 :(得分:1)
除非排除DafEar模块,否则ATG会在其汇编程序生成的每个ear中打包无状态会话EJB。 ATG中的跨应用程序会话功能需要DafEar EJB,包括dyn / admin Web控制台和ACC。
每个ATG EAR包含多个war文件和一个EJB jar文件。您可以在ATG汇编程序生成的任何耳朵中看到EJB jar并引用它:
atg_foo.ear / META-INF / application.xml中:
<module>
<ejb>atg_bootstrap_ejb.jar</ejb>
</module>
EJB是在app组装时从用于构建耳朵的ATG安装的DafEar模块获取的,例如:$ {ATG_HOME} / DafEar / base / j2ee-components /
可以在没有EJB但没有dyn / admin和ACC的情况下构建ATG耳朵。在某些情况下,例如BCC / merch,排除DafEar和访问dyn / admin中的关键管理组件(例如DeploymentServer)是不切实际的,因此DafEar最常部署在ATG / Oracle Commerce应用程序中。