从一个莫名其妙的问题到项目管理
2012-08-14 13:03
246 查看
在项目开始时,我划分了任务,其中一个新人负责日志模块,主要职责是配置日志,提供一个统一的日志获取接口。
在项目中我们实现了一个公司自己的简单mvc框架(我们公司甚至不能用开源的框架)。本来已经相对稳定的框架突然之间出了一个奇怪的问题,每次http请求时,servlet都会做一遍init,servlet执行请求的过程也变得非常奇怪,一个实例变量controllerMetaMap在定义的时候已经初始化了,可在使用时却是null,这是个很匪夷所思的问题。首先,servlet全局只应该有一个而不是每个请求来都初始化,其次,实例变量使用时为空,除非我初始化失败了,可是没有异常。
从字面上就能看出来是存了properties文件,再一看,properties文件刚好就在web下面的classes文件夹。
导致上面奇怪问题的原因已经很清楚了,每次请求来,都会去初始化LogManager的静态初始化方法,而每次初始化会修改配置文件,从而导致tomcat重新load上下文,下次请求再来的时候,同样会初始化LogManager,因为整个project都被重新load了。
这个问题带来了很多反思。如何避免类似的问题,第一,对框架或者主要模块的代码所引用的模块应当引起充分的重视,在人员安排上适当注意,第二,不能避免的时候应当经常做code review以提高代码质量,这里是一个code review的check list,可以帮助我们很好的去做codereview。
在项目中我们实现了一个公司自己的简单mvc框架(我们公司甚至不能用开源的框架)。本来已经相对稳定的框架突然之间出了一个奇怪的问题,每次http请求时,servlet都会做一遍init,servlet执行请求的过程也变得非常奇怪,一个实例变量controllerMetaMap在定义的时候已经初始化了,可在使用时却是null,这是个很匪夷所思的问题。首先,servlet全局只应该有一个而不是每个请求来都初始化,其次,实例变量使用时为空,除非我初始化失败了,可是没有异常。
private static Map<String, ControllerMetaAttr> controllerMetaMap = new HashMap<String, ControllerMetaAttr>();经过多方调试,我发现一个奇怪的问题,每次请求来都会走进LogManager.getLogger()中,出来的时候,tomcat都会自动对context做reload,难道LogManager更改了web文件,导致了tomcat认为项目变更从而重新初始化context,带着这个疑问,我仔细review了LogManager,发现了一段代码。
static{ ... storeProperties(); ... }
从字面上就能看出来是存了properties文件,再一看,properties文件刚好就在web下面的classes文件夹。
导致上面奇怪问题的原因已经很清楚了,每次请求来,都会去初始化LogManager的静态初始化方法,而每次初始化会修改配置文件,从而导致tomcat重新load上下文,下次请求再来的时候,同样会初始化LogManager,因为整个project都被重新load了。
这个问题带来了很多反思。如何避免类似的问题,第一,对框架或者主要模块的代码所引用的模块应当引起充分的重视,在人员安排上适当注意,第二,不能避免的时候应当经常做code review以提高代码质量,这里是一个code review的check list,可以帮助我们很好的去做codereview。
相关文章推荐
- 问题 如何断开VS2012中与SVNServer的连接?让项目在SVN上重新建立一个版本管理。
- 软件项目管理问题分析
- 项目沟通管理与会议管理问题
- 项目开发和管理需要弄清楚的6个问题 (转)
- [项目管理]弱势项目管理与技术牛人的对抗问题延伸讨论
- 这些项目管理问题,你遇到过吗
- 跨文化团队的项目经理,采用什么冲突管理手段最有助于解决问题
- 项目管理---git----遇到问题------.gitignore不起作用
- 艾伟也谈项目管理,软件架构引言之项目管理的问题
- 关于VSS上的项目源码管理的注意问题
- Scrum项目管理的几个问题
- 项目开发和管理需要弄清楚的6个问题
- 新建maven管理的web项目,java目录不全的问题解决方法
- 关于Maven管理项目中引用子项目作为Jar包问题
- 使用Ant管理多项目时出现的无法打包问题记录
- 有spring管理的项目打成jar包无法扫描到注解的问题解决
- 项目开发和管理需要弄清楚的6个问题
- 开源的项目管理系统dotProject的汉化问题
- SVN对unity3d项目版本进行管理的不方便问题,研究ing
- 项目管理---git----遇到问题------.gitignore不起作用