Package org.apache.sirona.tomee.agent.validation

Source Code of org.apache.sirona.tomee.agent.validation.TomEEValidationFactory

/*
* 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.sirona.tomee.agent.validation;

import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
import org.apache.openejb.assembler.classic.ResourceInfo;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.spi.ContainerSystem;
import org.apache.sirona.configuration.Configuration;
import org.apache.sirona.status.Validation;
import org.apache.sirona.status.ValidationFactory;

import javax.naming.Context;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;

public class TomEEValidationFactory implements ValidationFactory {
    private static final Logger LOGGER = Logger.getLogger(TomEEValidationFactory.class.getName());

    @Override
    public Validation[] validations() {
        final Collection<Validation> validations = new LinkedList<Validation>();

        if (Configuration.is(Configuration.CONFIG_PROPERTY_PREFIX + "tomee.validations.activated", true)) {
            final Context jndiContext = SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext();
            final OpenEjbConfiguration configuration = SystemInstance.get().getComponent(OpenEjbConfiguration.class);

            for (final ResourceInfo o : configuration.facilities.resources) {
                boolean resource = false;
                for (final String type : o.types) {
                    if (type.toLowerCase(Locale.ENGLISH).contains("datasource")) {
                        resource = true;
                        break;
                    }
                }

                if (resource && !o.id.endsWith("NonJta")) { // NonJta are automatically created when missing and are a copy of the jta one
                    final String jndi;
                    if (o.id.startsWith("java:global")) {
                        jndi = o.id;
                    } else {
                        jndi = "openejb:Resource/" + o.id;
                    }


                    try {
                        final DataSource ds = DataSource.class.cast(jndiContext.lookup(jndi));
                        String validationQuery = o.properties.getProperty("ValidationQuery");
                        if (validationQuery == null || validationQuery.trim().isEmpty()) {
                            Connection c = null;
                            try {
                                c = ds.getConnection();
                                if (validationQuery == null || validationQuery.trim().isEmpty()) {
                                    validationQuery = defaultValidationQuery(c.getMetaData().getDatabaseProductName());
                                }
                                if (validationQuery == null) {
                                    continue;
                                }
                            } catch (final SQLException e) {
                                LOGGER.log(Level.INFO, e.getMessage());
                            } finally {
                                try {
                                    if (c != null) {
                                        c.close();
                                    }
                                } catch (final Exception e) {
                                    // no-op
                                }
                            }
                        }

                        validations.add(new DataSourceValidation(ds, o.id, validationQuery));
                    } catch (final NamingException e) {
                        LOGGER.log(Level.INFO, e.getMessage());
                    }
                }
            }
        }

        return validations.toArray(new Validation[validations.size()]);
    }

    private static String defaultValidationQuery(final String db) {
        if (db.toLowerCase(Locale.ENGLISH).contains("mysql") || db.toLowerCase(Locale.ENGLISH).contains("h2") ||
            db.toLowerCase(Locale.ENGLISH).contains("sqlite") || db.toLowerCase(Locale.ENGLISH).contains("postgres")
            || db.toLowerCase(Locale.ENGLISH).contains("sqlserver") || db.toLowerCase(Locale.ENGLISH).contains("derby")) {
            return "select 1";
        } else if (db.toLowerCase(Locale.ENGLISH).contains("oracle")) {
            return "select 1 form dual";
        } else if (db.toLowerCase(Locale.ENGLISH).contains("hsql")) {
            return "select 1 from INFORMATION_SCHEMA.SYSTEM_USERS";
        }
        return null;
    }

}
TOP

Related Classes of org.apache.sirona.tomee.agent.validation.TomEEValidationFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.