All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.javaclub.jorm.jdbc.batch.JdbcBatcherImpl Maven / Gradle / Ivy

/*
 * @(#)JdbcBatcherImpl.java	2011-8-21
 *
 * Copyright (c) 2011. All Rights Reserved.
 *
 */

package com.github.javaclub.jorm.jdbc.batch;

import java.sql.PreparedStatement;
import java.util.Set;
import java.util.Map.Entry;

import com.github.javaclub.jorm.Session;
import com.github.javaclub.jorm.jdbc.DBUtil;
import com.github.javaclub.jorm.jdbc.JdbcException;
import com.github.javaclub.jorm.jdbc.sql.SqlParams;
import com.github.javaclub.jorm.jdbc.sql.SqlPrepared;

/**
 * JdbcBatcherImpl
 *
 * @author Gerald Chen
 * @version $Id: JdbcBatcherImpl.java 2011-8-21 下午08:34:26 Exp $
 */
@SuppressWarnings("unchecked")
public class JdbcBatcherImpl extends SQLBatcherImpl implements JdbcBatcher {
	
	private final Object lock = new Object();
	
	protected boolean submit = false;
	
	public JdbcBatcherImpl() {
		super();
	}

	public JdbcBatcherImpl(Session session) {
		super(session);
	}
	
	public void save(Object obj) throws JdbcException {
		synchronized(this.lock) {
			session.getPersister().getIdentifierValue(obj);
			SqlParams sqlParams = session.getPersister().insert(obj);
			try {
				addBatch(sqlParams.getSql(false), sqlParams.getParams());
			} finally {
				sqlParams = null;
				System.gc(); 
				try {
					Thread.sleep(3L);
				} catch (InterruptedException e) {
				}
			}
		}
	}

	public void update(Object obj) throws JdbcException {
		SqlParams sqlParams = SqlPrepared.preparedUpdate(obj);
		try {
			addBatch(sqlParams.getSql(false), sqlParams.getParams());
		} finally {
			sqlParams = null;
		}
	}

	public void delete(Object obj) throws JdbcException {
		SqlParams sqlParams = SqlPrepared.preparedDelete(obj);
		try {
			addBatch(sqlParams.getSql(false), sqlParams.getParams());
		} finally {
			sqlParams = null;
		}
	}

	public boolean hadSubmit() {
		return this.submit;
	}

	public void execute() throws JdbcException {
		boolean commit = false, rollback = false;
		if(getAutoCommit()) {
			setAutoCommit(false);
			commit = true;
		}
		try {
			executeBatch();
			this.submit = true;
		} catch(Throwable t) {
			t.printStackTrace();
			rollback = true;
			if(commit) {
				rollback();
			}
			if(t instanceof JdbcException) {
				throw (JdbcException) t;
			} else {
				throw new JdbcException("");
			}
			
		} finally {
			if (commit) {
				if (!rollback) {
					commit();
				}
				setAutoCommit(true);
				if(LOG.isInfoEnabled()) {
					LOG.info("JDBC Batcher is executed.");
				}
			}
			Set> set = pstmts.entrySet();
			for (Entry entry : set) {
				DBUtil.closeQuietly(entry.getValue());
				pstmts.put(entry.getKey(), null);
			}
			pstmts.clear();
			DBUtil.closeQuietly(stmt);
			stmt = null;
		}
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy