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

metridoc.camel.component.sqlplus.SqlPlusConsumer.groovy Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2010 Trustees of the University of Pennsylvania Licensed under the
 * Educational Community License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License. You may
 * obtain a copy of the License at
 *
 * http://www.osedu.org/licenses/ECL-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an "AS IS"
 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
package metridoc.camel.component.sqlplus

import org.apache.camel.impl.DefaultConsumer

import org.apache.camel.Processor
import javax.sql.DataSource
import groovy.sql.Sql
import java.sql.Statement
import java.sql.ResultSet
import java.sql.Connection

/**
 * Created by IntelliJ IDEA.
 * User: tbarker
 * Date: 8/4/11
 * Time: 3:40 PM
 */
@Mixin(SqlPlusMixin.class)
class SqlPlusConsumer extends DefaultConsumer {

    Boolean release = false
    ResultSet resultSet
    SqlUnManagedResultSet sqlUnManaged

    SqlPlusConsumer(SqlPlusEndpoint endpoint, Processor processor) {
        super(endpoint, processor)
    }

    SqlUnManagedResultSet getSqlUnManaged() {

        if(sqlUnManaged) {
            return sqlUnManaged
        }

        sqlUnManaged = new SqlUnManagedResultSet(getDataSource())
        sqlUnManaged.withStatement {
            it.setFetchSize(fetchSize)
        }

        return sqlUnManaged
    }

    String getTableQuery() {
        def result = query
        if (!result.startsWith("select")) {
            result = "select * from ${query}"
        }

        return result
    }

    @Override
    protected void doStart() {
        super.doStart()
        def sql = getSqlUnManaged()
        String command = getTableQuery()
        sql.query(command) {ResultSet resultSet ->
            def exchange = endpoint.createExchange()
            exchange.in.setBody(resultSet)
            def processor = getProcessor()
            processor.process(exchange)
        }
    }

    @Override
    protected void doStop() {
        getSqlUnManaged().close()
    }
}

class SqlUnManagedResultSet extends Sql {

    Connection connection
    Statement statement
    ResultSet results

    SqlUnManagedResultSet(DataSource dataSource) {
        super(dataSource)
    }

    /**
     * overrides the default implementation so that the {@link ResultSet} does not get closed too early
     * @param connection
     * @param statement
     * @param results
     */
    @Override
    protected void closeResources(Connection connection, Statement statement, ResultSet results) {
        this.connection = connection
        this.statement = statement
        this.results = results
    }

    @Override
    void close() {
        super.closeResources(connection, statement, results)
        super.close()
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy