Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaEE/Glassfish应用程序逻辑_Java_Jakarta Ee_Glassfish_Ejb 3.0_Jms - Fatal编程技术网

JavaEE/Glassfish应用程序逻辑

JavaEE/Glassfish应用程序逻辑,java,jakarta-ee,glassfish,ejb-3.0,jms,Java,Jakarta Ee,Glassfish,Ejb 3.0,Jms,我试图理解我的一些应用程序逻辑应该放在JavaEE应用程序中的什么地方。我是JavaEE新手,正在考虑从遗留数据库加载大量非结构化数据,并构建一个干净的对象模型供我的应用程序使用。根据我的调查,我发现JavaEE应用程序有两个组件,企业Bean和Web应用程序组件。我的应用程序的这一部分将负责加载数据,构建对象模型,并根据数据的当前状态通过JMS向相关方发送消息。数据将通过与数据库同步以及通过JMS从远程Java应用程序接收的消息进行更新 EJB是这种功能的正确位置吗?如何开始初始化对象模型(与

我试图理解我的一些应用程序逻辑应该放在JavaEE应用程序中的什么地方。我是JavaEE新手,正在考虑从遗留数据库加载大量非结构化数据,并构建一个干净的对象模型供我的应用程序使用。根据我的调查,我发现JavaEE应用程序有两个组件,企业Bean和Web应用程序组件。我的应用程序的这一部分将负责加载数据,构建对象模型,并根据数据的当前状态通过JMS向相关方发送消息。数据将通过与数据库同步以及通过JMS从远程Java应用程序接收的消息进行更新

EJB是这种功能的正确位置吗?如何开始初始化对象模型(与Java应用程序等效的主方法)?创建定时事件以查看对象模型并通过JMS发送消息的最佳实践是什么

我读过很多关于JavaEE、Glassfish、EJB的文章。。。但是我仍然不觉得我有一个清晰的画面,我应该在哪里写这个功能。我看到的任何EJB示例都倾向于直接调用来自客户端应用程序的bean方法


目前我觉得Java应用程序可以完成这项工作,但我们正在考虑将来使用RMI和web客户端。

正如您所说,这些示例往往涉及直接调用。根据我的经验,这不仅仅是例子。我见过的Java EE*1应用程序中没有一个像您描述的那样使用长寿对象图,相反,它们通常对单个记录(+子项/相关)进行操作,以响应web请求、web服务调用或JMS消息

您的需求打破了这种模式,JavaEE可能不是最合适的。从表面上看,您描述的代码类型属于EJB容器,但该容器缺少一个良好的长期上下文来锚定您的对象图。Web容器有这样的上下文,但缺少计时器和消息处理等功能。放弃J2EE而使用普通Java应用程序的代价当然是失去应用程序服务器的管理、部署和监视功能

一个好的选择可能是回到是什么造就了大公司。我不知道您是否熟悉J2EE的历史,但是Spring框架和Hibernate的突然、巨大的流行实际上是社区对EJB容器1.x/2.x版本的反抗。SpringWebApplicationContext提供给您的是一个健壮的web应用程序事务后端,它利用了MDB和JTA,同时尽可能地忽略EJB容器*2(并大大简化了过程中的单元测试)。您可以采用这种方法,将应用程序构建为单个WAR文件,并使用Spring启动后端服务

一个有趣的替代方案是完全抛弃JavaEE应用服务器,在OSGi框架之上构建应用程序。这是“普通的Java应用程序”方法,OSGi运行时为您提供了管理控制台和热部署功能,否则您将不得不自行部署这些功能。缺少的基础设施是计时器(use)和消息驱动bean(直接使用jmsapi)。OSGi应用程序最终感觉有点像Linux内核和引导过程,根据运行级别部署和启动服务。抓起看一看

你没有提到规模。如果对象图是巨大的,那么可以研究GigaSpaces或Coherence等技术

**1) Sun在引入EJB3时去掉了首字母缩略词中的“2”*


**2) 实体EJB2.x是最糟糕的部分。EJB3在很大程度上可以被看作是“如果你不能打败他们,就加入他们”标准化Hibernate的努力。*

JavaEE传统上用于客户机/服务器体系结构风格。业务逻辑在EJB会话bean中实现,通常从web请求、JMS消息或RMI-IIOP远程调用调用EJB会话bean

EJB是正确的位置吗 什么样的功能

逻辑进入EJB。但是有不同类型的EJB

如何开始初始化 我的对象模型(主要方法Java App 等价物)

没有所谓的
main
方法。但是仍然有一些方法可以执行与应用程序部署和/或取消部署相对应的一些处理。您可以查看新引入的bean和
@Startup
注释

最佳实践是什么 创建定时事件以查看 对象模型并通过 JMS

您可以创建将定期调用的。如果您需要在内存中加载一次模型,我建议您也看看bean。在EJB3.0中,问题是如何实现,但我认为他们改进了EJB3.1中的这一点,并且在使用
@Scheduled
注释部署应用程序时,计时器可以实现。因此,它可能会像你在上一个问题中所问的那样,为你提供一个理想的起点

您可以从任何bean发送JMS消息。JMS是一个与数据库类似的外部系统。JMS消息是使用称为消息驱动bean(MessageDrivenBean,MDB)的特殊EJB接收的

您的应用程序将不会是传统的web EJB数据库客户机-服务器应用程序,但使用Java EE应该是可行的,Java EE肯定是一个非常灵活的模型。

“如果您无法击败他们,请加入他们”标准化Hibernate的努力
-实际上,一个非常类似Hibernate的模型最初被考虑用于EJB1。不幸的是,当时支持这一点的少数工程师输给了坚持最终出现在EJB1中的实体bean的朋友。具有讽刺意味的是,第一个EJB1实体bean是由TopLink在后台实现的,项目是Hibernate,它是(Hibernate)的廉价开源版本