Java EE 6与Spring 3堆栈

Pio*_*zda 87 java jsf spring java-ee java-ee-6

我现在正在开始一个新项目.我必须选择技术.我需要一些简单的东西,所以没有EJB或Seam.另一方面,我需要JPA(Hibernate或替代)和JSF与IceFaces.

您是否认为在Tomcat上部署的Spring 3上的这样一个堆栈是一个不错的选择?或者Java EE 6 Web应用程序可能更好?我担心Java EE 6是一项新技术,尚未有详细记载.Tomcat似乎比Glassfish 3更容易维护.

你怎么看?你有经验吗?

Pas*_*ent 101

我需要一些简单的东西,所以没有EJB或Seam.

您是否愿意解释自EJB3以来EJB的重要性?你意识到我们不再是在2004年吗?我真的很想读对光定义和你的论点(我会很高兴地更新我的答案,因为我很确定我会有一些可靠的事情要说).

另一方面,我需要JPA(Hibernate或替代)和JSF与IceFaces.

包含JSF 2.0,JPA 2.0,Bean Validation,EJB 3.1 Lite,CDI等的Java EE 6 Web Profile 非常适用于此,您可以使用GlassFish v3 Web Profile运行使用Java EE 6 Web Profile构建的应用程序.

您是否认为在Tomcat上部署的Spring 3上的这种堆栈是一个不错的选择?或者Java EE 6 Web应用程序可能更好?

好吧,喜欢在非专有平台(Java EE)而不是专有容器(Spring)上运行我的代码的想法.我认为Java EE 6已经足够好了(这是一个委婉语,EJB 3.1(Lite),JPA 2.0,JSF 2.0,CDI kick ass).请注意,我是一个JSF怀疑论者,但我再看一下,带有CDI的JSF 2.0是如此不同,我甚至无法比较.如果你没有看CDI,让我告诉你它摇滚.

我担心Java EE 6是一项新技术,尚未有详细记载.

Java EE看起来很好地记录在我身上.这听起来像是免费索赔.而且,不管你信不信,开始发现Spring变得复杂,而Java EE变得更容易了.

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

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

  • @ arg20 - 这确实是个大问题,Pascal正确地要求解释"重"(或"轻")这个术语在这个背景下的含义.很可能它是Spring和EJB之间旧争执的剩余部分.在早期,EJB1和2在概念上很重.过分强调远程处理和有状态bean,一个荒谬冗长的XML部署描述符和一个完全疯狂的实现所需的接口量,这给他们带来了非常糟糕的声誉.在EJB3(2006)中,这已经彻底改变了,但是2004年为Spring留下EJB的人有时仍然认为它的2004和EJB2是最新的. (13认同)
  • 人们说EJB很重要是什么?我正在使用EJB v3.1,它们只是带注释的pojos.当他们说沉重的时候他们的意思是表现还是什么? (8认同)
  • 请注意,在Spring的about页面上,它说"我们相信:J2EE应该更容易使用".请注意,它们使用术语"J2EE"而不是"Java EE",自Java EE 5发布以来,它一直是正确的名称(我认为).这说明了很多...... (7认同)
  • @peperg Gaving King是CDI的规范领导者(Weld是RI)所以你会发现Seam和CDI之间的相似之处.但是CDI!= Seam,Java EE 6!= Seam,你的看法是错误的.也许尝试GlassFish v3 Web Profile,你会感到惊讶(一旦定义了连接池,就没有太多担心了). (6认同)
  • 我刚刚在JBoss上用EJB3.0 + Seam与Drools,GraniteDS等开发了大型项目.我同意Seam摇滚!但我花费了50%的开发用于重新部署,重启服务器,部署错误,清理临时目录等.另一方面JBoss Tools的性能非常差(我的意思是真的--ctrl + space和10s挂起)这真的不鼓励我使用JEE6看起来像是从Seam框架借来的.至于服务器,我不想考虑锥体池,jndi,jms,jmx,耳朵瘫痪.我需要一些东西让WAR开启并在几秒钟内运行. (2认同)

Bea*_*ker 32

我没有使用过JavaEE6.

然而,我被JavaEE和EJB的所有先前版本严重打败,直到它将自己确立为事实上的标准,而不仅仅是法律上的标准,我才会信任它.目前,Spring仍然是事实上的标准.

骗我,是你可耻.骗我两次,羞辱我.骗了我三次,EJB.

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

最近我进行了一次重大转换,将一堆Java应用程序从JBoss迁移到Weblogic.所有Spring/Hibernate应用程序都没有修改,因为它们内置了所有需要的库.所有使用JPA,EJB和JSF的应用程序都是端口灾难.应用服务器之间对JPA,EJB和JSF的解释的细微差别导致了各种令人讨厌的错误,这些错误需要永远修复.甚至像JNDI命名这样简单的东西在AppServer之间完全不同.

