/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache 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.apache.org/licenses/LICENSE-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 org.apache.ode.scheduler.simple; import javax.sql.DataSource; import javax.transaction.TransactionManager; import org.apache.geronimo.connector.outbound.GenericConnectionManager; import org.apache.geronimo.connector.outbound.connectionmanagerconfig.LocalTransactions; import org.apache.geronimo.connector.outbound.connectionmanagerconfig.PoolingSupport; import org.apache.geronimo.connector.outbound.connectionmanagerconfig.SinglePool; import org.apache.geronimo.connector.outbound.connectionmanagerconfig.TransactionSupport; import org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTracker; import org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinator; import org.apache.geronimo.transaction.manager.RecoverableTransactionManager; import org.apache.ode.utils.GUID; import org.tranql.connector.jdbc.JDBCDriverMCF; public class GeronimoDelegateSupport extends DelegateSupport { private static final int CONNECTION_MAX_WAIT_MILLIS = 30000; private static final int CONNECTION_MAX_IDLE_MINUTES = 5; private GenericConnectionManager _connectionManager; public GeronimoDelegateSupport(TransactionManager txm) throws Exception { super(txm); } @Override protected void initialize(TransactionManager txm) throws Exception { _ds = createGeronimoDataSource(txm, "jdbc:h2:mem:" + new GUID().toString(), org.h2.Driver.class.getName(), "sa", ""); setup(); _del = new JdbcDelegate(_ds); } private DataSource createGeronimoDataSource(TransactionManager txm, String url, String driverClass, String username,String password) { TransactionSupport transactionSupport = LocalTransactions.INSTANCE; ConnectionTracker connectionTracker = new ConnectionTrackingCoordinator(); PoolingSupport poolingSupport = new SinglePool(1, 1, CONNECTION_MAX_WAIT_MILLIS, CONNECTION_MAX_IDLE_MINUTES, true, // match one false, // match all false); // select one assume match _connectionManager = new GenericConnectionManager( transactionSupport, poolingSupport, null, connectionTracker, (RecoverableTransactionManager) txm, getClass().getName(), getClass().getClassLoader()); JDBCDriverMCF mcf = new JDBCDriverMCF(); try { mcf.setDriver(driverClass); mcf.setConnectionURL(url); if (username != null) { mcf.setUserName(username); } if (password != null) { mcf.setPassword(password); } _connectionManager.doStart(); return (DataSource) mcf.createConnectionFactory(_connectionManager); } catch (Exception ex) { throw new RuntimeException(ex); } } }