Java EE 6与Spring 3堆栈

我现在开始一个新的项目。 我必须select技术。 我需要一些东西,所以没有EJB或Seam。 另一方面,我需要JPA(Hibernate或其他)和JSF与IceFaces。

你认为在Tomcat上部署的这样一个堆栈是不错的select吗? 或者一个Java EE 6的Web应用程序可能会更好? 我担心,Java EE 6是一项新技术,尚未完善logging。 Tomcat似乎比Glassfish 3更容易维护。

你怎么看? 你有什么经验吗?

我需要一些东西,所以没有EJB或Seam。

您是否想解释EJB3以来EJB的重要性? 你知道我们现在不在2004年吗? 我真的很想阅读对光线定义和你的论点(我会很高兴地更新我的答案,因为我相信我会有几件可以说的事情)。

另一方面,我需要JPA(Hibernate或其他)和JSF与IceFaces。

包含JSF 2.0,JPA 2.0,Beanvalidation,EJB 3.1 Lite,CDI等的Java EE 6 Web Profile将是完美的,您可以使用GlassFish v3 Web Profile运行使用Java EE 6 Web Profile构build的应用程序。

你认为在Tomcat上部署的这样的堆栈是不错的select吗? 或者一个Java EE 6的Web应用程序可能会更好?

那么, 喜欢在非专有平台 (Java EE)而不是专有容器 (Spring)上运行我的代码的想法。 我认为Java EE 6是足够好的(这是一个委婉的说法,EJB 3.1(Lite),JPA 2.0,JSF 2.0,CDI踢屁股)。 请注意,我是一个JSF怀疑论者,但我再次看了一下,与CDI的JSF 2.0是如此不同,我甚至不能比较。 如果你没有看CDI,让我告诉你,这是摇滚。

我担心,Java EE 6是一项新技术,尚未完善logging。

Java EE看起来很好logging给我。 这听起来像是免费的主张。 而且,不pipe信不信,在Java EE变得越来越简单的时候, 开始发现Spring变得复杂了。

Tomcat似乎比Glassfish 3更容易维护。

你尝试过什么吗? 你有什么特别的问题吗? 再次,这听起来像是免费的要求。

我没有使用JavaEE6。

然而,我已经被JavaEE和EJB的所有旧版本狠狠地殴打过了,直到它将自己确定为事实标准,而不仅仅是法理上的标准,我才会相信它。 现在,spring仍然是事实上的标准。

骗我,是你可耻。 愚弄我两次,对我感到羞耻。 我的三个傻瓜,EJB。

有人会声称Spring是专有的。 我认为JavaEE规范的供应商实现就像专有一样,如果不是更多的话。

我最近经历了一个重大转换,即将一堆Java应用程序从JBoss移到Weblogic。 所有的Spring / Hibernate应用程序都进行了零修改,因为它们内置了所有需要的库。所有使用JPA,EJB和JSF的应用程序都是一个端口灾难。 JPA,EJB和JSF在appservers之间的细微差别导致了各种各样令人讨厌的错误,这些错误是永远需要解决的。 甚至像JNDI命名这样简单的事情在AppServers之间是完全不同的。

Spring是一个实现。 JavaEE是一个规范。 这是一个巨大的差异。 我更喜欢使用一个规范,如果规范是100%不透气的,并且在供应商实现该规范的方式上绝对没有摆动空间。 但JavaEE规范从来没有这样。 也许JavaEE6更密封? 我不知道。 您可以在WAR中打包的越多,依赖于AppServer库的越less,应用程序的可移植性就越高,毕竟这是使用Java而不是Dot-NET的原因。

即使规范是密封的,如果能够升级应用服务器而不必升级我的所有应用程序中的所有技术堆栈,那也不错。 如果我想从JBoss 4.2升级到JBoss 7.0,我必须考虑新版JSF对我所有应用程序的影响。 我不必考虑对我的Spring-MVC(或Struts)应用程序的影响。

没关系。 Java EE 6足够好,因为那里的configuration文件,它不是“沉重的” – 你只是使用webconfiguration文件。

就个人而言,我更喜欢spring。 但是我对Java EE 6的理性争论不多了:)

(正如我提醒注意的 – 你可能想尝试RichFaces ,以及ICEfaces和/或PrimeFaces – 取决于你需要什么组件)。

最近,我的一个客户任务涉及评估Spring Stack Vs定制框架堆栈是一个Java EE标准。 经过一个月的评估和原型devise之后,我不仅高兴,而且被Java EE 6function集所吹捧。 对于2011年的任何新的“企业”项目体系结构,我将继续使用Java EE 6和潜在的扩展,如Seam 3或即将推出的Apache JSR299扩展项目。 Java EE 6架构经过精简,融合了过去几年来发展起来的许多开源思想。

请考虑以下function:事件pipe理,上下文和DI,拦截器,装饰器,REST风格的Web服务,可embedded容器的集成testing,安全性等等。

我的大部分结果都发布在我的博客中,解释了您可能会觉得有用的Java EE 6的关键概念。

当然,select框架没有硬性规定。 对于不需要丰富会话会话状态的简单“网站”,Java EE 6可能会变得很臃肿。 你可能会selectGrails或Play! 框架。 但对于会话式Web应用程序,我看不出一个更好的理由,为什么Java EE 6不适合。

现在,一段时间后,我有堆栈的经验:

  • Java EE 5 + Seam + GraniteDS + Flex
  • Spring 3 + Vaadin(在GWT上)
  • Spring 3 + JSF 2.0(PrimeFaces)

我的结论是:

  • Spring 3比Seam(几乎Java EE 6)简单得多,可以在Tomcat和Jetty上运行! (用Maven插件开发的Jetty是一个trasure)。
  • 我喜欢Flex(我实际上是一个Flex开发人员很长时间,所以我有偏见),如果你需要丰富的界面,可以购买FlashBuilder使用这个,但使用这个到Spring + GraniteDS或BlazeDs后端。 如果你不能购买FlashBuilder,不要浪费你的时间。
  • Vaadin太棒了! 开发过程比Flex简单,但可以轻松创build丰富的应用程序,而不会造成HTML混乱。 你不会写一个单一的JS线。 你只需要一些CSS(在Flex中你也需要它)。 所以,如果你的应用程序界面的行为像桌面应用程序,你不能(或不想)使用Flex – 使用Vaadin。 警告! Vaadin在浏览器方面有很大的JS开销。
  • 如果你创build更简单的类似网站的应用程序使用JSF2.0(与上面的spring后端)。 你需要与HTML战斗(我讨厌它)和创build丰富的界面将比Vaadin(特别是布局)更难。 你会得到较慢的浏览器/计算器的轻量级HTML。 我喜欢PrimeFaces – 这很容易,有据可查。 第二名是IceFaces
  • 如果你创build一个网站(而不是一个Web应用程序),你需要把生活变为HTML(而不是创build适合浏览器的企业应用程序)使用Wicket(如果你喜欢基于组件,拉dynamic度)或SpringMVC(如果你更喜欢基于模板,推姿态)或者只使用Play! 框架。 请记住,创build丰富的基于数据的组件将困难得多,但是您可以控制每个html标记(您的HTML /graphicsdevise人员会喜欢它)

阅读亚当·比恩(Adam Bien)关于企业Java的未来……清楚(Java EE有/无Spring和Vice Versa) ,包括评论以获得双方的赞誉。 我会selectspring有几个原因,其中之一就是其中之一(复制其中一个评论)

“我不确定你正在谈论哪个Java EE 6服务器。 有Glassfishauthentication和TMAX JEUS。 在Java EE 6兼容版本的WebSphere,WebLogic,JBoss等正在生产中,并且可以用于实际应用程序之前,需要花费相当长的一段时间(阅读年限)。 Spring 3只需要Java 1.5和J2EE 1.4,因此几乎可以在所有环境中使用,

我的意见是build立在别人没有提到的事情上,即我工作中的规范往往会活几十年(文学),因此这种维护对我们来说非常重要。 维护我们自己的代码,以及我们使用的库。 我们自己的代码是我们控制的,但是我们所使用的库在上述几十年或更长的时间里是由其他人维护的。

长话短说,我得出的结论是,实现这一目标的最好方法是使用Sun规范的开源实现,一直到原始JVM。

在Apache Jakarta已经certificate可以维护他们的库的开源实现中,最近Sun在为Glassfish v3生成高质量实现方面做了大量的工作。 无论如何,我们也有所有模块的来源,所以如果一切都失败了,我们可以自己维护。

Sun的规范通常非常严格,意味着符合规范的实现可以轻松地互换。 只要看看servlet容器。

在这种情况下,我build议看看JavaServer Faces,因为它是Java EE 6的一部分,这意味着它将在很长的时间内可用和维护。 然后我们select增加MyFaces Tomahawk,因为它提供了一些有用的补充,它是一个雅加达项目。

JBoss Seam或其他人没有错。 这只是他们的重点,而不是我们这么重要的维修问题。

如果你已经有了Spring,我可以看到使用Spring,但是对于新项目,这有什么意义呢? 我会直接使用Java EE 6(ejb3,jsf2.0等)

