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

org.apache.openejb.Core Maven / Gradle / Ivy

The newest version!
/*
 * 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.openejb;

import org.apache.openejb.config.ServiceUtils;
import org.apache.openejb.util.Messages;

import java.util.concurrent.Semaphore;

/**
 * @version $Rev$ $Date$
 */
public class Core {
    static {
        final String[] classes = {
            "org.slf4j.LoggerFactory",
            "org.slf4j.impl.StaticLoggerBinder",

            "org.apache.openejb.config.sys.JaxbJavaee",
            "org.apache.bval.jsr303.ApacheValidationProvider",
            "org.apache.bval.jsr303.ApacheValidatorFactory",
            "org.apache.bval.jsr303.ConstraintAnnotationAttributes",
            "org.apache.bval.jsr303.ConstraintDefaults",
            "org.apache.bval.jsr303.groups.GroupsComputer",
            "org.apache.bval.jsr303.xml.ValidationMappingParser",
            "org.apache.bval.util.PrivilegedActions",
            "org.apache.geronimo.transaction.manager.TransactionManagerImpl",
            "org.apache.openejb.InterfaceType",
            "org.apache.openejb.assembler.classic.Assembler",
            "org.apache.openejb.assembler.classic.AssemblerTool",
            "org.apache.openejb.cdi.CdiBuilder",
            "org.apache.openejb.cdi.ThreadSingletonServiceImpl",
            "org.apache.openejb.config.AppValidator",
            "org.apache.openejb.config.AnnotationDeployer",
            "org.apache.openejb.config.AutoConfig",
            "org.apache.openejb.config.ConfigurationFactory",
            "org.apache.openejb.config.MBeanDeployer",
            "org.apache.openejb.config.PersistenceContextAnnFactory",
            "org.apache.openejb.core.ServerFederation",
            "org.apache.openejb.core.ivm.EjbHomeProxyHandler$1",
            "org.apache.openejb.core.ivm.EjbHomeProxyHandler$MethodType",
            "org.apache.openejb.core.managed.ManagedContainer$MethodType",
            "org.apache.openejb.loader.FileUtils",
            "org.apache.openejb.loader.IO",
            "org.apache.openejb.loader.SystemInstance",
            "org.apache.openejb.monitoring.StatsInterceptor",
            "org.apache.openejb.persistence.JtaEntityManagerRegistry",
            "org.apache.openejb.util.Join",
            "org.apache.openejb.util.JuliLogStreamFactory",
            "org.apache.openejb.util.LogCategory",
            "org.apache.openejb.util.Messages",
            "org.apache.openejb.util.SafeToolkit",
            "org.apache.openejb.util.StringTemplate",
            "org.apache.openejb.util.proxy.ProxyManager",
            "org.apache.openjpa.enhance.PCRegistry",
            "org.apache.openjpa.lib.util.Localizer",
            "org.apache.webbeans.logger.WebBeansLoggerFacade",
            "org.apache.xbean.naming.reference.SimpleReference",
            "org.apache.xbean.propertyeditor.PropertyEditors",
            "org.apache.xbean.propertyeditor.ReferenceIdentityMap",
            "org.apache.xbean.recipe.ReflectionUtil"
        };

        final Thread preloadMessages = new Thread() {
            @Override
            public void run() {
                new Messages("org.apache.openejb.util.resources");
                new Messages("org.apache.openejb.config");
                new Messages("org.apache.openejb.config.resources");
            }
        };
        preloadMessages.start();

        final Thread preloadServiceProviders = new Thread() {
            @Override
            public void run() {
                try {
                    ServiceUtils.getServiceProviders();
                } catch (final OpenEJBException e) {
                    // no-op
                }
            }
        };
        preloadServiceProviders.start();

        final int permits = 2 * Runtime.getRuntime().availableProcessors() + 1;
        final Semaphore semaphore = new Semaphore(0);
        final ClassLoader loader = OpenEjbContainer.class.getClassLoader();

        try { // logging classes should be loaded before any other classes so do it here synchronously
            Class.forName("org.apache.openejb.util.Logger", true, loader);
        } catch (final Throwable e) {
            // no-op
        }

        final int part = Math.max(1, (int) Math.round(classes.length * 1. / permits));
        for (int i = 0; i < permits; i++) {
            final int current = i;
            final int offset = i * part;
            final Thread thread = new Thread() {
                @Override
                public void run() {
                    int max = offset + part;
                    if (current == permits - 1) { // last one
                        max = classes.length;
                    }

                    for (int c = offset; c < max; c++) {
                        try {
                            Class.forName(classes[c], true, loader);
                        } catch (final Throwable e) {
                            // no-op
                        }
                    }
                    semaphore.release();
                }
            };
            thread.setDaemon(true);
            thread.start();
        }
        try {
            preloadServiceProviders.join();
            preloadMessages.join();
            semaphore.acquire(permits);
        } catch (final InterruptedException e) {
            Thread.interrupted();
        }
    }

    public static void warmup() {
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy