使用分层实现业务处理


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

 

数据库连接池的运行机制

1)  程序初始化时创建连接池
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,结构清晰、耦合度低,2,可维护性高,可扩展性高;3,利于开发任务同步进行;容易适应需求变化

 

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

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

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

 

猜你喜欢

转载自blog.csdn.net/weixin_40544803/article/details/80535374