需要帮助定义/理解Java EE"堆栈"

Jaz*_*epi 6 java jsf icefaces java-ee

LAMP是一个从左到右(从下到上)定义为Linux/Apache/MySQL/PHP的堆栈,或者通常可以将其视为操作系统/ Web服务器/数据库/脚本语言.在通用形式中,您可以在任何操作系统中弹出,例如Windows而不是Linux以获取WAMP或放入其他数据库,甚至可以运行除PHP以外的其他语言,如Ruby.但是,通常你只有一件东西.一个数据库,一个操作系统,一个Web服务器,但您的应用程序可能会从一个堆栈转换到另一个堆栈,并且进行一些有限的更

我已经在LAMP堆栈中进行了几年的开发,我一直在阅读有关JSF以及组件库RichFaces和IceFaces的内容.从支持AJAX的组件构建网站UI的整个想法,并获得各种漂亮的东西,如验证,以及免费的混乱AJAX调用真的很令人兴奋.

问题是我很难理解通用组件构成Java EE堆栈的原因.根据我的研究,您似乎有以下类别来构建"Java EE堆栈":

Java EE应用服务器 - JBoss,Tomcat

数据库 - MySQL,Oracle

数据库抽象 - Hibernate,JPA

支持JSF Ajax的组件库 - ICEFaces,RICHFaces

我觉得我肯定错过了一些东西.我不确定Seam或Spring适合这个.Hibernate也是使用JPA的东西吗?或者JPA是一个功能齐全的API,我可以轻松使用它?容器在哪里适合这个?我可以出去找一个容器在我的Java EE应用服务器上运行吗?此外,Maven在哪里适合所有这些?从我收集的内容来看,它似乎不是Web服务堆栈的一部分,而是在部署之前使用的工具.

我一直在阅读Rainer Eschen的ICEfaces 1.8,这个图由他作为一种Java EE堆栈呈现.我的猜测是AppFuse是针对Java EE的,因为XAMPP是针对LAMP的.真的吗?如果有人可以分解下图中的各个部分以及它们如何组合在一起,那将非常有用.

ICEcube架构图http://img191.imageshack.us/img191/336/icecubearchitecture.png

我知道这些是各种各样的问题.如果我没有问你认为我应该知道的事情,请随意把它丢掉,或者如果我说错了,请纠正我!Java EE堆栈以及与它一起使用的所有部分至少可以说是令人生畏的.在我深入研究并开始构建任何东西之前,我只是希望能够很好地处理高级视图.

谢谢!

alp*_*ero 10

该图不是Java EE堆栈.

这可能有用(或不:):

  • Java EE是托管运行时系统.(LAMP没有这样的顾虑.)

  • Java EE使用组件 - 容器通用体系结构(LAMP未定义显式组件容器API)

  • 诸如JBoss,Glassfish等应用程序服务器提供Java EE容器.(Tomcat不支持完整的Java EE堆栈.Tomcat和Jetty仅提供Web容器(或每个最新规范的Web配置文件.))

  • 请注意,Java EE Web容器(Servlet)比完整的Java EE堆栈简单得多,但它们基于相同的架构方法.

  • Java EE的Web组件(基本上)是Servlet和Filters.在此体系结构之上构建了各种高阶框架(例如Faces).Java EE Web容器相对简单且非常有效.它是最接近LAMP的东西.

  • Java EE的企业组件(由诸如GlassFish之类的Java EE应用程序服务器支持)是各种类型的无状态,有状态和持久性组件(在Java领域中称为"Bean").

  • Hibernate是一个ORM,在完整Java EE(例如EntityBeans)的上下文中是多余的.通常,JPA与Web容器"Java EE"系统一起使用,以连接到后端JDBC兼容的RDMBS.Oracle,MySQL等等.

  • 您(和/或某些第三方库)提供组件.

  • 托管运行时主要关注处理事务完整性等"正交""企业""关注点",组件/应用程序编写者应该关注"业务逻辑".

  • Java EE管理组件的引用,事务边界,连接和生命周期.

  • 参考文献:使用语义引用通过名称空间机制JNDI和RMI在运行时查找; 和通过声明性部署描述符的依赖注入.

  • 生命周期:您的组件将具有正确的启动,工作和关闭阶段.您可以挂钩这些LC事件并在必要时参与(通常不是必需的).这种形式化的LC允许分布和缩放架构.

  • 连通性:广泛地解决传入(客户端)和内部(EIS)集成点.对于客户端,您有web/RMI/JMS等.这为您提供同步req/rep语义和异步fire and forget.对于后端(通常),JCA指定连接到其他系统的连接器.JPA是JCA的专门化(理论上不是实践),它专门用JDBC用户API来处理数据库EIS.

  • 事务:声明意味着将事务语义应用于组件的特定方法.这可以在设计时(通过注释)或在部署时(通过XML)完成.

部署包

Java EE系统通常打包为WAR(仅适用于Web)或EAR(适用于完整堆栈).

部署描述符

Java EE的最新规范支持使用合理默认值(或普通映射)的零配置操作.但是,重要的是要了解这是什么,在某些时候,任何严肃的Java EE应用程序都需要在某种程度上处理这些工件.(对于web.xml来说要容易得多,所以不要惊慌失措.)这是架构的一个关键方面.理解这一点,其他一切都很清楚.

Java EE使用间接使其神奇发生.这是这里要解决的问题:

我们有一些第三方编写的组件(前一段时间),我们需要在我们的应用程序中使用它们.部署描述符允许将应用程序特定语义(例如组件名称或其事务语义)映射到组件通用语义.例如,您可能希望将"Acme-Logger"公开为"My-Very-Own-Logger".您可以通过将所需的环境名称映射到组件的类来实现此目的.(原始组件可能有一个注释,声明其通用名称只是"the-logger").

实际上,Spring是由于创建和维护这些映射描述符的严重痛苦而产生的.同样,Spring是基于容器的系统的替代方法.

集装箱

从理论上讲,您应该能够将整个容器插入兼容服务器,但一般的想法是您正在为通用容器(例如Java EE容器)编写组件.无论如何,正如您所想象的那样,Java EE应用服务器的供应商并不太热衷于为堆栈提供可插入的容器API,因为它会使他们的产品成为完整的商品.

弹簧

Spring实际上是Java EE的反驳论文.它(或者是)是一个轻量级的容器系统来解决J2EE的难点(如果没有有效的工具,这是完全不合理的,考虑到精心设计的架构和部署仪式).实际上,Servlet前端和Spring容器是完整的Java EE堆栈的替代品.也就是说,它们可以共存.

Maven的

Maven是一个构建工具.还有蚂蚁.或者你可以跳上Gradle.存在Maven 原型,允许您轻松地开始使用基本的Java EE项目.


建议:

从(并坚持使用)Web容器子集开始.Jetty或Tomcat是容器/服务器的不错选择.

了解WEB-INF /和web.xml.编写一个简单的HTTPServlet扩展,并使用web.xml的功能.尝试设置过滤器,或将一些参数绑定到Web应用程序上下文中.掌握这些基础知识.其他一切都建立在这些之上.一切.

在servlet中,浏览提供的API.了解应用程序,会话和请求"上下文"之间的区别.Web层中的关键问题.了解如何重定向请求.获取http标头等.其他所有内容都基于这些.掌握这些基础知识.

让我们说你现在有了你的HelloWorld网络应用程序.下一步,尝试JPA并为项目添加持久性.在这里您可以尝试Spring/Hibernate/Tomcat教程示例.Spring将为您的业务组件(类)设置非Java EE容器.Hibernate将负责持久保存您的数据.执行此操作时会引入几个新工件.Spring相关的xml文件和JPA/Hibernate映射.了解这些以及它的全部内容.

你几乎完成.最后,让我们转向视图或演示文稿的问题.这就是Java(imo)很糟糕的地方,因为它太冗长了,而且这个层都是关于put widget的无意义重复,把widget放在那里等等.

在最简单(并且开箱即用)的情况下,您拥有基本的HTTPServlet,并能够发送您想要的任何内容.您可以在代码中编写html(一个非常糟糕的主意),或者使用模板方法(Velocity,FreeMarker),或者使用专门的组件进行演示:JSP,Faces等.实际上有几十个框架(和接近)表示层.

希望这有帮助.

  • 您丢失了堆栈的子集,即EJB.JEE的Web容器(实际上)也只为您提供基于HTTP的连接器(即没有RMI或JMS).通常情况下,这适用于大型应用程序子集.你在构建一个网络应用程序吗?除非您已指定JEE要求,否则请使用JEE-Web. (2认同)

duf*_*ymo 5

是的,您发布的图表令人生畏,但您无需使用所有这些内容.这不是全部必要的.

如果你是新手,请保持简单和积累.

这是最底层的必备物品:

  1. Servlet和JSP.这意味着在像Tomcat或Jetty这样的servlet/JSP引擎上进行部署.Servlet是HTTP侦听器,它处理传入的请求,与后端类协作以实现它们,并将响应路由到适当的下一个视图.
  2. JSP是一种用于生成HTML的模板解决方案.您应该只使用JSP标准标记库JSTL来编写它们.没有scriptlet.
  3. 用户界面的HTML,CSS和JavaScript.您需要这些用于基于Web的UI.
  4. 用于关系数据库访问的JDBC.

而已.你可以用这些方法走很长的路.

我喜欢春天,但是第一次吞下去是很多的.没有它的地方做一两个网站.你会更好地理解事物并欣赏Spring为你做的更多事情.

你不需要JSF.我认为这是一种衰落的技术.我个人看到的一个JSF/Faces应用程序绝对是免费的.你可以用日..加载页面.我不认为它是一个大赢家,尽管它被吹捧为Java EE标准.你会在移动UI上运行JSF吗?我不这么认为.

UI是使用HTML,CSS和JavaScript与后端服务进行通信编写的.这些服务可以是REST-ful servlet.

Hibernate是一种对象关系映射技术.如果您没有对象模型,则不需要Hibernate.如果对象和表之间有简单的一对一关系,则不需要Hibernate.如果您希望存储过程作为关系数据库的接口,则不需要Hibernate.如果您不介意编写一些SQL并映射结果,则不需要Hibernate.同样适用于JPA - Hibernate是实现JPA的一种方式,它从Hibernate中获得了很多.

从这些开始并建立起来.如果你试着学习所有你曾经引用过的东西,你就永远无法得到任何东西.