* @return 连接管理器对象
*/
public static ConnectionManager getConnectionManager() {
if (connectionManager == null) {
try {
DataSource dataSource = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/mvc");
connectionManager = new ConnectionManager(dataSource);
} catch (NamingException e) {
e.printStackTrace();
}
}
return connectionManager;
}
/**
* 为测试初始化连接环境
*/
public static void initializeForTesting(String driverClassName, String url, String username, String password) {
if (connectionManager == null) {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
connectionManager = new ConnectionManager(dataSource);
}
}
}
DAO中可以通过ConnectionManager类完成连接对象的获取
[java]
package edu.softparty.mvc.dao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import edu.softparty.base.dao.RecordDAO;
import edu.softparty.base.dbunit.ConnectionFactory;
import edu.softparty.base.dbunit.ConnectionManager;
public class RecordDAOImpl implements RecordDAO {
// 连接管理器
private static final ConnectionManager manager = ConnectionFactory.getConnectionManager();
/**
* @see edu.softparty.base.dao.RecordDAO#getCount()
*/
public int getCount() throws SQLException {
final String sql = "select count(*) from mvc_demo";
ResultSet rs = null;
try {
stm = manager.getConnection().prepareStatement(sql);
rs = stm.executeQuery();
rs.next();
return rs.getInt(1);
} finally {
manager.release(rs, stm);
}
}
// …… 其它DAO操作
}
实现一个Servlet超类,即可对事务进行全程控制,在业务代码中只需要调用一次ConnectionManager类的beginTransaction方法启动事务即可
[java]
package edu.softparty.base.servlet;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import edu.softparty.base.bo.Result;
import edu.softparty.base.dbunit.ConnectionFactory;
import edu.softparty.base.dbunit.ConnectionManager;
/**
*
*/
public abstract class ServletSupport extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* 执行具体业务的方法
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public abstract Result execute(HttpServletRequest request, HttpServletResponse response) throws Exception;
/**
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see javax.servlet.ht