tomcat中数据连接池 配置
<Context path="/hibernate" docBase="E:/work_soft/hibernate"
debug="5" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log." suffix=".txt"
timestamp="true"/>
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/TestDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<!-- Maximum number of dB connections in pool. Make sure you
configure your mysqld max_connections large enough to handle
all of your db connections. Set to 0 for no limit.
-->
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<!-- Maximum number of idle dB connections to retain in pool.
Set to 0 for no limit.
-->
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<!-- Maximum time to wait for a dB connection to become available
in ms, in this example 10 seconds. An Exception is thrown if
this timeout is exceeded. Set to -1 to wait indefinitely.
-->
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<!-- MySQL dB username and password for dB connections -->
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value>root</value>
</parameter>
<!-- Class name for mm.mysql JDBC driver -->
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<!-- The JDBC connection url for connecting to your MySQL dB.
The autoReconnect=true argument to the url makes sure that the
mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
connection. mysqld by default closes idle connections after 8 hours.
-->
<parameter>
<name>url</name> <value>jdbc:mysql://localhost:3306/test?autoReconnect=true</value>
</parameter>
</ResourceParams>
</Context>
项目 web.xml 配置 +dwr的
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="dwr">
<display-name>DWR (Direct Web Remoting)</display-name>
<description>A Simple Demo DWR</description>
<listener>
<listener-class>org.directwebremoting.servlet.EfficientShutdownServletContextAttributeListener</listener-class>
</listener>
<listener>
<listener-class>org.directwebremoting.servlet.EfficientShutdownServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR Servlet</display-name>
<description>Direct Web Remoter Servlet</description>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>initApplicationScopeCreatorsAtStartup</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>maxWaitAfterWrite</param-name>
<param-value>500</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<resource-ref>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>hwl</res-auth>
</resource-ref>
</web-app>
hibernate.cgf.xml配置
<?xml version='1.0' encoding='GBK'?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 是否将运行期生成的SQL输出到日志以供调试 -->
<property name="show_sql">true</property>
<!-- SQL方言,这里设定的是MySQL -->
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
<!-- JDBC驱动程序 -->
<property name="connection.datasource">java:comp/env/jdbc/TestDB</property>
<!-- 指定User的映射文件 -->
<mapping resource="xj/hwl/bean/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
dwr配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="userac">
<param name="class" value="xj.hwl.action.UserAc"></param>
<include method="testSelect"/>
<include method="testInsert"/>
<include method="testUpdate"/>
<include method="testDelete"/>
</create>
<convert converter="bean" match="xj.hwl.bean.User">
<param name="include" value="id,username,password"></param>
</convert>
</allow>
</dwr>
index.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>
Hibernate JSP Test
</title>
<script type="text/javascript" src="./dwr/interface/userac.js"></script>
<script type="text/javascript" src="./dwr/engine.js"></script>
<script type="text/javascript" src="./dwr/util.js"></script>
<script type="text/javascript">
function init() {
dwr.util.useLoadingMessage();
fillTable();
}
var userCache = { };
var viewed = -1;
function fillTable() {
userac.testSelect(function(list) {
// Delete all the rows except for the "pattern" row
dwr.util.removeAllRows("userbody", { filter:function(tr) {
return (tr.id != "pattern");
}});
// Create a new set cloned from the pattern row
var user, id;
for (var i = 0; i < list.length; i++) {
user = list[i];
id = user.id;
dwr.util.cloneNode("pattern", { idSuffix:id });
dwr.util.setValue("tableUsername" + id, user.username);
dwr.util.setValue("tablePassword" + id, user.password);
$("pattern" + id).style.display = ""; // officially we should use table-row, but IE prefers "" for some reason
userCache[id] = user;
}
});
}
function editClicked(eleid) {
// we were an id of the form "edit{id}", eg "edit42". We lookup the "42"
var user = userCache[eleid.substring(4)];
dwr.util.setValues(user);
}
function deleteClicked(eleid) {
// we were an id of the form "delete{id}", eg "delete42". We lookup the "42"
var user = userCache[eleid.substring(6)];
if (confirm("Are you sure you want to delete " + user.username + "?")) {
dwr.engine.beginBatch();
userac.testDelete(user);
fillTable();
dwr.engine.endBatch();
}
}
function writePerson() {
var user = { id:viewed, username:null, password:null };
dwr.util.getValues(user);
dwr.engine.beginBatch();
if(user.id==-1){
userac.testInsert(user);
}else{
userac.testUpdate(user);
}
fillTable();
dwr.engine.endBatch();
}
function clearPerson() {
viewed = -1;
dwr.util.setValues({ id:-1, username:null, password:null });
}
</script>
</head>
<body οnlοad="init();">
<h3>All User</h3>
<table border="1" class="rowed grey">
<thead>
<tr>
<th>username</th>
<th>password</th>
</tr>
</thead>
<tbody id="userbody">
<tr id="pattern" style="display:none;">
<td><span id="tableUsername">Username</span><br/></td>
<td><span id="tablePassword">Password</span></td>
<td>
<input id="edit" type="button" value="Edit" οnclick="editClicked(this.id)"/>
<input id="delete" type="button" value="Delete" οnclick="deleteClicked(this.id)"/>
</td>
</tr>
</tbody>
</table>
<h3>Edit User</h3>
<table class="plain">
<tr>
<td>Username:</td>
<td><input id="username" type="text" size="30"/></td>
</tr>
<tr>
<td>Password:</td>
<td><input id="password" type="text" size="20"/></td>
</tr>
<tr>
<td colspan="2" align="right">
<small>(ID=<span id="id">-1</span>)</small>
<input type="button" value="Save" οnclick="writePerson()"/>
<input type="button" value="Clear" οnclick="clearPerson()"/>
</td>
</tr>
</table>
</body>
</html>
调用到的方法
package xj.hwl.action;
import java.util.List;
import junit.framework.Assert;
import net.sf.hibernate.Criteria;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Transaction;
import xj.hwl.bas.HibernateAc;
import xj.hwl.bean.User;
public class UserAc extends HibernateAc {
public void testInsert(User user){
try {
setSession();
Transaction tx = session.beginTransaction();
session.save(user);
tx.commit();
session.flush();
closeSession();
} catch (HibernateException e) {
e.printStackTrace();
}
}
public List testSelect(){
String hql= " from User";
System.out.println("===============");
try {
setSession();
List userList = session.find(hql);
Criteria criteria = session.createCriteria(User.class);
// 限定查询返回检索结果中,从第一百条结果开始的20条记录
criteria.setFirstResult(2);
criteria.setMaxResults(3);
userList=criteria.list();
closeSession();
return userList;
} catch (HibernateException e) {
e.printStackTrace();
return null;
}
}
public void testUpdate(User user){
try {
setSession();
Transaction tx = session.beginTransaction();
session.update(user);
tx.commit();
closeSession();
} catch (HibernateException e) {
e.printStackTrace();
}
}
public void testDelete(User user){
try {
setSession();
Transaction tx = session.beginTransaction();
session.delete(user);
tx.commit();
closeSession();
} catch (HibernateException e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
}