做java开发已经有几年了,所面对的项目有大也有小,这些项目就整体上的设计方式无外乎就一种,那就是分层设计,一般分为dao,service,action这几层,有的项目结构为:dao,daoimpl,service,serviceimpl,action,看这些项目中都没有对异常进行很好的处理,一些项目几乎没有对异常信息进行过什么处理,而我认为,一个好的异常处理的设计对于提高开发效率是必不可少的,在项目完成后,出现问题也容易定位问题所在,下面给出我项目中采用的异常架构的处理,以部门信息为例:
dao接口,代码为:
/**
* 根据传入的部门主键查找对应的部门
* @param id部门的主键
* @return Department
*/
public Department findById(Long id) throws DepartmentDAOException;
daoimpl,代码为:
/**
* 根据传入的部门主键查找对应的部门
* @param id部门的主键
* @return Department
* @throws DepartmentDAOException
*/
public Department findById(Long id) throws DepartmentDAOException {
try {
return (Department)this.getSqlMapClientTemplate().queryForObject("Department.getDepartmentById", id);
} catch (Exception e) {
logger.serious(e.getMessage(), e);
throw new DepartmentDAOException("DepartmentDAOImpl.findById","DAOException",e);
}
}
service接口,代码为:
/**
* 根据传入的部门主键查找对应的部门
* @param id部门的主键
* @throws DepartmentServiceException
* @return DepartmentVO
*/
public DepartmentVO doFindById(Long id) throws DepartmentServiceException;
serviceimpl,代码为:
/**
* 根据传入的部门主键查找对应的部门
* @param id部门的主键
* @throws DepartmentServiceException
* @return DepartmentVO
*/
public DepartmentVO doFindById(Long id) throws DepartmentServiceException {
try {
Department pojo = departmentDAO.findById(id);
DepartmentVO vo = new DepartmentVO();
BeanUtils.copyProperties(vo, pojo);
return vo;
} catch (Exception e) {
logger.serious(e.getMessage(), e);//这个日志级别是自定义的,对log4j源码进行了修改
throw new DepartmentServiceException("DepartmentServiceImpl.doFindById","ServiceException",e);
}
}
自己包装了DepartmentDAOException,DepartmentServiceException,它们都继承自BaseException,BaseException又继承Exception,在打印异常信息时采用log4j不采用java里面的打印堆栈语句,这样做的好处是我们可以控制异常信息的打印与否,比如在给客户演示时,数据库里的数据不完整,我们并不希望客户看到这些信息,另一方面客户期望的是一个没有问题的系统,客户并不关心这些,我们可以通过这种方式不打印异常信息,只是把这些异常信息写入日志,过后我们检查日志,定位问题。
关于代码中使用的logger.serious,在log4j中并不存在,我是修改了源码,加入了一个日志级别,可以参考我的另一篇文章《为log4j增加日志级别》,下层的异常一层层向上抛,抛到action进行处理,写入日志或是通过struts进行处理等等,或许有人认为这样处理太麻烦了,麻烦是麻烦了点,不过带来的好处只在亲身体验过就知道了,当然这只是一种处理方法,不知道还是没有更好的处理办法
分享到:
相关推荐
《MICROSOFT.NET企业级应用架构设计》一书深入探讨了如何构建高效、可扩展且易于维护的企业级应用程序。本书旨在帮助具有坚实.NET基础的开发者和架构师提升其在软件设计与架构方面的专业能力。以下是对书中核心知识...
Java作为一种跨平台的编程语言,凭借其强大的功能和灵活性,在企业级应用开发中占据着举足轻重的地位。然而,面对大型、复杂的系统构建,单纯依赖Java语言显然力不从心。这促使了J2EE(Java 2 Platform, Enterprise ...
J2EE(Java 2 Platform, Enterprise Edition)是一套企业级应用的开发框架,包含了多种技术和API,如Servlets、JSP(Java Server Pages)、EJB(Enterprise JavaBeans)等,旨在简化大型分布式Web应用的开发过程。...
J2EE(Java 2 Platform, Enterprise Edition)是一种广泛应用于企业级应用开发的平台,它提供了丰富的API和服务,使得开发者能够构建高性能、可扩展性强的企业级应用程序。本系统采用了J2EE框架下的几种关键技术,...
9. **第16章 - 层次式架构设计**:层次式架构是常见的设计模式,章节内容包括各层的职责划分、垂直分层和水平分层的区别,以及如何通过层次化设计来优化系统性能和可维护性。 10. **第21章 - 案例研究**:最后,...
N-tier架构是一种分层式软件开发模式,它将应用程序分解为多个独立的层次或组件,每个层次负责不同的功能,从而实现模块化、可扩展性和可维护性。这种架构设计允许不同层次之间的解耦,便于在不影响其他部分的情况下...
从架构设计、技术选型到功能实现,整个过程都展现了Java EE 7平台在企业级应用开发中的优势,以及其在校园网内容管理系统领域的应用潜力。通过对这一系统的深入了解,可以为类似企业级应用的开发提供重要的参考和...
这些框架能够提供强大的功能,帮助构建稳定、高效的企业级应用。 #### 二、体系架构 ##### 2.1 SSH层 SSH框架主要由三个部分组成:Struts用于前端展示和控制流管理;Spring负责业务逻辑的组织和事务管理;...
J2EE架构设计是企业级Java应用程序开发的关键,它涉及多个层次和组件的协同工作,以构建高性能、可扩展和易于维护的系统。本讲座通过实例深入解析了Web项目的总体结构和多层架构的优点。 首先,J2EE架构设计的核心...
在企业级应用中被广泛使用。本章节不会对该框架做深入探讨,仅从基于角色的权限管理角度,来实现对系统的权限管理。 第12章 博客系统的整体框架实现 先对系统的整个界面、结构、布局、API进行实现,这样方便每个...
企业级应用的开发往往要遵循一些特定的设计模式和最佳实践,例如分层架构、服务导向架构(SOA)以及微服务架构等。 3. **Spring 3.x版本**:版本号说明这本书基于Spring框架的3.x系列版本进行讲解。Spring 3.x版本...
在企业级应用开发中,Spring、JavaServer Faces (JSF) 和 Enterprise JavaBeans 3 (EJB3) 是三个核心的框架和技术。这篇博客文章详细介绍了如何整合这些技术来构建高效且可扩展的企业应用程序。 首先,Spring 框架...
6. **JavaEE**:介绍Java企业版(JavaEE)架构,包括EJB、Struts、JSF、Spring和Hibernate等框架,用于构建企业级Web应用。 课程教学强调知识的整合和连贯性,避免了不同板块间的重复和浪费。学生需完成至少2/3的...
在企业级Java应用开发中,Enterprise JavaBeans(EJB)是核心组件之一,它为构建可扩展、安全和事务处理的分布式应用提供了框架。EJB规范定义了一组接口和API,允许开发者创建服务器端的业务逻辑,这些逻辑可以在...
### 集成Flex与J2EE的面向RIA+Web应用的研究与实现 #### 引言 随着企业信息化进程的推进,基于B/S(浏览器/服务器)模式的J2EE多层架构成为主流的Web应用...这一研究成果对于企业级Web应用开发具有重要的参考价值。
1. **软件工程基础**:在企业级开发中,良好的软件工程实践是必不可少的。这包括需求分析、系统设计、项目管理、版本控制(如Git)以及测试策略。了解如何有效地进行需求捕获和文档编写,运用模块化和分层设计原则,...
Spring是一个分层的JavaSE/EE应用框架,它的设计目的是为了解决企业级应用开发中的复杂性。Spring框架中的IoC容器负责管理对象的创建和依赖关系,从而实现了解耦合,简化了开发过程。AOP则允许开发者将横切关注点...