使用分层实现业务处理

匿名 (未验证) 提交于 2019-12-03 00:22:01


JNDI简介

JNDI的全称是Java命名与目录接口(Java Naming and Directory Interface),是一个有关应用程序设计的API,为开发人员提供了查找和访问各种命名与目录服务的通用,统一的接口。

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

JNDI的作用与优点

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

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

JNDI的简单应用

Tomcat\conf\context.xml文件

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

<Environment>元素用于配置命名的值,所配置的值作为环境条目资源,对整个Web应用可见,它包含的属性有name,type,value。

name:环境条目的名称,相对于java:comp/env的名称。

type:环境条目的Java类名的全称。

value:通过JNDI context请求时,返回给应用的参数值,该值必须转换成type属性定义的Java类型。

lookup()进行查找

// javax.naming.Context提供了查找JNDI 的接口  Context ctx = new InitialContext();	//初始化Context对象  // java:comp/env/为前缀  String testjndi = (String) ctx.lookup("java:comp/env/tjndi");//调用lookup()方法  out.print("JNDI: " + testjndi);

JNDI的基本步骤

1)配置资源

2)通过Context的lookup()方法查找资源

数据库连接池

Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。

传统数据库连接方式的不足

需要经常与数据库建立连接,在访问结束后必须关闭连接释放资源

当并发访问数量较大时,执行速度受到极大影响

系统的安全性和稳定性相对较差

数据源与连接池

javax.sql.DataSource接口的实现类

Java程序访问数据库时只需从连接池中取出空闲状态的数据库连接,当程序访问数据库结束时,再将数据库连接返回给连接池,这样做可以提高数据库的效率。


2) 使用时向连接池申请可用连接
3) 使用完毕,将连接返还给连接池
4) 程序退出时,断开所有连接,并释放资源

JNDI资源

Tomcat支持将DataSource实现发布为JNDI资源

Web应用通过JNDI获得DataSource引用

javax.naming。Context的lookup()方法查找JNDI Resource的接口,例如:可以通过以下代码获得名称为jdbc/news的数据源

//初始化上下文  Context ctx=new InitialContext();  //获取与逻辑名相关联的数据源对象  DataSource ds=(DataSource)ctx.lookup(“java:comp/env/jdbc/news”);

DataSource对象后,可以通过DataSource的getConnection()方法来获得数据库连接对象

Connection conn=ds.getConnection();

Connection的close()方法及时将Connection返回给数据库连接池,使Connection恢复空闲状态。

1.conntext.xml文件的配置

<Context>     <Resource name="jdbc/news" auth="Container" type="javax.sql.DataSource"        maxActive="100" maxIdle="30" maxWait="10000" username="newsu"        password="123456" driverClassName="com.mysql.jdbc.Driver"        url="jdbc:mysql://127.0.0.1:3306/newsmanagersystem?                useUnicode=true&characterEncoding=utf-8" />  </Context>

DataSource对象Resource元素属性

属性名称

说明

name

指定Resource的JNDI名称

auth

指定管理Resource的Manager

type

指定Resource所属的Java类

maxActive

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

maxIdle

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

maxWait

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

2.web.xml文件的配置

a)添加数据库驱动文件

jar文件,加入到Tomcat的lib中

b)配置应用程序的web.xml文件

web.xml中配置<resource-ref>

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

jdbc/news

JNDI的名字,与<Resource>元素中的name一致

javax.sql.DataSourc

<Resource>元素中的type一致

Container

Manager与<Resource>元素中的auth一致

resource-ref元素的属性

属性

说明

description

对所引用资源的说明

res-ref-name

指定所引用资源的JNDI名字,与<Resource>元素中的name属性对应

res-type

指定所引用资源的类名字,与<Resource>元素中的type属性对应

res-auth

指定管理所引用资源的Manager,与<Resource>元素中的auth属性对应

JNDI获得数据源对象时的步骤

1)配置conntexrt.xml文件

2)配置web.xml文件。

3)添加数据库驱动

4)编写代码,使用lookup()方法获得数据源对象

1、上一层依赖其下一层、依赖关系不跨层

2、下一层不能调用上一层

3、下一层不依赖于上一层

4、在上一层中不能出现下一层的概念

1,23

1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。

2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码

3、增加了代码量,增加了工作量

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!