大家好,最近由于公司碰到的bug很多,发送issue给海外的总公司很占项目的时间。
出于这样的考虑,我准备写一个基于web的bug管理,随着每个周的进度,我会将源码和设计思路写下来,给自己的知识备份,同时,希望大家给我一些建议,多多益善。这个项目的名字是我自己起的-----bugbox 。
1_ bugbox 功能的确定:
找方向,也就是需求的确定。这里的需求很简单,是跟同事们商量了一下做出的,用同事的话说:“作为一期的开发,只要实现几个简单的功能就可以了... ...”,那么简单点儿。
- 用户验证;
- 权限管理;
- bug浏览(包含bug的有条件过滤);
- bug的管理,包括添加、更改和删除,后两者操作需要权限;
- 全局管理,包含用户创建和删除,权限设定以及数据库设定等一些系统级的操作。
2_ 工具
NetBeans + Oracle9i使用struts,后台的连接数据库是自己写的class。
3_ 数据库设计
- Application表:存放项目信息,有ID主键app_id;
- Bug表:存放bug信息,以及bug解决方案的信息,当AppBugs表的isFix字段为"True"时,将自动更新Bug表的solution字段;
- AppBugs表:作为第一个transaction表,存放用户需要的Bug关联信息,如bug的检查者、报告者等信息;记录项将在Application表的IsClose字段设为"True"时自动清除;
- User表:用户信息,由于权限的使用不复杂,将一般的权限设置也放在这个表里;
- 数据库脚本:
---------------------------------BEGIN-----------------------------------
CREATE TABLE ESC_ADMIN.APPLICATION
(
APP_ID LONG UNIQUE,
APP_NAME NVARCHAR2(40) NOT NULL,
APP_DESIGNER NVARCHAR2(40) NOT NULL,
ISCLOSE NVARCHAR2(3) DEFAULT 'NO' NOT NULL,
APP_DESC NVARCHAR2(100),
CONSTRAINT PK_APPLICATION PRIMARY KEY (APP_ID )
);
CREATE TABLE ESC_ADMIN.BUGS
(
BUG_ID INTEGER,
BUG_NAME NVARCHAR2(40) NOT NULL,
BUG_TYPE NVARCHAR2(20),
BUG_DESC NVARCHAR2(100),
PROCESS INTEGER UNIQUE NOT NULL,
ISFIXED NVARCHAR2(3) DEFAULT 'NO' NOT NULL,
CONSTRAINT PK_BUGS PRIMARY KEY (BUG_ID )
);
CREATE TABLE ESC_ADMIN.APPBUGS
(
APP_ID INTEGER NOT NULL,
BUG_ID INTEGER NOT NULL,
REPORT_NUM INTEGER,
CHECKBY NVARCHAR2(40) NOT NULL,
CHECKDATE DATE NOT NULL,
REPORTBY NVARCHAR2(40) NOT NULL,
REPORTDATE DATE NOT NULL,
FIXEDBY NVARCHAR2(40) NOT NULL,
FIXEDDATE DATE NOT NULL,
RECHECKBY NVARCHAR2(40) NOT NULL,
RECHECKDATE DATE NOT NULL,
CHECKREASON NVARCHAR2(100),
CONSTRAINT PK_APPBUGS PRIMARY KEY (REPORT_NUM )
);
CREATE TABLE ESC_ADMIN.USERS
(
USER_ID INTEGER,
USER_NAME NVARCHAR2(40) NOT NULL,
USER_PASSWORD NVARCHAR2(8) DEFAULT 00000000,
USER_POWER INTEGER DEFAULT 0 NOT NULL,
USER_POWER_TEMP INTEGER,
ORG_ID NVARCHAR2(50) DEFAULT 'MY COMP',
SITE_ID NVARCHAR2(50) DEFAULT 'MY COMP',
CONSTRAINT PK_USERS PRIMARY KEY (USER_ID )
);
commit;
-------------------------------------END---------------------------------------
以上的操作可以在SQL-PLUS中导入脚本完成,细节不在此细说。
4_ 前言
这里不再详细讲述如何使用NetBeans,需要的话可以到一些技术网站查阅相应的文章,NetBeans很容易上手。
我以前使用的是eclipse,其实,工具就是工具而已,做web开发,建议使用Sun的产品。在开发web程序的时候,我不太喜欢插件满天飞的eclipse,虽然我是他的铁杆儿支持者。OK,书归正传,
1. 建立web应用程序,在next中点选struts框架,将他引用过来;
2. 如果你跟我一样是个菜鸟,不要将里面的index.jsp和welcomestruts.jsp文件删掉,这样你会得到一定的帮助;
3. 右键点击根,选择Deploy Project,看看tomcat是否可以正常工作。如果正常,可以在IE中输入http://localhost:8084/[your project name],你会看到index.jsp界面;
5_ 类的设计: 数据库连接类
在项目视窗中,找到source package,右键点击,加一个package:com.[your project name].database;
继续右键点击新建的package,加一个class文件,自己起个名儿吧。我这里就叫database.java
我定义了一个.properties文件,所有的DB的信息写在里面,使用database.class读取,从而得到数据库连接,具体的实现方法,使用InputStream类,下面是源码:
注:因为要进行测试,先写为绝对路径。
public Connection getConnection() throws SQLException, IOException{
Properties props = new Properties();
String filename = "c://DBConfig.properties";
InputStream in = new BufferedInputStream(new FileInputStream(filename));
props.load(in);
String drivers = props.getProperty("jdbc.drivers");
if(drivers != null){
System.setProperty("jdbc.drivers", drivers);
}
String url = props.getProperty("jdbc.url");
String username = props.getProperty("jdbc.username");
String password = props.getProperty("jdbc.password");
return DriverManager.getConnection(url, username, password);
}
配置文件项:
jdbc.drivers=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:MASTER
jdbc.username=esc_admin
jdbc.password=manager
这些将做成System Management的功能界面... ...