001: /**********************************************************************************
002: * $URL:https://source.sakaiproject.org/svn/osp/trunk/warehouse/api-impl/src/java/org/theospi/portfolio/warehouse/impl/BaseWarehouseTask.java $
003: * $Id:BaseWarehouseTask.java 9134 2006-05-08 20:28:42Z chmaurer@iupui.edu $
004: ***********************************************************************************
005: *
006: * Copyright (c) 2005, 2006 The Sakai Foundation.
007: *
008: * Licensed under the Educational Community License, Version 1.0 (the "License");
009: * you may not use this file except in compliance with the License.
010: * You may obtain a copy of the License at
011: *
012: * http://www.opensource.org/licenses/ecl1.php
013: *
014: * Unless required by applicable law or agreed to in writing, software
015: * distributed under the License is distributed on an "AS IS" BASIS,
016: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: * See the License for the specific language governing permissions and
018: * limitations under the License.
019: *
020: **********************************************************************************/package org.theospi.portfolio.warehouse.impl;
021:
022: import java.io.InputStream;
023: import java.sql.Connection;
024: import java.sql.SQLException;
025: import java.util.Collection;
026:
027: import javax.sql.DataSource;
028:
029: import org.apache.commons.logging.Log;
030: import org.apache.commons.logging.LogFactory;
031: import org.quartz.JobExecutionException;
032: import org.theospi.portfolio.util.db.DbLoader;
033: import org.theospi.portfolio.warehouse.intf.ChildWarehouseTask;
034: import org.theospi.portfolio.warehouse.intf.DataWarehouseManager;
035: import org.theospi.portfolio.warehouse.intf.WarehouseTask;
036:
037: /**
038: * Created by IntelliJ IDEA.
039: * User: John Ellis
040: * Date: Nov 30, 2005
041: * Time: 4:51:05 PM
042: * To change this template use File | Settings | File Templates.
043: */
044: public abstract class BaseWarehouseTask implements WarehouseTask {
045:
046: protected final Log logger = LogFactory.getLog(getClass());
047:
048: private DataSource dataSource;
049: private ChildWarehouseTask task;
050: private String tableDdlResource;
051: private DataWarehouseManager dataWarehouseManager;
052:
053: public void execute() throws JobExecutionException {
054: Connection connection = null;
055:
056: try {
057: connection = getDataSource().getConnection();
058: connection.setAutoCommit(true);
059: task.prepare(connection);
060: task.execute(null, getItems(), connection);
061: } catch (SQLException e) {
062: throw new JobExecutionException(e);
063: } catch (JobExecutionException e) {
064: logger.warn("Error executing warehousing tasks", e);
065: throw e;
066: } finally {
067: if (connection != null) {
068: try {
069: connection.close();
070: } catch (Exception e) {
071: // can't do anything with this.
072: }
073: }
074: }
075: }
076:
077: /**
078: * This method loads the tables and registers the task.
079: *
080: * This function is called after the task bean properties have been set.
081: * Children are singletons where there bean init function is this method.
082: */
083: public void init() {
084: logger.info("init()");
085: Connection connection = null;
086: try {
087: if (getDataWarehouseManager().isAutoDdl()) {
088: InputStream tableDdl = getTableDdl();
089: if (tableDdl != null) {
090: connection = getDataSource().getConnection();
091: connection.setAutoCommit(true);
092: DbLoader loader = new DbLoader(connection);
093: loader.runLoader(tableDdl);
094: }
095: }
096: getDataWarehouseManager().registerTask(this );
097: } catch (SQLException e) {
098: throw new RuntimeException(e);
099: } finally {
100: if (connection != null) {
101: try {
102: connection.close();
103: } catch (Exception e) {
104: // can't do anything with this.
105: }
106: }
107: }
108: }
109:
110: public InputStream getTableDdl() {
111: if (getTableDdlResource() != null) {
112: return getClass()
113: .getResourceAsStream(getTableDdlResource());
114: }
115: return null;
116: }
117:
118: protected abstract Collection getItems();
119:
120: public DataSource getDataSource() {
121: return dataSource;
122: }
123:
124: public void setDataSource(DataSource dataSource) {
125: this .dataSource = dataSource;
126: }
127:
128: public ChildWarehouseTask getTask() {
129: return task;
130: }
131:
132: public void setTask(ChildWarehouseTask task) {
133: this .task = task;
134: }
135:
136: public String getTableDdlResource() {
137: return tableDdlResource;
138: }
139:
140: public void setTableDdlResource(String tableDdlResource) {
141: this .tableDdlResource = tableDdlResource;
142: }
143:
144: public DataWarehouseManager getDataWarehouseManager() {
145: return dataWarehouseManager;
146: }
147:
148: public void setDataWarehouseManager(
149: DataWarehouseManager dataWarehouseManager) {
150: this.dataWarehouseManager = dataWarehouseManager;
151: }
152: }
|