首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于Java应用程序,您会推荐哪种远程处理方法?

对于Java应用程序,您会推荐哪种远程处理方法?
EN

Stack Overflow用户
提问于 2009-07-03 10:02:05
回答 6查看 3.5K关注 0票数 7

我想知道集成作为单独的J(2)EE应用程序开发的Java模块的最佳方式是什么。这些模块中的每一个都公开Java接口。POJO实体(Hibernate)与这些Java接口一起使用,没有DTO对象。集成这些模块的最佳方式是什么,即一个模块远程调用另一个模块接口?

我在想: EJB3,黑森语,SOAP,JMS。每种方法都有优缺点。

朋友们,你们的观点和经验是什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-07-03 10:47:56

在涉足了一些远程处理技术之后,我发现它们普遍都很无聊,现在我将使用Spring remoting作为实现的抽象。它允许您专注于编写您的功能,并让Spring通过一些配置来处理远程部分。您可以选择几种实现(RMI、Spring的HTTP invoker、Hessian、Burlap和JMS)。抽象意味着,如果您的需求发生变化,您可以选择一个实现并简单地交换它。有关详细信息,请参阅SpringSource docs

票数 8
EN

Stack Overflow用户

发布于 2009-07-03 10:33:05

标准方法是在各种服务组件之间使用纯RMI,但这会带来共享Java接口和对域模型进行版本更改的问题,特别是当您有许多组件使用相同的类时。

您是否真的在单独的VM中运行每个服务?如果这些EJB总是相互通信,那么您最好将它们放到同一个VM中,并避免任何远程过程调用,因为这些服务可以使用它们的LocalInterfaces。

另一个可能会影响你的事情是使用Hibernate POJO。您可能认为这些是简单的POJO,但在幕后,Hibernate一直忙于CGLib,试图做一些事情,比如允许延迟初始化。如果这些bean被序列化并跨远程边界传递,那么最终可能会出现奇怪的Hibernate异常。就我个人而言,我更喜欢创建简单的DTO或将POJO写出为XML,以便在组件之间传递。出于性能方面的原因,我的同事们会更进一步,编写用于传输数据的自定义连接协议。

最近,我一直在使用MULE ESB来集成各种服务组件。它相当不错,因为你可以混合使用RMI、套接字、web服务等,而不必编写大部分样板代码。

http://www.mulesource.org/display/COMMUNITY/Home

票数 3
EN

Stack Overflow用户

发布于 2009-07-03 10:38:34

除了最简单的工作之外,你为什么要去做任何事情呢?

在您的例子中,这听起来像EJB3或JMS,这取决于通信需要同步还是异步。

到目前为止,构建在RMI之上的EJB3是最简单的,容器提供了您可能需要的所有附加功能-安全性、事务等。假设您的POJO在一个共享的jar中,因此可以在EJB之间简单地传递,尽管我自己倾向于传递值对象。EJB的另一个好处是,如果处理得当,它的性能最好(顺便说一句,这只是我的观点)。

JMS稍微复杂一些,但不是很多,基于异步通信的系统在并行化任务等方面提供了某些细节。

web服务的性能开销,不可避免的额外配置和额外的故障点使得它们,IMHO,不值得麻烦,除非你有强制使用它们的需求-我认为在这里与非Java客户端进行互操作或向外部方提供数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1078695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档