Java EE基础知识

Zac*_*Zac 26 java java-ee

我已经阅读了维基百科的文章.我浏览过Oracle教程.我用谷歌搜索,binged和雅虎,但仍然,我正在窒息Java EE(5+)的最基本的基础知识.

  1. 所有Java EE架构是否都必须涉及应用服务器,例如JBoss或GlassFish?从本质上讲,应用服务器的概念是Java EE的基础,为什么/为什么不呢?

  2. 除了应用程序服务器之外,还有Java EE体系结构所依赖的任何其他主要组件吗?如果是这样,它们是什么以及它们如何"嵌入"架构并与应用服务器相关?

  3. 我真的很讨厌EJB的概念.从一切我已经能够找到他们,我不知道如果EJB是规范开发者使用(其中与EJB规范遵守产生可以被称为"豆"的代码单元),或者如果它像任何其他Java库,如JDBCJMS.

    (a)在King's English中,没有使用先进的,已经知道的概念或营销流行语,什么是EJB?你能提供一些(一)EJB的快速和脏的例子吗?

    (b)EJB如何与应用程序服务器交互/交互?

    (c)什么是EJB"容器",它的作用是什么?

  4. 在我看来,有很多顶级组件构成了Java EE后端,而且对于每种类型的组件,有很多开源和闭源类型,你,系统工程师,必须从中选择.

    看到我对Java EE基础已经很困惑了,下面列出了我听说过的一些产品.我只是要求有人帮助我对这些产品进行分类,以便我能够看清楚它们是什么.例如,如果我列出"GlassFish"和"JBoss",那么它们可能会出现在"应用程序服务器"类别中.如果我列出"Tomcat"和"WebSphere",它们可能会出现在"Servlet Engines"等下面.

    列表:

    • JBoss的
    • Geronimo的
    • 码头
    • GlassFish的
    • Tomcat的
    • Spring RabbitMQ
    • 春天的GemFire
    • 春天的
    • Spring tc Server
    • 过冬

5. Java EE 6和Java EE 6"Web Profile"之间有什么区别?

Boz*_*zho 16

  1. 不可以.您可以在非应用程序服务器的容器中运行JavaEE的多个部分.Servlet/JSP/JSF可以在servlet容器上运行.JPA - 您可以使用任何设置.

  2. JavaEE"系列"的所有部分都可以独立使用,即在应用程序服务器之外.Servlet容器.JMS提供者.JTA经理.甚至是EJB容器.

  3. 版本3之前的EJB提供了一组接口,您应该实现这些接口,以便EJB容器管理您的类.从3.0开始,EJB规范主要定义了注释(从开发人员的角度来看).除此之外,它是关于EJB容器(应用程序服务器的一部分)应如何处理EJB的规范

  4. Glassfish,JBoss和Geronimo(以及其他一些)是功能齐全的应用服务器.Tomcat,Jetty和Spring tc服务器只是servlet容器 - 它们只处理JavaEE的servlet/jsp部分.它们可能具有其他功能(如tc服务器的企业监控功能).Hibernate是JPA的实现 - 对象关系映射(简而言之 - 您使用对象而不是JDBC).RabbitMQ是一个消息队列,我甚至不确定它是否符合JMS规范(JavaEE的一部分).GemFire与JavaEE无关

  5. "Web Profile"仅包含JavaEE的一些部分(Web应用程序中最常用的部分) - servlet,jsp,CDI,JPA,JSF,EJB(lite).它不包括JMS,JAX-WS等内容.下面列出了包含的内容以及Web配置文件中未包含的内容.这个想法是,即使一些应用程序服务器没有实现JavaEE中包含的所有规范,它们也将被认证.Caucho Resin将是一个仅支持Web配置文件的应用程序服务器.


Arj*_*jms 5

Bozho确实给出了一个很好的答案.有关Java EE的一些其他详细信息,我给另一个问题的以下答案可能是相关的:用于分层可重用架构的框架

您可能还想阅读我在维基百科上编辑的关于EJB的文章:http://en.wikipedia.org/wiki/Enterprise_JavaBean

在子问题3中添加一点:

您可以将EJB容器视为一种扩展JVM."普通"JVM提供自动管理Java类内存的服务.EJB容器提供其他服务,如自动管理事务和池.

要创建常规类,EJB非常简单.您只需添加@Stateless注释:

@Stateless 
public class SomeBean {

    // ... 

}
Run Code Online (Sandbox Code Playgroud)

在此之后,bean中的所有方法都是自动事务性的,并且SomeBean的实例会自动进行池化,而不是在需要时重新创建.

要意识到的一件重要事情是,这种"托管bean"无法使用常规new运算符进行实例化.它们必须通过注释注入.如果再次使用普通JVM的类比,可以说这个注释是一种"托管新运算符":

public class SomeOtherManagedBean {

   @EJB
   SomeBean someBean;
}
Run Code Online (Sandbox Code Playgroud)

问题是这里的注入仅适用于其他托管bean.在非托管环境中,您可以通过JNDI查找来引导实例.

在Java EE中,EJB bean传统上只包含纯业务逻辑.在Java EE的最新版本Java EE 6中,已经开始尝试将统一组件模型中的托管bean概念引入应用程序的所有部分.这是通过CDI规范完成的,CDI规范还定义了一个简单称为"托管bean"的组件类型.EJB模型最终可能会被改装为一组CDI注释.