繁体   English   中英

EJB-将数据发送到远程

[英]EJB - Send Data to remote

我想在两个应用程序JEE6 / JSF2.0之间交换数据,我正在寻找最佳解决方案。 我想到了以下解决方案:

  • 通过使用JSON文件。
  • 通过使用XML文件。
  • 通过使用GSON文件。
  • 通过使用远程接口(EJB 3.0)。

对您来说,最佳的解决方案是什么?

编辑:这两个应用程序将始终在同一网络上运行(但不能在同一JVM上)

我想提供一种替代David答案的方法,因为我认为RMI有一些缺点,他没有充分利用。

  1. 这是Java特定的技术。 如果需要引入第三台服务器,例如它是Microsoft Reporting Services服务器,则它不能使用相同的语言进行通话。

  2. RMI是一种过时的技术,在CV上看起来并不是特别好。 Web服务是未来。 有经验的RMI开发人员比有经验的Web服务开发人员更为罕见。

  3. 繁琐而沉重的框架

我认为更好的解决方案是使用基于SOAP XML的Web服务。 这种方法有一些优点:

  1. 几乎在任何开发框架中都被普遍接受。 无论采用哪种技术,几乎所有人都具有与Web服务交互的有用库。

  2. Java对将对象序列化为XML有很好的支持。 这意味着可以将对象快速序列化为SOAP XML请求,发送给其他服务器,然后由其他应用程序服务器反序列化为Java对象进行处理。

  3. 服务层可以像RMI一样为您提供两个应用程序之间的解耦接口。

希望您重新考虑在应用程序中使用基于SOAP XML的Web服务。

正如您自己所说的,有两种选择。

使用RMI连接到EJB或使用Web服务并通过JSON / XML等进行通信...

根据我的经验,如果您的应用程序位于同一网络上,则RMI可能会很有利,否则,您可能会遇到防火墙等问题,并被迫使用HTTPS隧道传输RMI ...这几乎使RMI调用了网络服务调用。

如果您使用的是两台不同的计算机,那么Web服务就不错了,因为它们不会给防火墙造成太多麻烦。 同样,由于他们使用HTTP协议,因此您不必担心正在传输的数据。

这些示例有些笼统,但应该可以使您有所了解。

GSON vs XML vs JSON是一个完全不同的主题... Non优于其他,而且人眼都可以轻松阅读所有内容。

更新从我了解的内容来看,您不必担心防火墙,因此,我建议您使用RMI。 通常,它可以使代码更简洁,性能也更好。

既然我已经看到了两者的实际应用,那么我可以在EJB和WebServices这两种技术之间进行比较。 我可以确认EJB效率更高,支持事务(包括分布式事务,如果需要的话),异常处理和开箱即用的二进制流。 在性能方面,EJB的速度可能比SOAP高出5倍,而REST大约是SOAP的3倍。

但是,EJB不是集成技术。 实际上,它从未想过这样做。 EJB的最大缺陷是它与Java平台非常耦合。 因此,两个端点都必须用Java编写并且应使用相同的Java EE版本。

另一个问题是EJB本身不是协议,因此来自两个容器/供应商的实现可能有所不同。 如果需要从Oracle WebLogic服务器上的JBoss AS访问远程EJB,则必须随身携带JBoss EJB客户端实现。

与EJB集成相关的另一个大问题是缺乏数据交换格式。 由于它使用Java序列化对象进行通信,因此数据类型必须在两端共享。 如果您在分类为应用程序异常的服务器上创建新的异常类型,则使用此服务的客户端触发该异常时,其代码将中断。 请注意,在这种情况下,不会违反远程API,但是引入了另一个未知类型。

而且,当然,通过仅依赖于类类型作为交换格式,就为程序员提供了做非常愚蠢的事情的机会。 如果您在使用EJB作为集成技术(使用不同版本的Java EE)的大型项目中拥有许多不同的团队,请做好充分的准备。 我似乎是一个程序员,包括在客户端上的JPA实体,该实体使用命名查询,正在访问的表,其列等进行注释,实质上是将所有数据库布局分配给了服务使用者。 但情况可能更糟。 我似乎已经在程序员返回属于依赖项的数据结构,即Eclipselink 1.0。 但是,如果您从JBoss服务器访问它,则Eclipselink也是JPA实现技术,它与JBoss的休眠状态冲突。 因此,现在您必须在JBoss APP类路径中包含Eclipselink jar,并配置该容器以不加载与JPA相关的软件包,否则将完全破坏您的应用程序。 即使这样,它也可以比以前得到WORSE:需要连接的其他一些服务也有使用相同数据结构的好主意,但是从Eclipselink 1.1.1开始,它具有不同的实现,但是具有相同的类签名。 现在您的处境非常糟糕。

最重要的是:永远不要将EJB用作集成技术。 使用基于合同优先的方法的SOAP,在该方法中,您可以为应用程序定义规范的数据模型,将Java数据结构映射为XML交换格式,该格式可以由任何客户端使用,无论是以任何语言编写还是使用不同的堆栈编写。 或使用HATEOAS原理使用REST实现基于资源的资源。 这些天来,我似乎几乎根本就没有使用EJB的理由,因为CDI现在已经上市,它支持EJB所具有的许多功能,并且不包括任何与RPC相关的技术。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM