JNDI、连接池和三层架构

摘要:
useUnicode=true&characterEncoding=utf-8"/˃属性名称说明name指定Resource的JNDI名称auth指定管理Resource的Managertype指定Resource所属的Java类maxActive指定连接池中处于活动状态的数据库连接的最大数目maxIdle指定连接池中处于空闲状态的数据库连接的最大数目maxWait指定连接池中的连接处于空闲的最长时间2.在web.xml上配置resource-refjdbc/testjavax.sql.DataSourceContainer3.添加数据库驱动文件把数据库驱动jar文件,加入到Tomcat的lib中4.进行代码编写查找并获取数据源lookup()三层架构1.分层模式为什么使用分层页面展示和逻辑掺杂在一起阅读起来不清晰。

JNDI

1.什么是JNDI

Java Naming and Directory Interface,Java命名和目录接口

通过名称将资源与服务进行关联

2.JNDI的作用与优点

在应用与Java对象或资源之间建立松耦合的逻辑关联,简化应用对于资源的配置及维护工作

可以在更大范围、不同应用之间共享资源

3.配置JNDI

修改tomcatconfContext.xml文件

 <invironment name="tjndi"value="hello JNDI"type="java.lang.String" />

JNDI、连接池和三层架构第1张

获取页面 使用lookup进行查找

// javax.naming.Context提供了查找JNDI 的接口
Context ctx = new InitialContext();    
// java:comp/env/为前缀
String testjndi = (String) ctx.lookup("java:comp/env/tjndi");

连接池

1.什么是连接池

连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。

2.为什么使用连接池

传统数据库连接方式的不足
需要经常与数据库建立连接,在访问结束后必须关闭连接释放资源
当并发访问数量较大时,执行速度受到极大影响
系统的安全性和稳定性相对较差

3.连接池的原理

客户端向服务器端请求连接, 服务器端先看连接池中是否有空的连接,如果有空的连接就让该客户端连接, 如果没有空的连接,那就看现有连接数是否达到连接池限定的个数,如果没有达到就为该客户端创建一个连接,如果达到了那就让该客户端排队,等其他客户端断开连接了,就让该客户端连接。
连接池会设定一个等待时间,超过这个时间就就是连接超时了, 一般服务器性能和网速都会有影响。

JNDI、连接池和三层架构第2张

4.DataSource与连接池

javax.sql.DataSource接口的实现类
负责管理与数据库的连接
以连接池的形式对数据库连接进行管理

如何获取DataSource的实例

Tomcat支持将DataSource实现发布为JNDI资源
Web应用通过JNDI获得DataSource引用

JNDI、连接池和三层架构第3张

5.实现连接池实现与数据库的连接

1.配置Context.xml文件

JNDI、连接池和三层架构第4张

<Resource name="jdbc/test"auth="Container"type="javax.sql.DataSource"maxActive="100"maxIdle="30"maxWait="10000"username="用户名"password="密码"driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/数据库名?
              useUnicode=true&amp;characterEncoding=utf-8" />

属性名称

说明

name

指定ResourceJNDI名称

auth

指定管理ResourceManager

type

指定Resource所属的Java

maxActive

指定连接池中处于活动状态的数据库连接的最大数目

maxIdle

指定连接池中处于空闲状态的数据库连接的最大数目

maxWait

指定连接池中的连接处于空闲的最长时间

2.在web.xml上配置resource-ref

JNDI、连接池和三层架构第5张

<resource-ref>
        <res-ref-name>jdbc/test</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

3.添加数据库驱动文件

把数据库驱动jar文件,加入到Tomcat的lib中

4.进行代码编写 查找并获取数据源

lookup()

JNDI、连接池和三层架构第6张

三层架构

1.分层模式

为什么使用分层

页面展示和逻辑掺杂在一起阅读起来不清晰。编码职责不清,修改时互相影响,难以扩展和重用

2.三层架构

1.表示层:最外层,使用户直接能够访问,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作界面

2.业务逻辑层:业务逻辑层的主要功能就是提供对业务逻辑处理的封装,在业务逻辑层中,通常会定义一些接口,表示层通过调用业务逻辑层的接口来实现各种操作

3.数据访问层:数据访问层就是实现对数据的保存和读取操作,数据访问,可以访问关系数据库,文本文件或XML文档等

JNDI、连接池和三层架构第7张

3.层与层之间的关系

表示层依赖业务逻辑层,业务逻辑依赖于数据访问层各层之间的数据传递方向为请求与响应两个方向

JNDI、连接池和三层架构第8张

4.使用三层开发的原则

1.上层依赖其下层,依赖关系不跨层
表示层不能直接访问数据访问层
上层调用下层的结果,取决于下层的实现
2.下一层不能调用上一层
3.下一层不依赖上一层
上层的改变不会影响下一层
下层的改变会影响上一层得到的结果
4.在上一层中不能出现下一层的概念
分工明确,各司其职

5.分层开发的优势

1.职责划分清晰

2.复用代码,提高代码的使用效率

3.降低了系统内部的依赖程度

4.无损替换:不会降低代码执行效率

6.三层与两层的区别

两层:

JNDI、连接池和三层架构第9张

(当任何一个地方发生变化时,都需要重新开发整个系统。"多层"放在一层,分工不明确耦合度高——难以适应需求变化,可维护性低、可扩展性低)

三层:

JNDI、连接池和三层架构第10张

(发生在哪一层的变化,只需更改该层,不需要更改整个系统。层次清晰,分工明确,每层之间耦合度低——提高了效率,适应需求变化,可维护性高,可扩展性高)

综上,三层架构的优势:

  • 1,结构清晰、耦合度低
  • 2,可维护性高,可扩展性高
  • 3,利于开发任务同步进行, 容易适应需求变化

三层架构的优劣势:

  • 1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
  • 2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码
  • 3、增加了代码量,增加了工作量

总结:

JNDI、连接池和三层架构第11张

免责声明:文章转载自《JNDI、连接池和三层架构》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ubuntu12.04LTS安装以及卸载 QT4.8.6和QT creator2.5.2SparkSQL构建用户画像下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ASP.Net超时时间已到解决办法-

解决办法 1.在代码里面,把未关闭的连接关闭 2.扩大共享池,方法如下: 解决方法可以是修改连接池的连接生存期,因为默认值是60秒,即连接从应用程序被释放后可以在池中保存的时间。 具体操作步骤如下: 如果是ODBC的话,则可以在ODBC Data Source Administrator中手动更改,该程序位于“Start”菜单中的“Programs”-&g...

Hibernate用Mysql数据库时链接关闭异常的解决

在一个项目中,客户要求除操作系统外全部使用免费软件,因此我使用了Mysql 4.0作为数据库服务器,其JDBC驱动为3.0.9版本,在给客户安装后调试一切正常。可是到了第二天,只要一登录就提示“No operations allowed after connection closed”异常,显示在浏览器上。在经过一番检查后我发现,在这种情况下只要重新启动T...

mybatis深入之动态查询和连接池介绍

mybatis深入之动态查询和连接池介绍 一、mybatis条件查询 在mybatis前述案例中,我们的查询条件都是确定的。但在实际使用的时候,我们的查询条件有可能是动态变化的。例如,查询参数为一个user对象,要根据这个user对象进行查询,有可能要根据name属性进行查询,有可能是id属性进行查询,也有可能是根据id和name进行查询。这个时候我们就要...

JAVA中事物以及连接池

一、事物 什么是事物? 事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元。这些单元要么全都成功,要么全都不成功。 做一件事情,这个一件事情中有多个组成单元,这个多个组成单元要不同时成功,要不同时失败。A账户转给B账户钱,将A账户转出钱的操作与B账户转入钱的操作绑定到一个事务中,要不这两个动作同时成功,代...

commons-pool2 实现 sftp 连接池

简介 ssh 默认的连接数量有限,当大量请求连接 ssh 时会概率性连接失败甚至直接失败,因此需要对连接池化,当然如果不要求实时的话可以用生产者消费者。 了解 commons-pool2 依赖 <dependency> <groupId>org.apache.commons</groupId> <a...

jndi和jta事务

一般情况下,J2EE应用服务器支持JDBC事务、JTA事务、容器管理事务。这里讨论JTA和JDBC事务的区别。这2个是常用的DAO模式事务界定方式。 JDBC 事务 JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。例如如下片断:...