Spring 3.0 vs Java EE 6.0

Jos*_*iaz 52 spring java-ee

我遇到了一个情况......

在Spring 3.0和Java EE 6.0之间的Java EE开发方面,我被要求就哪种方法提出建议.我是,现在仍然是,Spring 2.5中,相比于传统的Java EE 5开发的启动,特别是与JBoss,我甚至迁移旧应用程序来春在这里影响了发展政策的重新定义,包括春特定的API,并帮助开发一个战略计划来培养更轻量级的解决方案,比如Spring + Tomcat,而不是更重的JBoss,现在,我们只是将JBoss用作Web容器,拥有我称之为"容器内容容器悖论",也就是说,让大多数API的Spring应用程序在JBoss中运行,所以我们正在迁移到tomcat.

然而,随着Java EE的6.0的许多功能的到来,这让春天在那个时候有吸引力的,易于部署,更少的耦合,甚至某种DI的,等等,似乎已经模仿,以某种方式或其他.JSF 2.0,JPA 2.0,WebBeans,WebProfiles等

所以,问题是......

从您的角度来看,考虑到Java EE 6.0提供的新视角,继续投资像Spring这样的非标准Java EE开发框架是多么安全和合乎逻辑?

我们可以谈谈Spring开发的3年或4年,或者您是否建议尽早采用Java EE 6.0 API及其实践?

我会很感激任何见解.

Oli*_*ohm 70

关键点恕我直言不是功能之一.在这方面,Spring将始终领先于JavaEE,因为它对OpenSource VS来说是很自然的.标准.因此,有一个事实是,使用Java可以更早地获得新功能(例如,容器集成测试是JavaEE 6中的一项新功能,并且已经在Spring中使用了很长时间).

最重要的一点是恕我直言,是管理和发展的生命周期之一.选择JavaEE时,可以将编程模型与基础架构联系起来.通常,应用服务器供应商并不是采用新标准版本的最快版本(归咎于WebSphere,JBoss,你有什么用).所以这意味着我们可能不会看到生产准备就绪,JavaEE 6在年底之前支持大型供应商的产品.

即使是这种情况,您仍然需要掌握管理的障碍,IT部门和预算控制经理愿意升级到这个闪亮的新版本.从这一方面来看,JavaEE 6甚至不是许多商店的选择.您可以选择将应用程序部署到何处?你想选择Glassfish进行生产吗?来吧,试试吧.大多数商店都没有处于这种"舒适"的状态.

完全相反:春天.从基础设施中解耦编程模型.转到当前的3.0.x并@Inject在Tomcat或遗留应用程序服务器中使用JPA 2等.

  • ...完全相同的应用服务器,您也可以轻松部署Spring应用程序.我的关键点是将编程模型绑定到应用服务器是一个长期问题,因为首先看起来像选择成为升级时的负担.您可以在应用程序中使用JSR-330注释,如果耦合真的是一个问题,只需使用Spring作为运行时容器.使用Spring,您可以从部署目标中解脱出来,从而为您的运行时提供更简单的更新路径,而不必涉及IT操作(它可以/应该,但不需要购买新服务器). (13认同)
  • 哇,我不知道这个神话还在哪里.您是否尝试过使用JPA从一个应用服务器移植到另一个应用服务器的非平凡JavaEE应用程序?这是我在JavaEE空间中看到的另一个问题:它意味着灵活性,在现实中没有(一旦你决定使用它的应用服务器),并且在更可能需要的地方提供灵活性(除了JPA之外的持久性?对不起,没有......).具有讽刺意味的是,当您将编程模型与代码保持一致时,Spring应用程序可以从一个应用服务器移植到另一个应用服 (10认同)
  • 我真的做到了,从Hibernate到Toplink Essentials再到Eclipselink,从OC4J到GF.自从JPA出现以来,这确实没有问题.请告诉我,JPA功能在实现之间有何不同?我不时地了解一些实现错误,但它是一个例外.真的行.你试过了吗?你传播的神话是它有一半的时间不起作用.如果您将所有内容保存在app libs中,那么可以轻松切换到另一台服务器.这不是我所说的便携式,我仍然没有看到任何与Spring绑定的好处并且无法改变 (8认同)
  • 所以,基本上,你说如果你不能选择最新的java ee服务器,你应该去春天吗?好吧,我的最低要求包括能够拥有最新的应用服务器.春天把你联系到春天.Java EE将您与10多个标准应用服务器中的任何一个联系在一起. (4认同)
  • 还有一个很大的不同.如果你想删除Spring,需要做一些工作(我会说:很多).如果您想要标准并且想要更改应用服务器,则不需要触摸您的代码. (2认同)

