J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,下面对J2EE中的13种技术规范进行简单的描述(限于篇幅,这里只能进行简单的描述):
1:JDBC(Java Database Connectivity)
JDBC API为访问不同数据库提供了统一的路径,像ODBC一样,JDBC开发者屏蔽了一些细节问题,另外,JDBC对数据库的访问也具有平台无关性.
2:JNDI(Java Name and Directory Interface)
JNDI API 被用于执行名字和目录服务.它提供了一致的模型来存取和操作企业级的资源DNS和LDAP,本地文件系统,或应用服务器中的对象.
3:EJB(Enterprise JavaBean)
J2EE技术之所以赢得广泛重视的原因之一就是EJB.它提供了一个框架来开发和实施分布式商务逻辑,由此很显著的简化了具有可伸缩性和高度复杂的企业级应用程序的开发.EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用.容器负责提供公用的服务,例如目录服务,事务管理,安全性,资源缓冲池以及容错性.但这里值得注意的是,EJB并不是实现J2EE的唯一路径.正是由于J2EE的开放性,使得所有的厂商能够以一种和EJB平行的方式来达到同样的目地.
4:RMI(Remote Method Invoke)
远程方法请求,RMI协议调用远程对象上的方法.它使用了序列化的方式在客户端和服务器之间传递数据.RMI是一种被EJB使用的更底层的协议.
5:Java IDL/CORBA(通用对象请求代理架构是软件构建的一个标准 )
在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起.他们可以创建Java对象并使之可在CORBA ORB中展开,或者他们还可以创建Java类并和其它ORB一起展开的CORBA对象客户.后一种方法提供了另外一种途径,通过它Java可以被用于将你的新的应用程序和旧的系统集合在一起.
6:JSP
JSP页面由HTML(标准通用标记语言下的一个应用)代码和嵌入其中的Java代码组成.服务器在
页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端浏览器.
7:Java Servlet
Servlet 是一种小型的Java程序,它扩展了web服务器的功能.作为一种服务器的应用,当被请求时开始执行,这和CGI Perl脚本很相似.Servlet提供的功能大多和JSP类似,不过实现的方式不同.JSP通常是大多数的HTML代码中嵌入少量的Java代码,而servlet全部由java写成并且生成HTML.
8:XML
XML(标准通用标记语言的子集)是一种可以用来定其它标记语言的语言.它被用来在不同的商务过程中共享数据.XML的发展和java是相互独立的,但是,它和java具有的相同目标是平台独立性.
9:JMS
MS是用于和面向对象消息的中间件相互通信的应用程序接口.它既支持点对点的域,又支持发布/订阅类型的域,并且提供了下列类型的支持:消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持.JMS还提供了另一种方式来对新系统和旧后台系统相互集成.
10:JTA
JTA定义了一种标准API,应用程序由此可以访问各种事务监控.
11:JTS
JTS是CORBA OTS事务监控的基本实现.JTS规定了事务管理的实现方法.该事务管理器是在高层支持java Transaction API规范,并且在较低层次实现OMG OTS specification 和Java印象.JTS事务管理器为应用程序服务器,资源管理器,独立的应用以及同学资源管理器提供了事务服务.
12:JavaMail
JavaMail是用于存取邮件服务器的API,它提供了一套邮件服务器的抽象类.不仅支持SMTP服务器,也支持IMAP服务器.
13:JAF(JavaBeans Activation Framework)
JavaMail利用JAF来处理MIME编码的邮件附件.MIME的字节流可以被转换成java对象,大多数应用都可以不需要直接使用JAF。
名词解释
容器:充当中间件的角色。
WEB容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接与容器中的环境变量接口交互,不必关注其它系统问题。主要由WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。
WEB容器和EJB容器在原理上是大体相同的,更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量session,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。
RMI/IIOP:远程方法调用internet对象请求中介协议,他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。
JNDI:JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
JMS:JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
JAVAMAIL:JAVA邮件服务。提供邮件的存储、传输功能。他是编程中实现邮件功能的核心。相当MS中的EXCHANGE开发包。
JTA:JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
JAF:JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
EAI:企业应用集成。是一种概念,从而牵涉到好多技术。J2EE技术是一种很好的集成实现。
控制策略
J2EE事务并发访问主要可以分为两类,分别是同一个系统事务和跨事务访问的并发访问控制,其中同一个系统事务可以采取乐观锁以及悲观锁策略,而跨多个系统事务时则需要乐观离线锁和悲观离线锁。
乐观锁
乐观锁是在同一个数据库事务中我们常采取的策略,因为它能使得我们的系统保持高的性能的情况下,提供很好的并发访问控制。乐观锁,顾名思义就是保持一种乐观的态度,我们认为系统中的事务并发更新不会很频繁,即使冲突了也没事,大不了重新再来一次。它的基本思想就是每次提交一个事务更新时,我们想看看要修改的东西从上次读取以后有没有被其它事务修改过,如果修改过,那么更新就会失败。
因为乐观锁其实并不会锁定任何记录,所以数据库的事务隔离级别设置为读取已提交或者更低的隔离界别,那么是不能避免不可重复读问题的(因为此时读事务不会阻塞其它事务),所以采用乐观锁的时候,系统应该要容许不可重复读问题的出现。
一般可以采用以下三种方法:
版本(Version)字段:在我们的实体中增加一个版本控制字段,每次事务更新后就将版本字段的值加1.
时间戳(timestamps):采取这种策略后,当每次要提交更新的时候就会将系统当前时间和实体加载时的时间进行比较,如果不一致,那么就报告乐观锁失败,从而回滚事务或者重新尝试提交。采用时间戳有一些不足,比如在集群环境下,每个节点的时间同步也许会成问题,并且如果并发事务间隔时间小于当前平台最小的时钟单位,那么就会发生覆盖前一个事务结果的问题。因此一般采用版本字段比较好。
基于所有属性进行检测:采用这种策略的时候,需要比较每个字段在读取以后有没有被修改过,所以这种策略实现起来比较麻烦,要求对每个属性都进行比较,如果采用hibernate的话,因为Hibernate在一级缓存中可以进行脏检测,那么可以判断哪些字段被修改过,从而动态的生成sql语句进行更新。
在JDBC和Hibernate中使用乐观锁:
提交事务时,hibernate内部会生成相应的SQL语句将版本字段加1,并且进行相应的版本检测,如果检测到并发乐观锁定异常,那么就抛出StaleObjectStateException.
悲观锁
所谓悲观锁,顾名思义就是采用一种悲观的态度来对待事务并发问题,系统中的并发更新会非常频繁,并且事务失败了以后重来的开销很大,这样就需要采用真正意义上的锁来进行实现。悲观锁的基本思想就是每次一个事务读取某一条记录后,就会把这条记录锁住,这样其它的事务要想更新,必须等以前的事务提交或者回滚解除锁。
最后还是需要明确一个问题,假如数据库事务的隔离级别设置为读取已提交或者更低,那么通过悲观锁,控制了不可重复读的问题,但是不能避免幻影读的问题(因为要想避免我们就需要设置数据库隔离级别为Serializable,而一般情况下会采取读取已提交或者更低隔离级别,并配合乐观或者悲观锁来实现并发控制,所以幻影读问题是不能避免的,如果想避免幻影读问题,那么只能依靠数据库的serializable隔离级别(幸运的是幻影读问题一般情况下不严重)。
相关推荐
### J2EE 的 13 种核心技术解析 #### JDBC:数据库访问的桥梁 Java数据库连接(JDBC)是J2EE中的一项关键技术,它提供了一组标准的API,允许Java应用程序连接到各种关系型数据库管理系统(DBMS)。通过JDBC,...
J2EE的13种核心技术是支撑其功能的基础,包括: 1. **JDBC(Java Database Connectivity)**:JDBC是Java访问数据库的标准API,允许开发者用Java代码连接和操作各种数据库,提供了数据库独立性。 2. **JNDI(Java ...
本文解释支撑J2EE的13种核心技术:JDBC, JNDI, EJBs, RMI, JSP, Java servlets, XML, JMS, Java IDL, JTS, JTA, JavaMail 和 JAF,同时还将描述在何时、何处需要使用这些技术。当然,还介绍这些不同的技术之间是如何...
### j2ee13种核心技术解析 #### 一、引言 J2EE,即Java 2 Platform, Enterprise Edition,是Sun Microsystems推出的一套企业级Java应用开发平台标准。它集合了众多关键技术,旨在简化复杂的企业级应用开发,提供...
本文旨在深入解析支撑J2EE的13种核心技术,包括JDBC、JNDI、EJBs、RMI、JSP、Java servlets、XML、JMS、Java IDL、JTS、JTA、JavaMail和JAF,并探讨这些技术在实际应用场景中的交互作用。 #### JDBC(Java Database...
### J2EE的13种核心技术详解 #### 一、引言 随着互联网技术的快速发展,企业级应用的需求日益增长,Java2平台企业版(J2EE)作为一款优秀的开发平台,凭借其丰富的服务、应用程序接口(APIs)和协议支持,成为了...
### J2EE中的13种关键技术规范解析 #### 1. JDBC (Java Database Connectivity) JDBC,即Java数据库连接,是Java中的一项关键规范,它为开发者提供了与各种数据库进行交互的标准API。JDBC的引入极大地简化了数据库...
以下是对J2EE 13种核心技术的详细说明: 1. **JDBC (Java Database Connectivity)**:JDBC是Java访问数据库的标准API,允许开发者用Java代码与各种类型的数据库进行交互。 2. **JNDI (Java Naming and Directory ...
以下是J2EE的13种核心技术及其应用场景和相互关系: 1. **JDBC (Java Database Connectivity)**: JDBC是Java中用于连接数据库的标准API,允许开发者在Java应用中执行SQL语句,实现数据存取。 2. **JNDI (Java ...
### J2EE的13种技术规范详解 #### 1. JDBC (Java Database Connectivity) - **简介**:JDBC API是一组允许Java程序连接到多种数据库的接口集合,它为开发人员提供了一种统一的方式来访问关系数据库。通过JDBC,开发...
在J2EE的13种核心技术中,每一项都扮演着关键角色,共同构建了强大的企业级应用开发框架。以下是这些核心技术的详细说明: 1. **JDBC(Java Database Connectivity)**:JDBC是Java访问数据库的标准接口,允许Java...
本文将详细介绍J2EE中的13种关键技术,并探讨它们如何在实际应用中发挥作用。 #### 二、关键技术解析 1. **JDBC (Java Database Connectivity)** - **简介**:JDBC 是 Java 应用程序与各种关系型数据库进行通信的...
本文旨在详细介绍支撑 J2EE 的 13 种关键技术,包括 JDBC、JNDI、EJBs、RMI、JSP、Java servlets、XML、JMS、Java IDL、JTS、JTA、JavaMail 和 JAF,并探讨它们在实际应用场景中的作用及其相互之间的协作机制。...