JDBC高级特性3--JNDI,连接池,分布式事务

来源:互联网 发布:怎么查询端口是否开启 编辑:程序博客网 时间:2024/05/21 17:01

   System.out.print(rs.getInt(1)+"\t");

    System.out.print(rs.getString(2)+"\t");

   System.out.print(rs.getInt(3)+"\n");

 }

……conn.close();


分布式事务


1.      分布式事务

a)        事务

事务是指一个工作单元,它包含了一组添加,删除,修改等具有逻辑关系的多个操作,作为一个单元整体执行,这组命令要么都执行成功,要么全部恢复

JDBC默认事务是自动提交

conn.setAutoCommit(false);conn.commit();conn.rollback();

b)       分布式事务是指事务的参与者、支持事务的服务器、资源管理器以及事务管理器分别位于分布式系统的不同节点之上

在两个或多个网络计算机资源上访问并且更新数据

将对两个或多个网络计算机的数据进行的多次操作作为一个整体进行处理。如:不同银行账户之间转账

c)        一个分布式事务(distributed  transaction)包括一个事务管理器(transaction  manager)和一个或多个资源管理器(resource manager)

一个资源管理器(resource  manager)是任意类型的持久化数据存储(数据库)

事务管理器(transaction manager)承担着所有事务参与单元者的相互通讯的责任


2.      分布式事务处理

a)        分布式事务处理允许JDBC驱动程序支持两段式提交协议

阶段一:开始向事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来结束事务。如果任意一个资源决定结束事务,则整个事务取消,不会进行资源的更新。否则,事务将正常执行。为了防止发生资源更新失败,所有资源的更新都会写入到日志中。这些日志是永久性的,因此,这些日志在更新失败之后可以重新对所有资源进行恢复。(更新内存数据)

阶段二:只在阶段一没有异常结束的时候才会发生。此时,所有的资源管理器都开始执行真正的数据更新。 (更新数据库数据)

b)       分布式事务处理

JTA(Java Transaction APIJava事务API)

JTA允许应用程序执行分布式事务处理

支持JTAJDBC驱动程序极大地增强了数据访问能力

 

3.      分布式事务相关接口

a)        如果计划使用JTA来处理分布式事务,需要一个实现了以下接口的JDBC驱动

javax.sql.XADataSource:获得XAConnection对象的工厂

javax.sql.XAConnection:继承PooledConnection,为分布式事务提供支持,事务管理器(通常为中间层服务器的一部分)通过XAResource对象管理XAConnection对象

javax.sql.DataSource

实现了这些接口的驱动将能参与JTA分布式事务处理

b)       分布式事务基础架构包括

事务管理器

JDBC驱动程序支持JDBC高版本API

c)        分布式事务连接不支持JDBC的自动提交特性


4.      使用分布式事务

a)        代码

 

InitialContext  ctx = new InitialContext();

      Object txObj = ctx.lookup("java:comp/UserTransaction");

      UserTransaction  utx = (UserTransaction) txObj;       //分布式事务处理对象

      utx.begin();
// ...
DataSource  ds = obtainXADataSource();
Connection  conn =ds.getConnection();    //连接到数据库1
pstmt  = conn.prepareStatement(“update  movies ...”);
pstmt.setString(1,“Spinal Tap”);
pstmt.executeUpdate();
// ...

      DataSource  ds2 = obtainXADataSource();
Connection  conn2 =ds2.getConnection();     //连接到数据库2
pstmt2 = conn2.prepareStatement(“insert  movies...”);
pstmt2.setString(1, “test  string”);
pstmt2.executeUpdate();

      // ...
utx.commit();

b)       注意

 

当应用程序调用commit()时,事务管理器使用两段提交协议来结束事务。

 

 

 

Metadata(元数据)


1.      Metadata(元数据)

a)        元数据是关于数据本身的信息

数据格式或大小

b)       通过JDBC  API获取

数据库元数据(Database metadata)

结果集元数据(Resultset metadata)


2.      数据库元数据

a)        使用connection.getMetaData()方法获得数据库元数据

b)       方法返回数据库元数据引用(DatabaseMetaData)

元数据包括关于数据库的表、受支持的SQL语法、存储过程、此连接的功能等信息

c)        相关方法:

isReadOnly()判断此数据库是否处于只读模式

getDatabaseMajorVersion()检索底层数据库的主版本号

getDriverMajorVersion()检索此JDBC驱动程序的主版本号

getDriverName()检索此JDBC驱动程序的名称

getUserName()检索此数据库的已知的用户名称


3.      结果集元数据

a)        使用connection.getMetaData()方法获得数据库元数据

b)       方法返回数据库元数据引用(DatabaseMetaData)

元数据包括关于数据库的表、受支持的SQL语法、存储过程、此连接的功能等信息

c)        相关方法:

isReadOnly()判断此数据库是否处于只读模式

getDatabaseMajorVersion()检索底层数据库的主版本号

getDriverMajorVersion()检索此JDBC驱动程序的主版本号

getDriverName()检索此JDBC驱动程序的名称

getUserName()检索此数据库的已知的用户名称



知识点预览

 

 

对象关系映射

应用程序架构


对象关系映射


1.      对象关系映射

a)        数据库编程

关系是指目前最常用的关系型数据库:MySQL,Oracle……

需要将数据和对象进行相互转换

一般情况下,一行数据封装成一个对象

b)       在面向对象的模型中,数据是作为属性存储

有一个学生对象,有学号,姓名,年龄属性,这些属性值表达了一个学生信息

c)        在关系数据库中,数据用行存储

一个学生表,有学号,姓名,年龄列,一行数据就表示一个学生信息




d)       面向对象的类关系模型与数据库的表关系模型相映射

类的继承--表的关联

e)        对象关系映射

                                     i.             类关系映射到表及表关联

                                   ii.             属性映射到列

                                 iii.             对象映射到行

 

 



2.      将继承映射到关系

a)        表与抽象类映射

b)       表与具体类(非抽象类)映射

c)        一个表映射整个继承层次中的所有类


3.      表与抽象类映射

a)        映射1

 

 

 

b)       映射2

 

 


c)        特点:为抽象类创建映射表,通过主外键映射类关系

d)       优势

这种方式最符合面向对象的概念

支持多态

因为没有重复数据,所以容易维护

e)        缺点

需要维护多个表

需要更长时间来读取和写入表

直接从表生成报告不方便


4.      表与具体类映射

a)        映射

 


 

b)       特点:只对具体类映射到表,抽象父类中的属性在所有的具体子类映射表中去实现

c)        优势

可以直接从表生成报告

d)       缺点

如果修改数据,则必须修改相关的所有表

数据重复定义(冗余)


5.      一个表映射所有类

a)        映射

 

 

 


b)       特点:简单,一个表包含所有类的属性

c)        优势

模型很容易被理解

支持多态性

很容易从表直接生成报告

d)       缺点

数据库表可能变得非常大

很难应用数据库的约束规则

类中每次添加新属性,都需要更改数据库表

当添加一个新列时,需要更新所有记录这列的值

日常维护需要更多时间


6.      对象关系映射

a)        三种方式

                                     i.             表与抽象类映射

多个表关联,没有重复数据

                                   ii.             表与具体类映射

多个表没有关联,生成报告方便,数据冗余

                                 iii.             一个表映射所有类

只有一个表,维护困难,生成报告方便

b)       各有优缺点,根据需要选择


7.      Java与SQL数据类型映射

 

 

 


8.      表之间的关系

a)        数据库中通过外键保持表之间的关系

                                     i.             一对一关系

                                   ii.             一对多关系

                                 iii.             多对多关系

b)       一个表的外键是另一个表的主键

c)        对于一对一或一对多关系,使用一个表中的主键和其他表的外键相关联

 

 


9.      一对一关系

 

 


 

10.  映射到两个类的一个表

 

 

 

11.  一对多关系

 

 


 

12.  多对多关系

 

 


 

应用程序架构


1.      分层应用程序体系结构概述

a)        层是一个软件功能模块,提供功能完整的应用程序的某些部分

一个学生成绩管理系统可以分为:登陆部分,查询部分,访问数据库部分,成绩显示部分,数据库部分

登陆部分和成绩显示部分是学生可以直接看见的(显示层)

查询部分,访问数据库部分(业务层)

数据库(数据层)

各个部分可以在一台电脑中,也可以位于不同的电脑中;可以是桌面程序,也可以是WEB程序

b)       层一般是独立的,可以独立更新

逻辑意义上的独立:可以独立开发,可以独立更新,修改时相互不受影响,可以位于不同的电脑上

c)        可以使用层来协调多个客户端

每个客户端可以看做是一个层

d)       图示

 

 

 

2.      层和组件

a)        所有软件系统都可以划分成三个主要部分

b)       显示层— 接收数据处理请求并显示数据,通常在第一层

用户直接使用的层,用户通过显示层提交请求,展示结果

c)        业务逻辑层 — 实现业务规则

在两层结构中,处于第一层中

在三层或n层结构中,处于第二层中

业务逻辑处理(判断用户请求是否合理,编码转换等),数据访问

d)       数据层 — 存储并允许访问数据 ,通常是在第三层

数据库

e)        发展过程

两层结构三层结构n层结构


3.      两层架构

a)        除数据库以外,其他所有部分作为一个单独的层(客户端)

显示层与业务逻辑层合在一起作为一个单独的层

客户端负责显示数据,业务逻辑,错误检查…

服务器端只负责存储数据

主要部分全部集中在客户端,导致客户端很庞大

b)       这种体系结构是一种客户端/服务器结构(C/S结构)

C是指client—客户端

S是指server—服务器端

c)        图示

 

 


d)       优点

适用于小型应用程序,开发方便,开发周期短

如果客户增加,增加一个新的客户端就可以了

e)        缺点

客户端应用程序负责所有的错误检查,数据显示,业务逻辑等,过于庞大

在网络上,数据被暴露,客户端可以直接访问数据,安全性不高

数据库或表发生变化会导致客户端代码发生较大的改动

每个客户端需要安装驱动程序


4.      三层架构

a)        显示层—业务逻辑层—数据层

请求由显示层(客户端)发送到中间层(业务逻辑层)

中间层处理业务逻辑并将SQL语句发送到数据库

数据库处理SQL语句,并将结果发送回中间层

中间层将结果发送给用户(通过显示层显示)

b)       三层架构的重点是中间层(业务逻辑层)

中间层可以缓存数据,并管理业务规则

有专门处理业务规则的代码

允许数据库连接池

允许管理多个数据源连接

可以数据同步

简化了客户端开发

c)        图示

 

 


 

5.      N层架构

a)        N层体系架构扩展三层架构,将需要单独处理的功能独立出来作为一个新的层

一般是对业务逻辑层进行扩展

b)       将一个应用程序从水平或垂直方向划分为N层体系结构

水平划分:软件系统有一个发送短信的功能模块,获得客户端请求后,先通过发送短信的模块,然后交给后续的模块处理其他业务逻辑

垂直划分:软件系统中有一个打印报表的功能模块,可以不经过其他业务模块直接访问数据库获得数据打印报表,与其他业务功能是平行的

c)        图示

 

 

 


6.      三层和N层架构

a)        一般首选三层或n层架构

b)       优点

适合大型软件系统,

简化了大型软件系统的开发,降低了大型软件系统的开发难度

结构清晰,各部分作用明确

可以分模块更新,不会影响到其他模块

c)        缺点

三层或多层中故障点的数量可能会增加

整体应用程序复杂性增加


0 0
原创粉丝点击