首先,感谢myoa的作者,为我们提供了这样一个学习ssh的例子程序。该例子请参考另一篇博文http://mimmy.iteye.com/admin/blogs/840621
由于我电脑上没有安装mysql,打算使用hsql来代替mysql,用hsql的好处是数据库可以随webapp一起启动,不用在启动应用前再手动启动数据库服务,很方便。
一、修改sql语句
用myoa提供的mysql数据库脚本生成的sql语句不符合hsql规范,需要将其进行转化。
比如,创建表:
CREATE MEMORY TABLE ADDRESS(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,USERNAME VARCHAR(20) DEFAULT '' NOT NULL,NAME VARCHAR(50) DEFAULT '' NOT NULL,SEX VARCHAR(10),MOBILE VARCHAR(20),EMAIL VARCHAR(50),QQ VARCHAR(20),COMPANY VARCHAR(100),ADDRESS VARCHAR(100),POSTCODE VARCHAR(10))
插入一条记录:
INSERT INTO USER VALUES(1,'admin','admin','abc@163.com')
初始数据库只需要.script和.properties文件就可以了,服务启动后自动生成.log等其他文件。
二、 加入jar
hsql需要提供hsqldb.jar,它又依赖javax.servlet.jar和commons-logging.jar两个包。
将这三个包复制到\WebRoot\WEB-INF\lib下面,然后刷新一下工程,就能自动导入到工程路径中了。
三、web.xml
修改web.xml,加入处理hsql服务启动监听
<context-param>
<param-name>hsql.dbPath</param-name>
<param-value>E:\Source\test\myoa\db</param-value>
</context-param>
<context-param>
<param-name>hsql.dbName</param-name>
<param-value>demo</param-value>
</context-param>
<context-param>
<param-name>hsql.port</param-name>
<param-value>9001</param-value>
</context-param>
<listener>
<listener-class>
com.demo.HsqlStartListener
</listener-class>
</listener>
HsqlStartListener.java
package com.demo;
import org.hsqldb.Server;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 该类的职责是在WebApp启动时自动开启HSQL服务。
* 依然使用Server方式,不受AppServer的影响。
* @author kiki1120
* @since 2010-12-14
*/
public class HsqlStartListener implements ServletContextListener {
private String path;
private String dbName;
private int port = -1;
/**
* Listener销毁方法,在Web应用终止的时候执行"shutdown"命令关闭数据库
*/
public void contextDestroyed(ServletContextEvent arg0) {
// 这里就不用说了,自然是关闭数据库操作
Connection conn = null;
try {
Class.forName("org.hsqldb.jdbcDriver");
StringBuilder url = new StringBuilder();
url.append("jdbc:hsqldb:hsql://");
url.append("localhost");
url.append(port == 9001 ? "" : ":" + port);
url.append("/").append(dbName);
conn = DriverManager.getConnection(url.toString(), "sa", "");
Statement stmt = conn.createStatement();
stmt.executeUpdate("SHUTDOWN;");
} catch (Exception e){
e.printStackTrace();
}
}
public void contextInitialized(ServletContextEvent sce) {
path = sce.getServletContext().getInitParameter("hsql.dbPath");
dbName = sce.getServletContext().getInitParameter("hsql.dbName");
try {
port = Integer.parseInt(sce.getServletContext().getInitParameter("hsql.port"));
}catch(Exception e){
port = 9001;
}
if (dbName == null || dbName.equals("")){
System.out.println("Cant’ get hsqldb.dbName from web.xml Context Param");
return;
}
File dbDir = new File(path);
if (!dbDir.exists()) {
// 判断目录是否存在
if (!dbDir.mkdirs()) {
// 如果不存在创建,如果创建失败直接返回
System.out.println("Can not create DB Dir for Hsql:" + dbDir);
return;
}
}
// 以下代码是做数据库恢复的。我们把原始的数据库放在classpath下,当启动web的时候,检查目标
// 数据库是否存在,如果不存在,就把原始数据库复制为指定的数据库
if (!path.endsWith("/")){
path = path + "/";
}
File scriptFile = new File(path + dbName + ".script");
File propertiesFile = new File(path + dbName + ".properties");
if (scriptFile.exists() && propertiesFile.exists()){
// 判断数据文件是否存在
startServer(path, dbName, port);
} else{
System.out.println("Connect failed:Connect Hsqldb error or database files not exits!");
}
}
/**
* 启动Hsqldb服务的方法
* @param dbPath 数据库路径
* @param dbName 数据库名称
* @param port 所使用的端口号
*/
private void startServer(String path, String dbName, int port) {
// 它可是hsqldb.jar里面的类啊
Server server = new Server();
server.setDatabaseName(0, dbName);
server.setDatabasePath(0, path + dbName);
if (port != -1){
server.setPort(port);
}
server.setSilent(true);
server.start();
System.out.println("hsqldb started…");
// 等待Server启动
try {
Thread.sleep(800);
} catch (InterruptedException e){
e.printStackTrace();
}
}
}
四、配置数据源
修改applicationContext.xml
<!-- 配置数据源 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name="url">
<value>jdbc:hsqldb:hsql://localhost/demo</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value></value>
</property>
</bean>
<!-- 配置Hibernate -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>com/demo/hibernate/beans/User.hbm.xml</value>
<value>com/demo/hibernate/beans/Address.hbm.xml</value>
<value>com/demo/hibernate/beans/Schedule.hbm.xml</value>
<value>com/demo/hibernate/beans/Worklog.hbm.xml</value>
<value>com/demo/hibernate/beans/Sms.hbm.xml</value>
<value>com/demo/hibernate/beans/Notice.hbm.xml</value>
<value>com/demo/hibernate/beans/Meeting.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.HSQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
现在启动tomcat看看吧。
另外,我在编译工程时发现了几个问题。
1、找不到junit.jar ,从eclipse中就能导进来;
2、有六个jsp出现红叉叉,打开检查,原来是form标签与table标签闭合顺序不一致,最好将form放到table的上层;
3、导入junit.jar仍然不能编译出class文件的话,我这里编写了一个ant自动编译脚本,执行它就能解决问题。
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="myoa" default="compile">
<property name="build.src" value="src" />
<property name="build.webroot" value="WebRoot/WEB-INF" />
<property name="build.output" value="${build.webroot}/classes" />
<target name="compile">
<javac encoding="utf-8" destdir="${build.output}" srcdir="${build.src}"
includeantruntime="false" includes="**/*.java" debug="on">
<classpath>
<fileset dir="${build.webroot}/lib">
<include name="*.jar"/>
</fileset>
</classpath>
</javac>
<copy todir="${build.output}">
<fileset dir="${build.src}">
<include name="**/*.xml"/>
<include name="**/*.properties"/>
</fileset>
</copy>
</target>
</project>
分享到:
相关推荐
一个OA项目,框架SSH 数据库是;mysql 前端是easy UI
ssh框架编写的oa系统,内含mysql数据库文件
临近年末,很多企事业单位都会赶工期上马一些信息化项目,而OA办公系统无疑是其中关注和采购的重点,那么如何选好OA办公系统呢?每个系统都有自己的优缺点,究竟该如何取舍呢?本文就为选型者提供一个实用的参考。
5、到D:\MYOA\BIN目录运行monitor.exe 并启动OA所有服务 6、检查OA所有服务是否正常开启。 7、在OA服务端上打开浏览器,输入http://localhost按提示升级(如果设置了端口的,末尾加上:端口号) 8、登录OA后按F5刷新...
MYOA2013ADV7.13.140226
工作流的起源以及发展作了简单的介绍,其中主要介绍了在工作流领域的 BPMN2.0 规范,BPMN2.0 规范为工作流应用提供了语言以及图形的标准,在 1.2 小节介绍 BPMN2.0 规范目标以及该规范的部分内容,在 1.3 小节讲述了...
这是我们在学习完javaWeb所做的一个小项目,内含需求分析,数据库的dbm,代码注释也是很多滴,大家可以下载来看看,里面还有一些功能没有做,以后慢慢完善吧
这是一款公司内部的OA办公管理系统,功能比较完整,界面无刷新, 该源码比较适合二次开发人员使用,有需要的朋友不要错过啊。
MYOA2010通达完整破解版本带通达精灵2
只是一个很好的权限管理模块,对于项目中的权限管理有很大的帮助,代码完整。
1,通达OA MYOA2013 6.7.13.315 分二个压缩文件 2,通达OA2013 V6.7.130315破解补丁 V3.5 3.6-报表注册 OA精灵 分三个文件上传 以上内容经过本人测试使用正常,到目录为止没发现过不良问题 使用系统 : windows ...
OA系统的单机版,Java制作,(使用ODBC)
传智播客的OA系统(改写版),使用Struts2,spring,hibernate,jbpm整合,系统包含了三大模块,分别是:系统管理,站内消息,审批流转。系统管理中还包含了权限分配,其中有很多技术点,比如,jquery的页面验证,强大的...
有关.net的资料,自己在网上下载的 希望对爱好.net的人士来说有帮助 1、本系统在 Windows 2003 Server/Windows xp ...2、文件夹.MyOA\DB\下为系统所需要的数据库脚本文件 3、管理员登录名及初识口令:super/1
数据库已经在里面了
我在网上找的通达OA2011破解版 ,具体版本是MYOA2011 5.0.110920,因为过大,我 分两次上传,另破解补丁也单传。我已经在我办公室电脑上测试用过。为完全破解版。望需要的用户下载,可以留言,但不要骂啊。这是第一...
这是一个标准的办公自动化系统,代码完整,可直接运行使用。
MYOA2010通达完整破解版本带通达精灵 安装时请把破解版本中的webroot\general\email 删除,不能覆盖安装文件中,否者通达精灵打不开邮件系统 注意:这个是其中一个压缩包
本章实现了办公自动化系统,通过该系统,公司不同角色的员工可以通过网路完成日常的办公,包括撰写报告、审阅公文等。另外,系统还将实现一个系统管理员角色,对整个系统进行动态的维护。