如果客户端使用Flex,那就去做吧。 使用BlazeDS或类似的 – 没有mvc。 你可能会花更多的时间在这部分(在服务器和客户端之间交换数据),但是你完全可以控制双方。

不要使用Vaadin,除非你想杀死你的浏览器。 此外,一旦页面变得更复杂,您将花更多的时间来绕过代码。 另外,您的思维模式需要彻底改变,您对标准前端开发的任何了解都将是浪费。 你不必使用HTML或JS的说法没有多大意义。 即使你不使用它,你仍然需要知道它。 它最终呈现给HTML和JS。 然后尝试debugging它 – 确保你有几天的简单的东西。 另外,我无法想象web开发人员不知道html / js。

我只是不明白为什么人们尝试所有这些抽象,而不是直接使用Java EE。

为什么2010年EJB仍然是重量级的谣言? 看来人们并没有在Java EE技术中更新。 试一下,你会惊喜地发现Java EE 6中的事情是如何简化的。

您的问题的答案取决于您的项目要求。 如果你不需要像消息队列,容器pipe理的全局事务等Java EE特性,那么就使用tomcat + spring。

另外从经验中,我发现需要大量Web服务集成,调度,消息队列的项目最好使用一些Java EE堆栈来完成。 使用spring的好处是,您仍然可以与在应用程序服务器中运行的Java EE模块集成。

Java EE 6与以前的发行版非常不同,它确实使一切变得更加简单。 Java EE 6结合了来自不同Java社区的最佳想法,例如Spring框架的Rod Johnson积极参与了Java EE 6中的dependency injectionJSR的制作。使用Java EE 6的一个好处是您可以根据一个标准,这在一些组织中对于供应商支持等可能是重要的。

GlassFish v3支持Java EE 6,它非常轻便,启动速度非常快。 我一直在使用glassfish v3进行开发,configuration起来非常简单。 它配备了一个非常用户友好的pipe理控制台,让您以graphics方式pipe理您的服务器。

如果您正在使用GlassfishV3和JSF 2,那么您可以利用Java EE 6的CDIfunction,这使您可以轻松地在JSF中创build对话(例如像向导一样的页面)。

话虽如此,使用Java EE 6还需要您学习一个新的API。 根据可用的时间段,它可能不是您的最佳select。 Tomcat已经存在很久了,tomcat + spring组合已经被许多web项目所采用,这意味着大量的文档/论坛。

我曾在Spring和Java EE 6中工作过。根据我的经验,我可以说的是,如果您要使用旧的JSP或专有的Flex,那么如果您留在Spring中,那么您是安全的。

但是,如果您要继续使用JSF,那么就应该转向Java EE 6.使用Java EE 6,您将转向Facelets并标准化脚本库和组件库。 没有更多的脚本不兼容性和组件库matrix。

关于Spring MVC,只要你的项目不会变得太大就好了。 如果这是一个巨大的Java EE 6企业应用程序。因为这是您可以有序地维护自己的组件库和资源包的唯一方法。

如果您需要Java EE完整堆栈,我build议您使用GlassFish 3.1。 与其他实现部分或全部Java EE 6(JBoss 6,WebLogic 10.3.4)的Java EE容器相比,它的启动速度非常快,重新部署需要几秒钟的时间,几乎所有的工作都可以按照惯例进行,而且非常友好。

我想要一些“轻量级”的东西,你可以自定义Apache Tomcat 7.x所需的function。 我用了很多以下库:Weld 1.1.0(CDI)JPA 2.0(Hibernate 3.6.x) – 只有资源本地事务JSF 2.x(Mojarra)RichFaces 4.0 BIRT运行时

过去10年来,我一直是Java EE开发人员(我早期受到EJB,JSF和Web技术的困扰),Java EE 6非常简单,耦合良好,当前的硬件运行平稳,因此激发Spring的原始理由不再有效。

我还是喜欢spring。

我会通过JSF。 我认为这是一个死的技术。 Spring MVC将是一个更好的select。 Flex也是如此。 从契约第一个XML服务的angular度来看,你可以完全解耦UI的后端。

我会推荐Spring + Tomcat,除非你可以等待glassfish v3和Weld变得更加成熟。 当启用CDI的应用程序运行glassfish时,目前有一些内存消耗/ CPU负载的问题。

没有读过所有东西,只是为了告诉你现在可以在Java EE 6的战争中使用EJB3,所以你可以在Tomcat上使用EJB3(我认为)。

我向你推荐Tomcat,因为:

  1. Spring可以为JSP创build支持bean
  2. 您将使用Spring通过JPA持久化对象

selectTomcat是不错的select,因为你不需要任何重量级的处理