org.jboss.arquillian.spring.persistence.datasource.ApplicationContextDataSourceProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.arquillian.spring.persistence.datasource.ApplicationContextDataSourceProvider.java

Source

/*
 * JBoss, Home of Professional Open Source
 * Copyright 2013, Red Hat Middleware LLC, and individual contributors
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * Licensed 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.jboss.arquillian.spring.persistence.datasource;

import java.util.logging.Level;
import java.util.logging.Logger;

import javax.sql.DataSource;

import org.jboss.arquillian.core.api.Instance;
import org.jboss.arquillian.core.api.annotation.Inject;
import org.jboss.arquillian.persistence.spi.datasource.DataSourceProvider;
import org.jboss.arquillian.spring.integration.context.RemoteTestScopeApplicationContext;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;

/**
 * <p>An implementation of {@link DataSourceProvider} that .</p>
 *
 * @author <a href="mailto:jmnarloch@gmail.com">Jakub Narloch</a>
 */
public class ApplicationContextDataSourceProvider implements DataSourceProvider {

    /**
     * The logger instance used by this class.
     */
    private static final Logger log = Logger.getLogger(ApplicationContextDataSourceProvider.class.getName());

    /**
     * <p>Instance of application context.</p>
     */
    @Inject
    private Instance<RemoteTestScopeApplicationContext> applicationContextInstance;

    /**
     * {@inheritDoc}
     */
    @Override
    public DataSource lookupDataSource(String dataSourceName) {

        try {

            // retrieves the application context
            return (DataSource) getApplicationContext().getBean(dataSourceName, DataSource.class);
        } catch (BeansException e) {

            log.log(Level.WARNING,
                    String.format("The data source with name '%s' could not be lookup due to an unexpected error.",
                            dataSourceName),
                    e);

            return null;
        }
    }

    /**
     * Retrieves the instance of the {@link ApplicationContext}
     */
    private ApplicationContext getApplicationContext() {

        return applicationContextInstance.get().getApplicationContext();
    }
}