Java EE基础知识

时间:2010-12-29 18:03:02

标签: java java-ee

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

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

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

  3. 我真的很讨厌EJB的概念。从所有我已经能够找到它们,我无法判断EJB是否是规范供开发人员使用(因此遵守EJB规范会产生一个单元)可以称为“bean”的代码,或者它与任何其他Java库一样,如 JDBC JMS

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

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

    (c)什么是EJB“容器”,它做了什么?

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

    看到我对Java EE基础已经很困惑了,下面列出了我听过的一些产品 关于。我只是要求有人帮助我对这些产品进行分类,所以我可以看到,很明显, 它们是什么。例如,如果我列出“GlassFish”和“JBoss”,那么它们可能会出现在类别中 “应用服务器。”如果我列出“Tomcat”和“WebSphere”,它们可能出现在“Servlet引擎”等下面。

    清单:

    • 的JBoss
    • Geronimo的
    • 码头
    • GlassFish的
    • Tomcat的
    • Spring RabbitMQ
    • Spring GemFire
    • Spring ers
    • Spring tc Server
    • 休眠

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

3 个答案:

答案 0 :(得分: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. 无关
  6. “Web Profile”仅包含JavaEE的一些部分(Web应用程序中最常用的部分) - servlet,jsp,CDI,JPA,JSF,EJB(lite)。它不包括JMS,JAX-WS等内容。Here是包含的内容以及Web配置文件中未包含的内容的表。这个想法是,即使一些应用程序服务器没有实现JavaEE中包含的所有规范,它们也将被认证。 Caucho Resin将是一个仅支持Web配置文件的应用程序服务器。

答案 1 :(得分:5)

Bozho确实给出了一个很好的答案。有关Java EE的一些其他详细信息,我给另一个问题的以下答案可能是相关的:Frameworks for Layering reusable Architectures

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

在子问题3中添加一点:

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

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

@Stateless 
public class SomeBean {

    // ... 

}

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

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

public class SomeOtherManagedBean {

   @EJB
   SomeBean someBean;
}

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

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

答案 2 :(得分:3)

Bozho对你的问题给出了很好的答案,所以我只想补充一点。

你挣扎的原因并不是因为他们很难学,因为有很多东西需要学习,而你正试图同时学习它们。如果你要一次学习一个,你会没事的。

最简单的入门方法是Servlet和JSP。大多数Java EE应用程序使用这些技术,新手开发人员将在大多数项目中获得这些任务,因此它们很实用。 Servlet和JSP是一种规范,它允许您主要生成具有动态(=可变)内容的网页。 Tomcat是一个Web容器,它实现了Servlet和JSP,并为Servlet和JSP组件提供了运行时环境。我推荐Tomcat,因为它是开源的,并且拥有最大的市场份额。

我推荐Marty Hall的Core Servlets和Javaserver Pages作为初学者的书。这是非常易读。