我现在开始一个新项目。我必须选择技术。我需要一些东西,所以不需要EJB或Seam。另一方面,我需要带有IceFaces的JPA(休眠或替代)和JSF。
您是否认为在Spring 3上的Tomcat上部署这样的堆栈是一个不错的选择?还是Java EE 6 Web应用程序可能更好?恐怕Java EE 6是一项新技术,尚未得到充分记录。Tomcat似乎比Glassfish 3更易于维护。
你怎么看?你有经验吗?
我现在开始一个新项目。我必须选择技术。我需要一些东西,所以不需要EJB或Seam。另一方面,我需要带有IceFaces的JPA(休眠或替代)和JSF。
您是否认为在Spring 3上的Tomcat上部署这样的堆栈是一个不错的选择?还是Java EE 6 Web应用程序可能更好?恐怕Java EE 6是一项新技术,尚未得到充分记录。Tomcat似乎比Glassfish 3更易于维护。
你怎么看?你有经验吗?
Answers:
我需要一些东西,所以不需要EJB或Seam。
您是否愿意解释自EJB3以来使EJB变重的原因?您是否意识到我们已经不在2004年了?我真的很想阅读您对light 的定义和您的论点(并且我会很高兴地更新我的答案,因为我敢肯定我会说几句话)。
另一方面,我需要带有IceFaces的JPA(休眠或替代)和JSF。
Java EE 6 Web Profile(包括JSF 2.0,JPA 2.0,Bean验证,EJB 3.1 Lite,CDI等)非常适合此操作,您可以使用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(精简版),JPA 2.0,JSF 2.0,CDI踢屁股)。请注意,我是JSF的怀疑者,但我进行了第二次观察,带有CDI的JSF 2.0是如此不同,以至于我什至无法比较。而且,如果您不看CDI,那么我告诉您它确实很糟糕。
恐怕Java EE 6是一项新技术,尚未得到充分记录。
对我来说,Java EE看起来不错。这听起来像免费索取。而且,信不信由你,我开始发现Spring变得越来越复杂,而Java EE变得越来越简单。
Tomcat似乎比Glassfish 3更易于维护。
你有尝试过吗?你有什么特别的问题吗?同样,这听起来像是免费索取。
我没有使用过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)应用程序的影响。
没关系 Java EE 6足够好,并且由于那里有配置文件,因此它不是“繁重的”-您将只使用Web配置文件。
就个人而言,我更喜欢Spring。但是我对Java EE 6的理性争论不多了:)
(正如我的评论所提醒-您可能需要尝试RichFaces以及ICEfaces和/或PrimeFaces-取决于所需的组件)。
最近,我的一位客户任务涉及评估Spring堆栈与自定义框架堆栈与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对于不需要丰富会话状态的简单“网站”来说可能是be肿的。您不妨选择Grails或Play!框架。但是对于对话式Web应用程序,我看不出有一个更好的论点,为什么Java EE 6不太适合。
现在,一段时间后,我对堆栈有了经验:
我的结论是:
阅读亚当·比恩(Adam Bien)的《企业Java的未来...很清楚》(Java EE带有/不带有Spring和Vice Versa),其中包括获得硬币两面的评论。我将出于多种原因选择Spring,以下是其中之一(复制帖子中的评论之一)
'我不确定您在谈论哪个Java EE 6服务器。有Glassfish认证和TMAX JEUS。直到Java EE 6兼容版本的WebSphere,WebLogic,JBoss等投入生产并可以用于实际应用之前,要花相当长的时间(阅读:几年)。Spring 3只需要Java 1.5和J2EE 1.4,因此几乎可以在几乎所有环境中使用。
我的意见基于其他人未提及的内容,即我的工作中的代码往往存在数十年(实际上),因此维护对我们非常重要。维护我们自己的代码以及我们使用的库。我们控制着自己的代码,但对我们而言,我们使用的库在上述几十年或更长时间内由其他人维护也符合我们的利益。
长话短说,我得出的结论是,实现这一目标的最佳方法是使用Sun规范的开源实现,一直到原始JVM。
在开源实现中,Apache Jakarta已被证明可以维护其库,最近,Sun在为Glassfish v3生成高质量实现方面做了很多工作。无论如何,我们还拥有所有模块的源代码,因此,如果所有其他模块都失败了,我们可以自己维护它们。
Sun规范通常非常严格,这意味着可以轻松互换符合该规范的实现。看看servlet容器。
在这种特殊情况下,我建议您仅看一下JavaServer Faces,因为它是Java EE 6的一部分,这意味着它将在非常非常长的时间内可用和维护。然后,我们选择使用MyFaces Tomahawk进行增强,因为它提供了一些有用的补充,并且这是一个雅加达项目。
JBoss Seam或其他产品没有任何问题。只是他们关注的重点不再是对我们如此重要的维护问题。
如果您已经拥有Spring,那么我可以看到它,但是对于新项目,有什么意义呢?我将直接使用Java EE 6(ejb3,jsf2.0等)
如果客户对Flex满意,那就去做吧。使用BlazeDS或类似工具-无mvc。您可能会在这方面花费更多的时间(在服务器和客户端之间交换数据),但是您可以完全控制双方。
除非您想杀死浏览器,否则请不要使用Vaadin。此外,一旦页面变得更加复杂,您将花费更多的时间来处理代码。另外,您的思维方式将需要完全改变,您对标准前端开发所知的一切都将浪费。不必使用HTML或JS的说法没有多大意义。即使不使用它,您仍然必须知道它。最终将其呈现为HTML和JS。然后尝试对其进行调试-确保您有几天时间来学习简单的东西。另外,我无法想象不了解html / js的网络开发人员。
我只是不明白为什么人们尝试所有这些抽象而不是直接使用Java EE。
问题的答案取决于您的项目要求。如果您不需要Java EE功能(例如消息队列,容器管理的全局事务等),请使用tomcat + spring。
从经验中我还发现,需要大量Web服务集成,调度,消息队列的项目最好使用某些Java EE堆栈来完成。好消息是,使用spring仍可以与在应用程序服务器中运行的Java EE模块集成。
Java EE 6与以前的版本有很大的不同,它确实使一切变得更加容易。Java EE 6结合了来自不同Java社区的最佳创意,例如Spring框架的Rod Johnson积极参与了Java EE 6中的依赖注入JSR的制作。使用Java EE 6的好处是您可以根据标准,这在某些组织中对于供应商支持等可能很重要。
GlassFish v3支持Java EE 6,而且重量轻,并且启动速度非常快。我一直在使用glassfish v3进行开发,并且配置起来非常容易。它带有一个非常用户友好的管理控制台,可让您以图形方式管理服务器。
如果您使用的是GlassfishV3和JSF 2,则可以利用Java EE 6的CDI功能,该功能使您可以轻松地在JSF中创建对话(例如页面之类的向导)。
话虽如此,使用Java EE 6还需要您学习新的API。根据可用的时间范围,它可能不是您的最佳选择。Tomcat已经存在了很长时间,并且tomcat + spring组合已被许多Web项目采用,这意味着周围有许多文档/论坛。
我曾经在Spring和Java EE 6中工作过。根据我的经验,我可以说的是,如果您打算使用旧的JSP或专有的Flex,那么在Spring办公的话,您会很安全。
但是,如果您要继续使用JSF,那么是时候转向Java EE 6了。使用Java EE 6,您将转向Facelets以及标准化的脚本库和组件库。不再有脚本不兼容和组件库矩阵。
关于Spring MVC,只要您的项目规模不会太大,就很好。如果是大型企业应用程序,请坚持使用Java EE6。因为这是您可以有序维护自己的组件库和资源包的唯一方法。
如果需要Java EE完整堆栈,建议您使用GlassFish 3.1。与实现了部分或全部Java EE 6(JBoss 6,WebLogic 10.3.4)的其他Java EE容器相比,它的启动速度非常快,重新部署需要几秒钟的时间,并且几乎所有操作都可以通过约定进行配置,这非常友好。
我想要“轻巧”的东西,您可以自定义具有所需功能的Apache Tomcat7.x。我在以下库中使用很多: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将是更好的选择。Flex也是如此。考虑合同优先的XML服务,您可以将后端与UI完全分离。
我建议使用Spring + Tomcat,除非您可以等待Glassfish v3和Weld变得更成熟的时间。使用启用了CDI的应用程序运行glassfish时,当前在内存消耗/ CPU负载方面存在一些问题。
并没有阅读所有内容,只是告诉您现在可以在Java EE 6战争中使用EJB3,以便可以在Tomcat上使用EJB3(我认为)。
我向您推荐使用Spring的Tomcat,因为:
选择Tomcat是一个不错的选择,因为您不需要任何重量级的处理