Wil*_*ung 12

如果您已经是春季商店,为什么还要费心转换?你很满意它,它做你想要的,它是积极开发的,你可能不会很快就想在Tomcat之外运行,如果有的话,因为Tomcat非常成熟,并且无处不在.因此,Java EE可能提出的任何可移植性承诺就在眼前.

我认为没有理由转离Spring.

  • 因为Java EE是可移植的,并且您不受Tomcat的约束.真.为什么Tomcat这么多人很容易?例如,已经尝试安装最新的Glassfish 3?它既简单又容易,但却是标准的.喜欢:多人聚集在一起定义事情应该如何运作; 它很容易切换; 你不需要重新发明轮子并重新实现已经提供的东西. (3认同)

Mat*_*zyk 8

由于威尔和奥利弗已经说过最关键的东西,我只会补充说:"如果它起作用并完成工作,那就别管它了!"."更新"和"标准化"并不总是等于"更好",事实上它很少 - 新事物笨重而且有些错误(这对我来说是最重要的)没有得到广泛支持.如果Java EE 6的其余部分与JSF2.0(以及所有Rich/Ice/Prime/WhateverFaces)一样"标准化",那么请相信我现在坚持使用Spring.许多公司坚持使用旧技术(稳定性>*),Spring已经上市多年并且已经很成熟.

@Edit:尤其对于@ymajoros:JSF(1.x和2.x)由于多种原因是一个有缺陷的标准,仅在少数情况下有用(即当您创建小型,简单的CRUD网站或当您是一位Java EE爱好者:

  • 创造新的组件是一个痛苦的屁股.由于它是一个基于组件的框架,我认为它会使事情变得更容易而不是更难.目前我更喜欢在后端方法上使用JS + Java,因为我实际上更容易在那里创建组件.JSF的唯一保存点就是有大量的组件库.问题在它们不起作用时开始,您想要更改某些内容或创建自己的组件.
  • 异常处理是一团糟(或者在过去一两年内发生了什么变化?)
  • JSF存在过于有状态的问题 - 很少有错误的决定,项目中的一个糟糕的开发人员和一半的应用程序可以是有状态的和序列化的.
  • 标准的UI部分没有(或者至少在我写这个答案的时候没有)涵盖了Java的大多数集合(事实上只有正确覆盖的数据结构才是List).

至于你如此喜爱的标准:他们最终以某种方式将JSF与JAX-RS集成在一起吗?因为最后我检查了那些规格是完全分开的,即使你可以做出很多改进.例如,为什么我不能在我的支持bean中使用@Path注释方法,因此它将由REST请求和JSF请求处理?

也许这些问题中的一些(全部?)现在已经修复,但是当我写这个答案时,他们只是JSF和标准的一些坏事中的一小部分.

目前,如果我想创建一个非常小的,简单的CRUD应用程序,我会使用Play 2.0(即使它是一个巨大的反模式)或类似RoR.当我想创建一个大型的"企业级"应用程序时,我抓住了一个JS框架(如ExtJS)和一个JS组件库将它与Java后端(例如Spring)结合起来,我做了我需要的,没有任何开销,所以被称为标准会带来.

当然JEE6有很酷的部分,比如JPA2,JAX-RS2,bean验证并不是那么糟糕.但是,使用整个标准堆栈只是因为他们称之为"标准"(正如我上面提到的,大多数规格甚至没有协同作用),在我非常谦虚的意见中,是错误的.

  • 你没有给出任何论据:为什么穷?背后是什么?我猜这种神圣的战争在这里没有任何地方,我会坚持*事实*:java ee/jsf是标准. (3认同)
  • 请备份您的索赔.越野车?Spring是否比Java EE 6实现更少?为什么会这样?Spring只有1个实现,Java EE 6有很多.关于JSF 2:它*是*标准(没有任何松散),Prime/RichFaces等是组件库. (2认同)
  • "创造新的组件是痛苦的屁股"只是一种意见."异常处理是一团糟(或者在过去的一两年内发生了什么变化?)" - >它确实在Java EE 6中发生了变化."有缺陷的标准",真的吗?这是相当的biaised.所有这些只是无支持的索赔,我建议删除这些部分. (2认同)