J2EE组件
J2EE 应用程序由组件构成。一个 J2EE 组件是自包含的,与其相关的语气它组件通信的类及文件集成到 J2EE 应用程序的功能软件单元。J2EE 规范定义了下面一些组件:
。 运行在客户端的应用客户程序及小程序。
。 运行于服务器网络 Servlet&Jsp 组件。
。 运行于服务端的企业逻辑组件 EJB。
容器: 管理着很多不可配置的服务,如企业 Bean 和 Servlet 的生命周期,数据库连接池, 数据持久化机制和 J2EE 平台 API 的访问权等等
J2EE server(J2EE服务器)
J2EE 产品的运行时服务部分。一个 J2EE 服务器提供 EJB 容器(EJB Container)和 Web 容 器(Web Container)。
EJB容器
管理 J2EE 应用程序中企业 Bean 的运行。企业 Bean 和它们的容器在 J2EE 服务其中运行。
Web容器
管理 J2EE 应用程序中 JSP 页面和 Servlet 组件的运行。Web 组件和容器也在 J2EE 服务其中运行
Application client container(应用程序客户端容器) 管理应用程序客户端组件的运行。应用程序客户端和它的容器运行在客户机。
Applet container(Applet容器)
管理 Applet的运行。由在客户端运行的浏览器和 Java 插件组成。
打包J2EE组件
J2EE 应用程序和它的所有模块都被打包到一个 EAR(Enterprise Archive)文件中。EAR 文件是后缀为.ear的标准 JAR(Java Archive)文件, 下面是这些打包文件的描述
EJB JAR 文件包含一个部署描述符文件,企业 Bean 文件和用到的其他文件
应用程序客户端 JAR 文件包含一个部署描述符文件,客户端类文件和其他用到的文件
WAR 文件包含一个部署描述符文件,Web 组件(JSP 和 Servlet)文件和用到的其他文件
一个事务属性可能有下面的属性之一:
required : 必须运行于事务中。如果有事务已在运行,则参与;否则新建事务。
requiredNew:总是创建新的事务,如果以及有事务那么挂起当前事务
mandatory:要求客户端必须启动事务,如果方法没有在事务中,那么抛出异常
NotSupported:不需要事务,如果在一个事务内调用该方法,那么先挂起客户端事务,为不需要事务的方法配制,提高性能
Supports:跟随客户端的事务。如果有事务在运行,则参与;否则不要求运行于事务中。
Never:不能参与到事务中去,如果启动事务,则报异常
JDBC 事务
JDBC 事务通过 DBMS 事务管理器来控制。你可能会为了使用会话 Bean 中的原有代码而采用 JDBC事务将这些代码封装到一个事务中。使用 JDBC 事务,要调用 java.sql.Connection 接口的 commit 和 rollback 方法。事务启动是隐式的。一个事务的从最近的提交、回滚或连接操作后的第一个SQL 的语句开始。(这个规则通常是正确的,但可能 DBMS厂商的不同而不同)
JDBC事务由Connnection管理,也就是说,事务管理实际上是在JDBC Connection中实现。事务周期限于Connection的生命周期之类。同样,对于基于JDBC Transaction的Hibernate 事务管理机制而言,事务管理在Session 所依托的JDBC Connection中实现,事务周期限于Session的生命周期。
JTA事务
JTA 事务被 J2EE 事务管理器管理。你可能需要使用一个 JTA 事务,因为它能够统一操作不同厂商的数据库。一个特定 DBMS的事务管理器不能工作在不同种类的数据库上。然而 J2EE事务管理器仍然有一个限制——它不支持嵌套事务。就是说,它不能在前一个事务结束前启动另一个事务。
生命周期,同样对于基于JTA事务的Hibernate而言,JTA事务横跨可横跨多个Session。JTA 事务是由JTA Container 维护,而参与事务的Connection无需对事务管理进行干涉。这也就是说,如果采用JTA Transaction,我们不应该再调用HibernateTransaction功能。
事务状态
事务超时
只有使用容器管理事务的企业 Bean 才会受到 transaction.timeout 属性值的影响。Bean 管理的 JTA事务使用 UserTransaction 接口的 setTransactionTimeout方法来设置事务超时间隔。
隔离级别
隔离程度越高,数据库并发性越差;隔离程度越低,数据库并发性越好。
1Read Uncommited: 将会出现脏读问题。如果不存在并发事务,且只有单个实例处于运行中,则比较适合。
2Read commited: 能解决脏读问题,适用于只需要从RDMBS中读取数据的应用,但不能解决不可重复读。Oracle, SQL Server 默认的级别
3Repeatable Read: 解决Drity Read和Unrepeatable问题
4Serializable: 这个完全串行化独占式操作数据库