常见的中间件有哪些
常见的中间件有:我们经常管中间件叫做中间件服务器,也会叫作应用服务器。正常情况下一次web的访问顺序是:web浏览器---web服务器(W3的那个,非广义)---web容器---应用服务器---数据库服务器。
本地开发经常使用的应用服务器就是tomcat,linux系统经常使用的是jetty或apachehpptd,大型的项目就用的JBOSS或webloigc。
小项目,或者是个人开发tomcat大项目或者商业项目采用:weblgoic/webshere其他的还有jboss、glasshfish等,一些示例项目或者小项目常采用jetty。
Tomcat:是Sun的JSWDK(JavaServerWebDevelopmentKit)中Servlet的运行环境(servlet容器)。Tomcat是ApacheJakarta软件组织的一个子项目,Tomcat是一个JSP/Servlet容器,它是在SUN公司的JSWDK(JavaServerWebDevelopmentKit)基础上发展起来的一个JSP和Servlet规范的标准实现,使用Tomcat可以体验JSP和Servlet的最新规范。经过多年的发展,Tomcat不仅是JSP和Servlet规范的标准实现,而且具备了很多商业JavaServlet容器的特性,并被一些企业用于商业用途。
JBoss:是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web操作系统(operatingsystemforweb),它体现了J2EE规范中最新的技术
WebLogic服务器:是企业级的应用服务器,支持EJB,集群以及ERP(企业资源计划)的连通性,开发公司:BEA。
当今,用JAVA语言开发运行在服务器上的应用程序,必须遵循SUN公司提出的J2EE规范,也就是说,这种规范给出了在分布式环境下开发和部署面向“组件”的Java应用程序应当遵循的一些具体规则。该规范指出了如何开发、部署和集成应用程序“组件”的具体办法,这就是所谓的“放入J2EE平台”。
特别是J2EE规范描述了一种“J2EE服务器”的运行机理,“J2EE服务器”提供了一种执行环境和一些系统“服务”,例如,事务处理服务、保持服务、消息服务和安全服务等。“J2EE服务器”是一种符合J2EE规范的计算机抽象物,是Java应用程序的“活动场地”。
典型的J2EE应用程序由两部分构成:一是表现组件(也叫Web组件,Servlets与JSP);二是企业组件(EJB,EnterpriseJavaBeans),定义事务处理逻辑和应用数据。J2EE服务器提供两种“容器”,一种是负责处理Web组件;另一种是负责处理企业组件。
上面提及的JBOSS和JOnAS开源应用服务器是“J2EE服务器”,它们分别在2004年6月19日和2005年2月1日通过了J2EE测试认证。在J2EE服务器的发展史上,开放源码的“应用服务器”能够通过J2EE的性能测试并给予“认证”,确实是一件震动世界软件业的大事。开源应用服务器是开源中间件的集中体现,从此,对于开源中间件的各种怀疑论调都失去了根据。
J2EE可以说指Java在数据库信息系统上实现,数据库信息系统从早期的dBase、到Delphi/VB等C/S结构,发展到B/S(Browser浏览器/Server服务器)结构,而J2EE主要是指B/S结构的实现。J2EE又是一种框架和标准,框架类似API、库的概念,但是要超出它们。J2EE是一个虚的大的概念,J2EE标准主要有三种子技术标准:WEB技术、EJB技术和JMS,谈到J2EE应该说最终要落实到这三个子概念上。这三种技术的每个技术在应用时都涉及两个部分:容器部分和应用部分,Web容器也是指Jsp/Servlet容器,你如果要开发一个Web应用,无论是编译或运行,都必须要有Jsp/Servlet库或API支持(除了JDK/J2SE以外)。J2EE应用系统开发工具有很多:如JBuilder、Eclipse等,这些IDE首先是Java开发工具,也就是说,它们首要基本功能是可以开发出JavaBeans或Java class,但是如果要开发出J2EE系统,就要落实到要么是Web技术或EJB技术,那么就有可能要一些专门模块功能,最重要的是,因为J2EE系统区分为容器和应用两个部分,所以,在任何开发工具中开发J2EE都需要指定J2EE容器。J2EE容器分为WEB容器和EJB容器,Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器等,其中Web容器直接使用Tomcat实现的。所以你开发的Web应用程序可以在上面两种容器运行,而你开发的Web+EJB应用则只可以在JBoss服务器上运行,商业产品Websphere/Weblogic等和JBoss属于同一种性质。J2EE容器也称为J2EE服务器,大部分时它们概念是一致的。衡量J2EE应用系统设计开发水平高低的标准就是:解耦性;你的应用系统各个功能是否能够彻底脱离?是否不相互依赖,也只有这样,才能体现可维护性、可拓展性的软件设计目标。为了达到这个目的,诞生各种框架概念,J2EE框架标准将一个系统划分为WEB和EJB主要部分,当然我们有时不是以这个具体技术区分,而是从设计上抽象为表现层、服务层和持久层,这三个层次从一个高度将J2EE分离开来,实现解耦目的。因此,我们实际编程中,也要将自己的功能向这三个层次上靠,做到大方向清楚,泾渭分明,但是没有技术上约束限制要做到这点是很不容易的,因此我们还是必须借助J2EE具体技术来实现,这时,你可以使用EJB规范实现服务层和持久层,Web技术实现表现层;J2EE开发三件宝: Domain Model(域建模)、patterns(模式)和framework(框架)。从整体上讲,J2EE是使用Java技术开发企业级应用的一种事实上的工业标准(Sun公司出于其自身利益的考虑,至今没有将Java及其相关技术纳入标准化组织的体系),它是Java技术不断适应和促进企业级应用过程中的产物。Sun推出J2EE的目的是为了克服传统Client/Server模式的弊病,迎合Browser/Server架构的潮流,为应用Java技术开发服务器端应用提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的开发、管理和部署。J2EE是一个标准,而不是一个现成的产品。各个平台开发商按照J2EE规范分别开发了不同的J2EE应用服务器,J2EE应用服务器是J2EE企业级应用的部署平台。由于它们都遵循了J2EE规范,因此,使用J2EE技术开发的企业级应用可以部署在各种J2EE应用服务器上。为了推广并规范化使用J2EE架构企业级应用的体系架构,Sun同时给出了一个建议性的J2EE应用设计模型:J2EE Blueprints。J2EE Blueprints提供了实施J2EE企业级应用的体系架构、设计模式和相关的代码,通过应用J2EE Blueprints所描述的体系模型,能够部分简化架构企业级应用这项复杂的工作。J2EE Blueprints是开发人员设计和优化J2EE组件的基本原则,同时为围绕开发工作进行职能分工给出了指导性策略,以帮助应用开发设计人员合理地分配技术资源。
J2EE Java2平台企业版(Java 2 Platform,Enterprise Edition)
J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。
J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,导致企业内部或外部难以互通的窘境。
在J2EE架构下,开发人员可依循规范基础,进而开发企业级应用;而不同J2EE供货商,同会支持不同J2EE版本内所拟定的标准,以确保不同J2EE平台与产品之间的兼容性。换言之,植基J2EE架构的应用系统,基本上可部署在不同的应用服务器之上,无需或者只须要进行少量的代码修改,即能大幅提高应用系统的可移植性(Portability)。
J2EE主由升阳(SUN)与IBM等厂商协同业界共同拟定而成的技术规范,以企业与企业之间的运算为导向的JAVA开发环境。J2EE架构定义各类不同组件,如Web Component、EJB Component…等,而各类组件可以再用(reuse),让已开发完成的组件,或者是经由市面采购而得的组件,均能进一步组装成不同的系统。
对于开发人员而言,只需要专注于各种应用系统的商业逻辑与架构设计,至于底层繁琐的程序撰写工作,可搭配不同的开发平台,以让应用系统的开发与部署效率大幅提升。
J2EE的核心规范是 Enterprise Java Beans(EJBs)。EJB依照特性的不同,目前共分为三种,分别是Session Bean、Entity Bean,以及 Message Driven Bean 。其中 Session Bean 与Entity Bean 算是EJB的始祖,这两种EJB规格在EJB 1x版本推出时就已经存在,而Message Driven Bean则是出现在EJB 20的规格之中。
目前业界许多程序设计师,或者是网页设计人员,多利用JSP/Servlet的便利性,进而在J2EE服务器之上开发相关的应用,或是整合公司内部的各种资源。
Java 2平台依照应用领域的不同,共分为三大版本,分别是J2EE、标准版本J2SE(Java 2 Platform, Standard Edition)、微型版本J2ME(Java 2 Platform, Micro Edition),以及Java Card等。
从整体上讲,J2EE是使用Java技术开发企业级应用的一种事实上的工业标准(Sun公司出于其自身利益的考虑,至今没有将Java及其相关技术纳入标准化组织的体系),它是Java技术不断适应和促进企业级应用过程中的产物。Sun推出J2EE的目的是为了克服传统Client/Server模式的弊病,迎合Browser/Server架构的潮流,为应用Java技术开发服务器端应用提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的开发、管理和部署。J2EE是一个标准,而不是一个现成的产品。各个平台开发商按照J2EE规范分别开发了不同的J2EE应用服务器,J2EE应用服务器是J2EE企业级应用的部署平台。由于它们都遵循了J2EE规范,因此,使用J2EE技术开发的企业级应用可以部署在各种 J2EE应用服务器上。
为了推广并规范化使用J2EE架构企业级应用的体系架构,Sun同时给出了一个建议性的J2EE应用设计模型:J2EE Blueprints。J2EE Blueprints提供了实施J2EE企业级应用的体系架构、设计模式和相关的代码,通过应用J2EE Blueprints所描述的体系模型,能够部分简化架构企业级应用这项复杂的工作。J2EE Blueprints是开发人员设计和优化J2EE组件的基本原则,同时为围绕开发工作进行职能分工给出了指导性策略,以帮助应用开发设计人员合理地分配技术资源。
J2EE组成了一个完整企业级应用的不同部分纳入不同的容器(Container),每个容器中都包含若干组件(这些组件是需要部署在相应容器中的),同时各种组件都能使用各种J2EE Service/API。J2EE容器包括:
◆ Web容器 服务器端容器,包括两种组件JSP和Servlet,JSP和Servlet都是Web服务器的功能扩展,接受Web请求,返回动态的Web页面。Web容器中的组件可使用EJB容器中的组件完成复杂的商务逻辑。
◆ EJB容器 服务器端容器,包含的组件为EJB(Enterprise JavaBeans),它是J2EE的核心之一,主要用于服务器端的商业逻辑的实现。EJB规范定义了一个开发和部署分布式商业逻辑的框架,以简化企业级应用的开发,使其较容易地具备可伸缩性、可移植性、分布式事务处理、多用户和安全性等。
◆ Applet容器客户端容器,包含的组件为Applet。Applet是嵌在浏览器中的一种轻量级客户端,一般而言,仅当使用Web页面无法充分地表现数据或应用界面的时候,才使用它。Applet是一种替代Web页面的手段,我们仅能够使用J2SE开发Applet,Applet无法使用J2EE的各种Service和 API,这是为了安全性的考虑。
◆ Application Client容器 客户端容器,包含的组件为Application Client。Application Client相对Applet而言是一种较重量级的客户端,它能够使用J2EE的大多数Service和API。
通过这四个容器,J2EE能够灵活地实现前面描述的企业级应用的架构。
在View部分,J2EE提供了三种手段:Web容器中的JSP(或Servlet)、Applet和Application Client,分别能够实现面向浏览器的数据表现和面向桌面应用的数据表现。Web容器中的Servlet是实现Controller部分业务流程控制的主要手段;而EJB则主要针对Model部分的业务逻辑实现。至于与各种企业资源和企业级应用相连接,则是依靠J2EE的各种服务和API。
在J2EE的各种服务和API中,JDBC和JCA用于企业资源(各种企业信息系统和数据库等)的连接,JAX-RPC、JAXR和SAAJ则是实现Web Services和Web Services连接的基本支持。
J2EE的各种组件
我们就J2EE的各种组件、服务和API,进行更加详细的阐述,看看在开发不同类型的企业级应用时,根据各自需求和目标的不同,应当如何灵活使用并组合不同的组件和服务。
· Servlet
Servlet是Java平台上的CGI技术。Servlet在服务器端运行,动态地生成Web页面。与传统的CGI和许多其它类似CGI的技术相比,Java Servlet具有更高的效率并更容易使用。对于Servlet,重复的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并发访问的。
· JSP
JSP(Java Server Page)是一种实现普通静态HTML和动态页面输出混合编码的技术。从这一点来看,非常类似Microsoft ASP、PHP等技术。借助形式上的内容和外观表现的分离,Web页面制作的任务可以比较方便地划分给页面设计人员和程序员,并方便地通过JSP来合成。在运行时态,JSP将会被首先转换成Servlet,并以Servlet的形态编译运行,因此它的效率和功能与Servlet相比没有差别,一样具有很高的效率。
· EJB
EJB定义了一组可重用的组件:Enterprise Beans。开发人员可以利用这些组件,像搭积木一样建立分布式应用。在装配组件时,所有的Enterprise Beans都需要配置到EJB服务器(一般的Weblogic、WebSphere等J2EE应用服务器都是EJB服务器)中。EJB服务器作为容器和低层平台的桥梁管理着EJB容器,并向该容器提供访问系统服务的能力。所有的EJB实例都运行在EJB容器中。EJB容器提供了系统级的服务,控制了EJB 的生命周期。EJB容器为它的开发人员代管了诸如安全性、远程连接、生命周期管理及事务管理等技术环节,简化了商业逻辑的开发。EJB中定义了三种 Enterprise Beans:
◆ Session Beans
◆ Entity Beans
◆ Message-driven Beans
· JDBC
JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据库开发人员能够用标准Java API编写数据库应用程序。JDBC API主要用来连接数据库和直接调用SQL命令执行各种SQL语句。利用JDBC API可以执行一般的SQL语句、动态SQL语句及带IN和OUT参数的存储过程。Java中的JDBC相当与Microsoft平台中的 ODBC(Open Database Connectivity)。
· JMS
JMS(Java Message Service,Java消息服务)是一组Java应用接口,它提供创建、发送、接收、读取消息的服务。JMS API定义了一组公共的应用程序接口和相应语法,使得Java应用能够和各种消息中间件进行通信,这些消息中间件包括IBM MQ-Series、Microsoft MSMQ及纯Java的SonicMQ。通过使用JMS API,开发人员无需掌握不同消息产品的使用方法,也可以使用统一的JMS API来操纵各种消息中间件。通过使用JMS,能够最大限度地提升消息应用的可移植性。 JMS既支持点对点的消息通信,也支持发布/订阅式的消息通信。
· JNDI
由于J2EE应用程序组件一般分布在不同的机器上,所以需要一种机制以便于组件客户使用者查找和引用组件及资源。在J2EE体系中,使用 JNDI(Java Naming and Directory Interface)定位各种对象,这些对象包括EJB、数据库驱动、JDBC数据源及消息连接等。JNDI API为应用程序提供了一个统一的接口来完成标准的目录操作,如通过对象属性来查找和定位该对象。由于JNDI是独立于目录协议的,应用还可以使用 JNDI访问各种特定的目录服务,如LDAP、NDS和DNS等。
· JTA
JTA(Java Transaction API)提供了J2EE中处理事务的标准接口,它支持事务的开始、回滚和提交。同时在一般的J2EE平台上,总提供一个JTS(Java Transaction Service)作为标准的事务处理服务,开发人员可以使用JTA来使用JTS。
· JCA
JCA(J2EE Connector Architecture)是J2EE体系架构的一部分,为开发人员提供了一套连接各种企业信息系统(EIS,包括ERP、SCM、CRM等)的体系架构,对于EIS开发商而言,它们只需要开发一套基于JCA的EIS连接适配器,开发人员就能够在任何的J2EE应用服务器中连接并使用它。基于JCA的连接适配器的实现,需要涉及J2EE中的事务管理、安全管理及连接管理等服务组件。
· JMX
JMX(Java Management Extensions)的前身是JMAPI。JMX致力于解决分布式系统管理的问题。JMX是一种应用编程接口、可扩展对象和方法的集合体,可以跨越各种异构操作系统平台、系统体系结构和网络传输协议,开发无缝集成的面向系统、网络和服务的管理应用。JMX是一个完整的网络管理应用程序开发环境,它同时提供了厂商需要收集的完整的特性清单、可生成资源清单表格、图形化的用户接口;访问SNMP的网络API;主机间远程过程调用;数据库访问方法等。
· JAAS
JAAS(Java Authentication and Authorization Service)实现了一个Java版本的标准Pluggable Authentication Module(PAM)的框架。JAAS可用来进行用户身份的鉴定,从而能够可靠并安全地确定谁在执行Java代码。同时JAAS还能通过对用户进行授权,实现基于用户的访问控制。
· JACC
JACC(Java Authorization Service Provider Contract for Containers)在J2EE应用服务器和特定的授权认证服务器之间定义了一个连接的协约,以便将各种授权认证服务器插入到J2EE产品中去。
· JAX-RPC
通过使用JAX-RPC(Java API for XML-based RPC),已有的Java类或Java应用都能够被重新包装,并以Web Services的形式发布。JAX-RPC提供了将RPC参数(in/out)编码和解码的API,使开发人员可以方便地使用SOAP消息来完成RPC 调用。同样,对于那些使用EJB(Enterprise JavaBeans)的商业应用而言,同样可以使用JAX-RPC来包装成Web服务,而这个Web Servoce的WSDL界面是与原先的EJB的方法是对应一致的。JAX-RPC为用户包装了Web服务的部署和实现,对Web服务的开发人员而言,SOAP/WSDL变得透明,这有利于加速Web服务的开发周期。
· JAXR
JAXR(Java API for XML Registries)提供了与多种类型注册服务进行交互的API。JAXR运行客户端访问与JAXR规范相兼容的Web Servcices,这里的Web Services即为注册服务。一般来说,注册服务总是以Web Services的形式运行的。JAXR支持三种注册服务类型:JAXR Pluggable Provider、Registry-specific JAXR Provider、JAXR Bridge Provider(支持UDDI Registry和ebXML Registry/Repository等)。
· SAAJ
SAAJ(SOAP with Attachemnts API for Java)是JAX-RPC的一个增强,为进行低层次的SOAP消息操纵提供了支持。
企业级应用示例
下面我们通过假设一个企业应用的J2EE实现,来了解各种组件和服务的应用。假设应用对象是计算机产品的生产商/零售商的销售系统,这个销售系统能够通过自己的网站发布产品信息,同时也能将产品目录传送给计算机产品交易市场。销售系统能够在线接受订单(来自自己的Web网站或者来自计算机产品交易市场),并随后转入内部企业管理系统进行相关的后续处理。
参见图3,这个企业应用可以这种方式架构。该企业应用的核心是产品目录管理和产品定购管理这两个业务逻辑,使用EJB加以实现,并部署在EJB容器中。由于产品目录和定购信息都需要持久化,因此使用JDBC连接数据库,并使用JTA来完成数据库存取事务。
图3 J2EE应用示例
然后使用JSP/Servlet来实现应用的Web表现:在线产品目录浏览和在线定购。为了将产品目录发送给特定的交易市场,使用JMS实现异步的基于消息的产品目录传输。为了使得更多的其它外部交易市场能够集成产品目录和定购业务,需要使用Web Services技术包装商业逻辑的实现。由于产品定购管理需要由公司内部雇员进行处理,因此需要集成公司内部的用户系统和访问控制服务以方便雇员的使用,使用JACC集成内部的访问控制服务,使用JNDI集成内部的用户目录,并使用JAAS进行访问控制。由于产品订购事务会触发后续的企业ERP系统的相关操作(包括仓储、财务、生产等),需要使用JCA连接企业ERP。
最后为了将这个应用纳入到企业整体的系统管理体系中去,使用Application Client架构了一个管理客户端(与其它企业应用管理应用部署在一台机器上),并通过JMX管理这个企业应用。
EJB
EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序,类似微软的com技术。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。
EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。
在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。
1Session Bean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。
2Entity Bean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。
3MessageDriven Bean是EJB20中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态 Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。
EJB实际上是SUN的J2EE中的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品EJB是BEANS,BEANS是什么概念,那就是得有一个容纳她,让她可劲造腾的地方,就是得有容器EJB必须生存在EJB容器中这个容器可是功能强大之极!她首先要包装你 BEAN,EJB的客户程序实际上从来就不和你编写的EJB直接打交道,他们之间是通过HOME/REMOTE接口来发生关系的它负责你的BEAN的所有的吃喝拉萨睡,比如BEAN的持续化,安全性,事务管理
一什么是 EJB
一个技术规范:EJB 从技术上而言不是一种"产品"
EJB 是一种标准描述了构建应用组件要解决的:
可扩展 (Scalable)
分布式 (Distributed)
事务处理 (Transactional)
数据存储 (Persistent)
安全性 (Secure)
二Sun 对 EJB 的期望
提供一个标准的分布的、基于 OO 的组件架构
屏蔽复杂的系统级功能需求
Write once, run anywhere
与非 Java 应用之间的互操作能力
兼容 CORBA 标准
三为什么选择 EJB
EJB 服务器完成"繁杂"的工作:应用开发人员关注于业务逻辑的实现而不是底层的实现机制(类似于 4GL 语言设计的目标)
支持事务处理
多个业务操作同时成功,或全部失败
可以通过在代码外的描述来定义事务处理级别
可扩展性
EJB 可以根据您应用的增长而扩展
EJB 服务器往往还提供了负载均衡和
安全性:由 EJB 服务器提供资源的访问权限控制
四EJB 架构
为了满足架构的目标,规范中描述了
服务器 (Server)
容器 (Container)
类 (Class) 和实例 (Instance)
Home 和 Remote 接口
客户端 (Client)
五 简化的编程模型
关注于业务逻辑实现:EJB 负责生命周期 (lifecycle), 数据存储 (persistence), 事务处理语义 (transactional semantic), 安全(security),
通用的编程模型:各种服务的高层 API
Java 是其编程语言
EJB( 业务逻辑代码 ) 表示了与特定商业领域(例如银行、零售等行业)相适应的逻辑。它由
运行在业务逻辑层的 enterprise bean 处理。一个 enterprise bean 可以从客户端接受数据,对
它进行处理,并将其发送到企业信息系统层以作存储;同时它也可以从存储器获取数据,
处理后将其发送到客户端应用程序。
有三种类型的 enterprise beans:session beans、entity beans 和 message-driven beans。
Session bean 描述了与客户端的一个短暂的会话。当客户端的执行完成后,session bean 和
它的数据都将消失;与之相对应的是一个 entity bean 描述了存储在数据库表中的一行持久
稳固的数据,如果客户端终止或者服务结束,底层的服务会负责 entity bean 数据的存储。
Message-driven bean 结合了 session bean 和 Java 信息服务(JMS)信息监听者的功能,它允
许一个商业组件异步地接受 JMS 消息。
框架说白了就是JAVA工作者多年以来总结出的一些开发标准。让我们可以以成功的经验模式来开发我们自已的系统,一般使用框架的好处是
·在好的框架下,开发者只需要写一些必须的代码;他们不需要直接接触底层的API。 这一点很重要。
·经过良好设计的框架可以为程序提供清晰的结构并且提高程序的内聚性。好清晰的结构使得其他人可以更容易加入项目。
·一个容易使用的框架可以通过一些例子和文档为用户提供最佳实践。
·采用成功的框架的代码比自己的代码容易测试
J2EE本身提供了一些框架。比如, Enterprise Java-Beans (EJB) container或者 Servlet engine 而这些框架一般在中小工程中我们都不会使用,会让我们把大量的时间浪费在开发框架上。
而现在比较流行开源框架,主要是struts,hibernate,spring等
比如struts是在原有mvc基础上实现在代码分离等功能,非常好用。
而hibernate可以把我们的关系型数据库转换成我们在JAVA中的面像对像来使用。从而让我们在开发时不需要直接写SQL语句,比如databasegetName();就可以直接把数据库中的用户名取出来。
Spring
J2EE框架被大规模地运用到项目中,而项目总要负责这些框架以及自己业务代码的连接,使之真正融合到一起。Spring就是专注于这个问题的,它和Hibernate融合的很好。
正像我所写的一样,这三种框架在一起并不冲突,所以现在最常用的框架就是
struts+hibernate+spring就像我们盖房子一样,先把框架搭好,我们在在上面写代码就很规范。
唠栳叨叨的写这么多,只是我个人对框架的理解,JAVA是一个大的体系,想要完全了解还需要日久的积累。我能提供你的只有这么多了
一、准备篇
1 什么是J2EE?它和普通的Java有什么不同
答:J2EE全称为Java2 Platform, Enterprise Edition。
“J2EE平台本质上是一个分布式的服务器应用程序设计环境——一个Java环境,它提供了:
宿主应用的一个运行基础框架环境。
一套用来创建应用的Java扩展API。”(引自《J2EE服务器端高级编程》)
2 J2EE好学吗
答:J2EE是很多技术的集合体,并且还在成长中。
你会遇到很多专有名词:比如(X)HTML,Servlet/JSP,JDBC,JMS,JNDI,EJB,XML,Web Service。
尤其是XML和Web Service正在快速成长。幸运的是,你不需要等到学会所有技术后再开始编程。
大体上J2EE可以分成3个主要应用:Servlet/JSP,EJB,XML/Web Service 和一些支撑技术例如JDBC和JNDI。
你可以一个一个的学。
3 J2EE有什么用
答:用来建设大型的分布式企业级应用程序。或者用更时髦的名词说就是“电子商务”应用程序。
这些企业可能大到拥有中心数据库服务器,Web服务器集群和遍布全国的办公终端,也可能小到只不过想做一个网站。
4 学J2EE有前途吗
答:在这一市场目前只有一种技术可以和J2EE竞争,那就是Microsoft的NET。
相对来说NET要“新”一些而J2EE要“老”一些。
但是NET只能用于Windows平台(Microsoft声称要开发C#在Linux上的虚拟机但是尚未兑现该诺言),
考虑到Linux的发展势头,你可以相信NET不会一统天下。
5 据说J2EE的性能不如NET好,是真的吗
答:在Sun公司提供的样例程序Pet Store上,Microsoft声称不如相同的NET程序好。
而Sun公司反驳说这一程序不能真正体现J2EE的性能,并且指责Microsoft在数据库上做了优化。
作者没有学习过NET因而不能妄下断言。
无论如何,大型分布式程序中的性能瓶颈通常首先来自于错误的设计。
6 听你说了这么多,我想学着玩玩。
答:除非你想靠它当饭吃或者作为技术储备,否则请不要浪费你的时间。
Flash要好玩得多。计算机游戏就更加好玩了。
7 学习J2EE该怎么开始
答:首先,下载一个J2EE服务器。其次,去javasun下载J2EE的API。第三,找一本好的参考书。最后,找一个顺手的IDE。
J2EE服务器。你可以用Sun的J2EE SDK(免费),或者Weblogic(性能最好,但是太大,而且作者不推荐盗版行为),或者JBoss(免费,就是文档太少),或者JRun(开发版免费,作者用这个)。参考书作者感觉Wrox的《J2EE服务器端高级编程》不错,但是太老(作者手头的是2001年中文版)。你还需要去下载一些最新的技术资料(当然肯定是英文的)。
IDE如果你的机器配置够好(内存至少512M以上,256M或以下请勿考虑),可以用IBM的WSAD,不然就继续用Eclipse或者其他。
你也可以经常去水木清华的Java版逛逛,但是在发贴前先看看精华区里有没有你要的答案。
8 我下了一个J2EE服务器但是不会配置。
答:请认真阅读随机指导文档,不同的服务器的配置都不一样,作者爱莫能助。
9 我发现你没有提到Tomcat。
答:Tomcat只是一个Web服务器,更准确地说主要只是一个Web Container。
如果你想要学习EJB的话,Tomcat无法满足你的需要。
二、 Servlet/JSP篇
10 什么是Servlet
答:一个Servlet是一个Java类。它处理Http(s)请求并作出响应,包括返回一个HTML页面或转交给其他URL处理。
Servlet必须运行在一个Web Container例如Tomcat中。
Servlet必须是javaxservlethttpHttp Servlet的子类,
你可以继承doGet()或者doPost()方法,两者分别对应于Http(s)中的Get请求和Post请求。
11 我怎么获得Http请求里的参数
答:HttpRequest的()方法。例如:String paramValue = request("paramName");
12 我怎么返回结果
答:你可以利用相关API打开一个输出流,并向流中直接写入一个HTML页面。
但是作者完全不赞成这样做。一方面这样做会很罗嗦。
另一方面从Model-View-Controller模式(在《J2EE核心模式》中被归为Front Controller模式)的观点来看,
你应当提供一些HTML或者JSP作为视图(view),而Servlet则根据请求参数决定转到哪一个视图。
你可以利用response()方法或request()forward()方法来实现。
13 ()和forward()有什么不同
答:()是向浏览器发送一个redirect通知,浏览器重定向到新的URL。
而forward是在服务器端直接转到新的URL,对于浏览器是透明的。
前者浏览器的地址栏显示的是新的URL,后者浏览器的地址栏显示的是Servlet的URL。
因而当目标URL会自动刷新时,两者会造成一些差别。
14 我写了一个Servlet程序,怎么运行它
答:开发J2EE程序有一个部署(deploy)的概念,实际上是开发——部署——运行的三部曲。
大多数服务器支持Hot deploy。你只需要在相应的Application目录(具体路径依赖于服务器)下面
建立一个符合WAR或EAR格式(参见16,17)的目录,启动服务器,就可以通过浏览器访问了。
特别的,你的Servlet的class文件应当放在/WEB-INF/classes目录中。
注意J2EE SDK不支持Hot deploy,你需要通过它的deploy tool来部署。
Tomcat只支持WAR格式。
15 EAR和WAR有什么不同
答:EAR是一个完整的J2EE应用程序,包括Web部分和EJB部分。
WAR只是其中的Web部分。
16 EAR格式是怎样的
答:一个EAR可以包含任意多个WAR或EJB JAR,并且包含一个META-INF的目录。
在/META-INF中包含了一个applicationxml,其中描述了这个EAR包含哪些模块,以及安全性配置。
细节请看参考书。
17 WAR格式是怎样的
答:一个WAR包含一个WEB-INF的目录,这个目录下包含classes目录,lib目录和webxml。
/WEB-INF/classes存放按package组织的class文件,/WEB-INF/lib目录存放jar文件,
webxml描述了很多东西,请读参考书。
18 我的普通HTML文件应当放在哪里
答:放在除了/WEB-INF以外的其他地方。
19 我访问不到servlet,甚至连HTML文件都访问不到!
答:第一你没启动服务器。第二你敲错了端口。第三你没有正确配置context-path。
第四你的服务器不支持auto reload或者你关闭了这一选项,你得重启服务器。
第五确认你没有把HTML放在/WEB-INF目录下,那是访问不到的。
20 我能访问HTML但是访问不到servlet。
答:请检查你的webxml文件。确保你正确定义了和元素。
前者标识了一个servlet,后者将一个相对于context-path的URL映射到一个servlet。
在Tomcat中你可以通过/context-path/servlet/package/servletname的形式访问servlet,
但是这只是Tomcat的便捷访问方式,并不是正式规范。
细节请看参考书。
21 什么是JSP?它和Servlet有什么区别
答:你可以将JSP当做一个可扩充的HTML来对待。
虽然在本质上JSP文件会被服务器自动翻译为相应的Servlet来执行。
可以说Servlet是面向Java程序员而JSP是面向HTML程序员的,除此之外两者功能完全等价。
面对一个实习生,我的研究方向是大型的数据处理,分布式计算,中间件的hadoop,似乎是说我很感兴趣的话,中间件,直接问我,我的理解的中间件,我很少思考这样一个问题:中间件有自己的理解是硬件,操作系统和应用平台,可以屏蔽不同性质的操作系统。 一个完整的系统平台由一套,中间件通常集成,包括开发平台和运行平台。中间件这组,通常会是至少一个通信中间件。中间件是分布式系统中使用的一个概念。 中间件屏蔽了底层操作系统的复杂性,应用开发简单的统一。降低编程的复杂性(Hadoop是一个很好的例子),专注于自己的业务,没有程序在不同的系统上的软件移植和重复劳动,大大降低了技术负担。中间件把应用系统,而不是只是简单的开发,缩短开发周期,还减少了工作量的系统维护,操作和管理(这并没有觉得在hadoop直接写MPI程序,也可以运行不需要任何额外的维护,容错机制,Hadoop的声音,满足了这一点)。此外,还降低了电脑的整体成本投入。 中间件,以便为解决分布式异构分布式计算系统的问题比较困扰,不得不面对的一个问题。中间件提供了一个标准的程序接口和协议的应用程序调用,或更确切地说,是中间件服务过程调用的应用程序接口来完成的任务。 其中:特性的中间件 可以概括为如下: 1。满足大量的应用程序的需求 各种硬件和OS平台上运行 跨网络,应用或服务的硬件和OS平台的透明性,支持分布式计算 4支持标准协议的互操作性 5。支持标准接口的便携性 ,中间件成为许多标准化工作的重要组成部分。对于应用软件开发,中间件是操作系统和网络服务更为重要,中间件提供了一个相对稳定的高层应用程序接口定义,不管底层的计算机硬件和系统软件更换,只要将中间件升级更新并保持中间件的外部接口定义了相同的应用软件,几乎不需要任何,从而保护重要的企业应用软件开发和维护的投资。 :中间件的分类 在分布式环境中,中间件必须提供通信服务,我们调用这个服务平台,根据不同的目的和实现机制,可分为下列几大类: 远程过程调用(Remote Procedure Call,远程过程调用) 面向消息的中间件(面向消息的中间件) 对象请求代理(对象请求代理) 它们的功能: 第一:起来,提供不同形式的通讯服务,包括同步,排队订阅出版,广播,这些基本的通讯平台,可以建立各种框架,为应用程序提供服务,在不同领域的事务处理监视分布式事务处理访问对象交易经理OTM。 二:中间件本身定义的相应字段的应用程序的体系结构,标准的服务组件,用户只需告诉框架感兴趣的事件,然后提供处理这些事件的代码。当一个事件发生时,框架将调用用户代码。用户不必调用框架,用户程序不关心的框架结构,实施过程中,系统API调用,框架是负责基于中间件的应用程序开发完成后具有良好的可扩展性,可管理性,高可用性和可移植性。 21分类介绍: 211远程过程调用 Remote Procedure Call,远程过程调用是一种广泛使用的分布式应用程序的方法。应用程序使用RPC来“远程”执行一个不同的地址空间的过程中,从效果来看,执行相同的本地电话。 212面向消息的中间件 的MOM是可靠,高效的消息传递机制,独立于平台的数据交换和集成的分布式系统数据通信的基础上。通过提供消息传递和消息排队模型,它可以扩展的分布式环境中,进程间通信,并支持多种通讯协议,语言,应用程序,硬件和软件平台。流行的MOM中间件产品有IBM的MQSeries,:BEA MessageQ。 消息传递和排队技术有三个主要特点: 通信程序可以运行在不同的时间,程序是在网络上直接相互通话,而是间接地将消息放入消息队列,因为程序之间有没有直接的联系。因此,他们不被同时运行。到合适的队列中的消息,目标程序或根本不需要正在运行的运行,即使目标程序并不意味着他们应该立即处理该消息。 :复杂的应用程序的应用的结构上,图2是不具有约束力,通信处理不仅可以是一个之间的一一对应关系,并且也可以是一对一一对多和many-to-one上,或什至是的各种方法的组合。多种通信手段的构造函数不增加的应用程序的复杂性。 3。计划和网络复杂性的性隔离:程序会把消息放入消息队列,或删除的消息从消息队列中的沟通与此相关的所有活动,比如维护消息队列,维护之间的关系程序和重新启动网络和移动网络中的消息队列处理的任务的MOM不直接与其他程序调用,不涉及复杂的网络通信。 213对象请求代理 随着时代的发展对象技术与分布式计算技术,既能互相形成一个分布式对象计算,并发展成为当今软件技术的主流方向。 1990年底,对象管理集团OMG对象管理结构OMA(对象管理体系结构),对象请求代理(对象请求代理)是这个模型的核心组成部分。它的作用是提供一个通信框架,透明的请求异构分布式计算环境中传递对象。 CORBA规范包括了ORB的所有标准接口。 CORBA 11于1991年推出,定义了接口描述语言OMG IDL和支持的客户机/服务器对象特定的ORB互操作性API。 CORBA 20规范描述了不同厂商的ORB之间的互操作性。 对象请求代理(ORB)是对象总线,它在CORBA规范的核心,定义异构环境下对象透明的基本机制发送请求和接收响应,是一个客户机/服务器对象之间的关系建立中间件。 ORB允许向其他对象的对象的请求可以是透明的或接受的其他对象的响应,这些对象可以位于本地到远程机器上,也可以位于。可以实现ORB拦截请求调用,并负责寻找所请求的对象,传送参数,调用相应的方法,并返回结果。客户端对象在同一台服务器对象的沟通和激活机制或存储服务器对象,不知道,也不用知道服务器对象,它是什么语言,什么作业系统或其他系统组件不属于对象的接口。 这是值得注意的,客户端和服务器的角色,仅仅是用来协调对象之间的交互,根据不同的场合,在对象上的ORB可以是客户端,也可以是一个服务器,或者甚至两者。当对象发出请求时,它是在客户端的角色,当它接收到一个请求时,它是在一个服务器角色。大多数的对象都发挥客户端扮演的角色在服务器的角色。此外,没有一个是负责传输和服务器管理,客户端和服务器之间的直接连接对象请求ORB,因此,与RPC支持简单的客户机/服务器体系结构相比,ORB可以支持更加复杂的结构。 214事务处理监视器 事务处理监控程序(交易处理监视器)最早出现在大型机上,大规模事务处理环境中的可靠运行提供支持。随着分布式计算技术的发展,分布式应用系统需要大规模的事务处理,如大量的关键事务处理的商业活动。交易监控社会之间的客户端和服务器,事务管理和协调,负载平衡和故障恢复,以提高系统的整体性能。它可以被看作是事务处理应用程序的“操作系统”。一般来说,事务处理监视器具有以下特点: 流程管理,包括启动服务器进程,分配任务,监督其执行情况和负载平衡。 事务管理,即确保在其监测的原子性,一致性,独立性和持久性的交易。 在客户端和服务器之间的通讯管理提供了多种通讯机制,包括请求响应会话,排队,订阅发布和广播。 交易监控提供了大量的客户端,如飞机订票系统的服务。如果被分配给所需要的资源,然后为每个客户端的服务器,该服务器将被淹没(如在图2中所示)。但实际上,在相同的时间,并非所有的客户端需要请求服务,一旦客户端请求的服务,希望得到一个快速的反应。事务处理监视器操作系统之上提供一组服务,管理和分配相应的服务进程,使服务器可以有效地为大型客户提供服务,在有限的系统资源,客户端的请求。 :中间件的不足之处 最流行的中间件服务使用专有的API和专有的协议,使来自不同制造商的应用程序建立在一个单一的制造商的产品实现互操作性是困难的。一些中间件服务平台实现,从而限制了异构系统之间移植的应用。应用程序开发者建立自己的应用程序,这些中间件服务也需要承担相当大的风险,他们往往需要重写他们的系统,随着技术的发展。中间件服务的分布式计算的抽象程度提高,应用程序开发人员需要面对很多困难的设计选择,例如,开发人员还需要在客户端和服务器端的功能分配决定的分布式应用程序。通常是指客户端的显示设备上的服务,方便的使用数据服务的服务器上关闭到数据库中,但它并非总是如此,更何况其他应用程序是如何分配的,它是不容易的确定。
0条评论