Spring是一个实现.JavaEE是一个规范.这是一个巨大的差异.我更喜欢使用规格如果规格是100%气密的,并且在供应商实施该规范的方式中绝对没有摆动空间.但JavaEE规范从未如此.也许JavaEE6更加气密?我不知道.您可以在WAR中打包的越多,您对AppServer库的依赖程度越低,您的应用程序就越便携,毕竟,这是我使用Java而不是Dot-NET的原因.

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


Boz*_*zho 23

没关系.Java EE 6已经足够好了,并且由于其中的配置文件,它并不"重" - 您将只使用Web配置文件.

就个人而言,我更喜欢春天.但是我已经没有针对Java EE 6的理性论点了:)

(正如我在评论中提醒的那样 - 你可能想要尝试RichFaces,以及ICEfaces和/或PrimeFaces - 取决于你需要的组件).


pri*_*pri 17

最近,我的一个客户端任务涉及评估Spring Stack Vs Custom框架堆栈和Java EE标准.经过一个月的评估和原型设计之后,我不仅高兴而且被Java EE 6功能集所震撼.对于2011年和未来的任何新的"企业"项目架构,我将使用Java EE 6和潜在的扩展,如Seam 3或即将推出的Apache JSR299扩展项目.Java EE 6体系结构经过精简,并融合了过去几年中发展起来的许多开源思想.

考虑以下开箱即用的功能:事件管理,上下文和DI,拦截器,装饰器,RESTful Web服务,带可嵌入容器的集成测试,安全性等等.

我的大多数结果发布在我的博客中,解释了您可能觉得有用的Java EE 6的关键概念.

当然,选择框架没有硬性规定.对于不需要丰富的会话会话状态的简单"网站",Java EE 6可能会非常臃肿.你不妨选择Grails或Play!框架.但对于对话式Web应用程序,我看不出更好的理由,为什么Java EE 6不适合.


Pio*_*zda 15

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

  • Java EE 5 + Seam + GraniteDS + Flex
  • 春季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就不要浪费你的时间.
  • 瓦丁很棒!开发过程比Flex简单,但您可以轻松创建丰富的应用程序而无需HTML混乱.你不会写一个单一的JS线.你只需要一些CSS(在Flex中你也需要它).因此,如果您的应用程序界面表现得像桌面应用程序,并且您不能(或不想)使用Flex - 请使用Vaadin.警告!Vaadin对浏览器有很大的JS开销.
  • 如果您创建更简单的类网站应用程序,请使用JSF2.0(如上所述使用spring后端).你需要与HTML斗争(我讨厌它),创建丰富的界面将比Vaadin(尤其是布局)更难.对于速度较慢的浏览器/计算机,您将获得轻量级HTML.我喜欢PrimeFaces - 它很容易记录.第二名是IceFaces
  • 如果您创建一个网站(不是Web应用程序),您需要将生命放入HTML(而不是创建适合浏览器的企业应用程序),请使用Wicket(如果您更喜欢基于组件,拉动态度)或SpringMVC(如果您更喜欢基于模板) ,推动态度)或只是使用Play!框架.请记住,创建基于数据的丰富组件会更加困难,但您可以控制每个html标签(您的HTML /图形设计师会喜欢它)

  • 我看不出你自己的答案与这个问题的关系...... (21认同)

Adi*_*Adi 8

阅读Adam Bien的企业Java未来......是清晰的(Java EE有/无Spring和反Versa),包括获得硬币双方的评论.我将选择Spring有几个原因,以下是其中之一(从帖子中复制其中一条评论)

'我不确定你在谈论哪个Java EE 6服务器.有Glassfish认证和TMAX JEUS.在Java EE 6兼容版本的WebSphere,WebLogic,JBoss等正在生产中并且可以用于实际应用之前,需要相当长的时间(读取:年).Spring 3只需要Java 1.5和J2EE 1.4,因此几乎可以在所有环境中使用

  • 我们差不多整整一年了,支持Java EE 6的JBoss AS 6目前正在生产中使用. (6认同)

Tho*_*sen 8

我的观点是基于其他人没有提到的东西,即我工作中的代码往往存活数十年(文学上),因此维护对我们来说非常重要.维护我们自己的代码以及我们使用的库.我们自己控制的代码,但是我们使用的库在我们的兴趣中,在上述几十年或更长时间内由其他人维护.

总而言之,我得出的结论是,实现这一目标的最佳方法是将Sun规范的开源实现一直使用到原始JVM.

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

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

在这种特殊情况下,我建议只看一下JavaServer Faces,因为它是Java EE 6的一部分,这意味着它将在非常长的时间内可用和维护.然后我们选择增加MyFaces Tomahawk,因为它提供了一些有用的补充,它是一个jakarta项目.

JBoss Seam或其他人没有任何问题.只是他们的重点不在于对我们来说如此重要的维护问题.


小智 6

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

如果客户端对Flex很好,那就去吧.使用BlazeDS或类似的 - 没有mvc.您可能会在该部分上花费更多时间(在服务器和客户端之间交换数据),但您可以完全控制双方.

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

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


小智 5

为什么在2010年仍然存在关于EJB重量级的谣言?似乎人们没有使用Java EE技术进行更新.试一试,您会惊喜地发现Java EE 6中的内容是如何简化的.