Search in sources :

Example 1 with DaemonThreadFactory

use of org.apache.openejb.util.DaemonThreadFactory in project tomee by apache.

the class Assembler method destroyResource.

private void destroyResource(final String name, final String className, final Object inObject) {
    Object object;
    try {
        object = LazyResource.class.isInstance(inObject) && LazyResource.class.cast(inObject).isInitialized() ? LazyResource.class.cast(inObject).getObject() : inObject;
    } catch (final NamingException e) {
        // in case it impl DestroyableResource
        object = inObject;
    }
    final Collection<Method> preDestroy = null;
    if (resourceDestroyTimeout != null) {
        final Duration d = new Duration(resourceDestroyTimeout);
        final ExecutorService es = Executors.newSingleThreadExecutor(new DaemonThreadFactory("openejb-resource-destruction-" + name));
        final Object o = object;
        try {
            es.submit(new Runnable() {

                @Override
                public void run() {
                    doResourceDestruction(name, className, o);
                }
            }).get(d.getTime(), d.getUnit());
        } catch (final InterruptedException e) {
            Thread.interrupted();
        } catch (final ExecutionException e) {
            throw RuntimeException.class.cast(e.getCause());
        } catch (final TimeoutException e) {
            logger.error("Can't destroy " + name + " in " + resourceDestroyTimeout + ", giving up.", e);
            if (threadStackOnTimeout) {
                final ThreadInfo[] dump = ManagementFactory.getThreadMXBean().dumpAllThreads(false, false);
                final ByteArrayOutputStream writer = new ByteArrayOutputStream();
                final PrintStream stream = new PrintStream(writer);
                for (final ThreadInfo info : dump) {
                    stream.println('"' + info.getThreadName() + "\" suspended=" + info.isSuspended() + " state=" + info.getThreadState());
                    for (final StackTraceElement traceElement : info.getStackTrace()) {
                        stream.println("\tat " + traceElement);
                    }
                }
                logger.info("Dump on " + name + " destruction timeout:\n" + new String(writer.toByteArray()));
            }
        }
    } else {
        doResourceDestruction(name, className, object);
    }
    removeResourceInfo(name);
}
Also used : PrintStream(java.io.PrintStream) DaemonThreadFactory(org.apache.openejb.util.DaemonThreadFactory) Duration(org.apache.openejb.util.Duration) Method(java.lang.reflect.Method) ByteArrayOutputStream(java.io.ByteArrayOutputStream) OpenEJBRuntimeException(org.apache.openejb.OpenEJBRuntimeException) ThreadInfo(java.lang.management.ThreadInfo) ExecutorService(java.util.concurrent.ExecutorService) NamingException(javax.naming.NamingException) ExecutionException(java.util.concurrent.ExecutionException) TimeoutException(java.util.concurrent.TimeoutException)

Example 2 with DaemonThreadFactory

use of org.apache.openejb.util.DaemonThreadFactory in project tomee by apache.

the class Assembler method doCreateResource.

private Object doCreateResource(final Collection<ServiceInfo> infos, final ResourceInfo serviceInfo) throws OpenEJBException {
    // do it early otherwise we can loose it
    final String skipPropertiesFallback = (String) serviceInfo.properties.remove("SkipPropertiesFallback");
    final ObjectRecipe serviceRecipe = createRecipe(infos, serviceInfo);
    final boolean properties = PropertiesFactory.class.getName().equals(serviceInfo.className);
    if ("false".equalsIgnoreCase(serviceInfo.properties.getProperty("SkipImplicitAttributes", "false")) && !properties) {
        serviceRecipe.setProperty("transactionManager", transactionManager);
        serviceRecipe.setProperty("ServiceId", serviceInfo.id);
    }
    serviceInfo.properties.remove("SkipImplicitAttributes");
    // if custom instance allow to skip properties fallback to avoid to set unexpectedly it - connectionProps of DBs
    final AtomicReference<Properties> injectedProperties = new AtomicReference<>();
    if (!"true".equalsIgnoreCase(skipPropertiesFallback)) {
        serviceRecipe.setProperty("properties", new UnsetPropertiesRecipe() {

            @Override
            protected Object internalCreate(final Type expectedType, final boolean lazyRefAllowed) throws ConstructionException {
                final Map<String, Object> original = serviceRecipe.getUnsetProperties();
                final Properties properties = new SuperProperties() {

                    @Override
                    public Object remove(final Object key) {
                        // avoid to log them then
                        original.remove(key);
                        return super.remove(key);
                    }
                }.caseInsensitive(// keep our nice case insensitive feature
                true);
                for (final Map.Entry<String, Object> entry : original.entrySet()) {
                    properties.put(entry.getKey(), entry.getValue());
                }
                injectedProperties.set(properties);
                return properties;
            }
        });
    } else {
        // this is not the best fallback we have but since it is super limited it is acceptable
        final Map<String, Object> unsetProperties = serviceRecipe.getUnsetProperties();
        injectedProperties.set(new Properties() {

            @Override
            public String getProperty(final String key) {
                final Object obj = unsetProperties.get(key);
                return String.class.isInstance(obj) ? String.valueOf(obj) : null;
            }

            @Override
            public Set<String> stringPropertyNames() {
                return unsetProperties.keySet();
            }

            @Override
            public Set<Object> keySet() {
                //noinspection unchecked
                return Set.class.cast(unsetProperties.keySet());
            }

            @Override
            public synchronized boolean containsKey(final Object key) {
                return getProperty(String.valueOf(key)) != null;
            }
        });
    }
    if (serviceInfo.types.contains("DataSource") || serviceInfo.types.contains(DataSource.class.getName())) {
        final Properties props = PropertyPlaceHolderHelper.simpleHolds(serviceInfo.properties);
        if (serviceInfo.properties.containsKey("Definition")) {
            final Object encoding = serviceInfo.properties.remove("DefinitionEncoding");
            try {
                // we catch classcast etc..., if it fails it is not important
                final InputStream is = new ByteArrayInputStream(serviceInfo.properties.getProperty("Definition").getBytes(encoding != null ? encoding.toString() : "ISO-8859-1"));
                final Properties p = new SuperProperties();
                IO.readProperties(is, p);
                for (final Entry<Object, Object> entry : p.entrySet()) {
                    final String key = entry.getKey().toString();
                    if (!props.containsKey(key) && !(key.equalsIgnoreCase("url") && props.containsKey("JdbcUrl"))) {
                        // with @DataSource we can get both, see org.apache.openejb.config.ConvertDataSourceDefinitions.rawDefinition()
                        props.put(key, entry.getValue());
                    }
                }
            } catch (final Exception e) {
            // ignored
            }
        }
        serviceRecipe.setProperty("Definition", PropertiesHelper.propertiesToString(props));
    }
    // else: any other kind of resource relying on it? shouldnt be
    replaceResourceAdapterProperty(serviceRecipe);
    ClassLoader loader = Thread.currentThread().getContextClassLoader();
    boolean customLoader = false;
    try {
        if (serviceInfo.classpath != null && serviceInfo.classpath.length > 0) {
            final URL[] urls = new URL[serviceInfo.classpath.length];
            for (int i = 0; i < serviceInfo.classpath.length; i++) {
                urls[i] = serviceInfo.classpath[i].toURL();
            }
            loader = new URLClassLoaderFirst(urls, loader);
            customLoader = true;
            serviceRecipe.setProperty("OpenEJBResourceClasspath", "true");
        }
    } catch (final MalformedURLException e) {
        throw new OpenEJBException("Unable to create a classloader for " + serviceInfo.id, e);
    }
    if (!customLoader && serviceInfo.classpathAPI != null) {
        throw new IllegalArgumentException("custom-api provided but not classpath used for " + serviceInfo.id);
    }
    Object service = serviceRecipe.create(loader);
    if (customLoader) {
        final Collection<Class<?>> apis;
        if (serviceInfo.classpathAPI == null) {
            apis = new ArrayList<Class<?>>(Arrays.asList(service.getClass().getInterfaces()));
        } else {
            final String[] split = serviceInfo.classpathAPI.split(" *, *");
            apis = new ArrayList<>(split.length);
            final ClassLoader apiLoader = Thread.currentThread().getContextClassLoader();
            for (final String fqn : split) {
                try {
                    apis.add(apiLoader.loadClass(fqn));
                } catch (final ClassNotFoundException e) {
                    throw new IllegalArgumentException(fqn + " not usable as API for " + serviceInfo.id, e);
                }
            }
        }
        if (apis.size() - (apis.contains(Serializable.class) ? 1 : 0) - (apis.contains(Externalizable.class) ? 1 : 0) > 0) {
            service = Proxy.newProxyInstance(loader, apis.toArray(new Class<?>[apis.size()]), new ClassLoaderAwareHandler(null, service, loader));
        }
    // else proxy would be useless
    }
    serviceInfo.unsetProperties = injectedProperties.get();
    // Java Connector spec ResourceAdapters and ManagedConnectionFactories need special activation
    if (service instanceof ResourceAdapter) {
        final ResourceAdapter resourceAdapter = (ResourceAdapter) service;
        // Create a thead pool for work manager
        final int threadPoolSize = getIntProperty(serviceInfo.properties, "threadPoolSize", 30);
        final Executor threadPool;
        if (threadPoolSize <= 0) {
            logger.warning("Thread pool for '" + serviceInfo.id + "' is (unbounded), consider setting a size using: " + serviceInfo.id + ".QueueSize=[size]");
            threadPool = Executors.newCachedThreadPool(new DaemonThreadFactory(serviceInfo.id + "-worker-"));
        } else {
            threadPool = new ExecutorBuilder().size(threadPoolSize).prefix(serviceInfo.id).threadFactory(new DaemonThreadFactory(serviceInfo.id + "-worker-")).build(new Options(serviceInfo.properties, SystemInstance.get().getOptions()));
            logger.info("Thread pool size for '" + serviceInfo.id + "' is (" + threadPoolSize + ")");
        }
        // WorkManager: the resource adapter can use this to dispatch messages or perform tasks
        final WorkManager workManager;
        if (GeronimoTransactionManager.class.isInstance(transactionManager)) {
            final GeronimoTransactionManager geronimoTransactionManager = (GeronimoTransactionManager) transactionManager;
            final TransactionContextHandler txWorkContextHandler = new TransactionContextHandler(geronimoTransactionManager);
            // use id as default realm name if realm is not specified in service properties
            final String securityRealmName = getStringProperty(serviceInfo.properties, "realm", serviceInfo.id);
            final SecurityContextHandler securityContextHandler = new SecurityContextHandler(securityRealmName);
            final HintsContextHandler hintsContextHandler = new HintsContextHandler();
            final Collection<WorkContextHandler> workContextHandlers = new ArrayList<WorkContextHandler>();
            workContextHandlers.add(txWorkContextHandler);
            workContextHandlers.add(securityContextHandler);
            workContextHandlers.add(hintsContextHandler);
            workManager = new GeronimoWorkManager(threadPool, threadPool, threadPool, workContextHandlers);
        } else {
            workManager = new SimpleWorkManager(threadPool);
        }
        // BootstrapContext: wraps the WorkMananger and XATerminator
        final BootstrapContext bootstrapContext;
        if (transactionManager instanceof GeronimoTransactionManager) {
            bootstrapContext = new GeronimoBootstrapContext(GeronimoWorkManager.class.cast(workManager), (GeronimoTransactionManager) transactionManager, (GeronimoTransactionManager) transactionManager);
        } else if (transactionManager instanceof XATerminator) {
            bootstrapContext = new SimpleBootstrapContext(workManager, (XATerminator) transactionManager);
        } else {
            bootstrapContext = new SimpleBootstrapContext(workManager);
        }
        // start the resource adapter
        try {
            logger.debug("createResource.startingResourceAdapter", serviceInfo.id, service.getClass().getName());
            resourceAdapter.start(bootstrapContext);
        } catch (final ResourceAdapterInternalException e) {
            throw new OpenEJBException(e);
        }
        final Map<String, Object> unset = serviceRecipe.getUnsetProperties();
        unset.remove("threadPoolSize");
        logUnusedProperties(unset, serviceInfo);
        service = new ResourceAdapterReference(resourceAdapter, threadPool, OPENEJB_RESOURCE_JNDI_PREFIX + serviceInfo.id);
    } else if (service instanceof ManagedConnectionFactory) {
        final ManagedConnectionFactory managedConnectionFactory = (ManagedConnectionFactory) service;
        // connection manager is constructed via a recipe so we automatically expose all cmf properties
        final ObjectRecipe connectionManagerRecipe = new ObjectRecipe(GeronimoConnectionManagerFactory.class, "create");
        connectionManagerRecipe.allow(Option.CASE_INSENSITIVE_PROPERTIES);
        connectionManagerRecipe.allow(Option.IGNORE_MISSING_PROPERTIES);
        connectionManagerRecipe.setAllProperties(serviceInfo.properties);
        connectionManagerRecipe.setProperty("name", serviceInfo.id);
        connectionManagerRecipe.setProperty("mcf", managedConnectionFactory);
        // standard properties
        connectionManagerRecipe.setProperty("transactionManager", transactionManager);
        ClassLoader classLoader = loader;
        if (classLoader == null) {
            classLoader = getClass().getClassLoader();
        }
        if (classLoader == null) {
            classLoader = ClassLoader.getSystemClassLoader();
        }
        connectionManagerRecipe.setProperty("classLoader", classLoader);
        logger.getChildLogger("service").info("createResource.createConnectionManager", serviceInfo.id, service.getClass().getName());
        // create the connection manager
        final ConnectionManager connectionManager = (ConnectionManager) connectionManagerRecipe.create();
        if (connectionManager == null) {
            throw new OpenEJBRuntimeException(messages.format("assembler.invalidConnectionManager", serviceInfo.id));
        }
        final Map<String, Object> unsetA = serviceRecipe.getUnsetProperties();
        final Map<String, Object> unsetB = connectionManagerRecipe.getUnsetProperties();
        final Map<String, Object> unset = new HashMap<String, Object>();
        for (final Entry<String, Object> entry : unsetA.entrySet()) {
            if (unsetB.containsKey(entry.getKey())) {
                unset.put(entry.getKey(), entry.getValue());
            }
        }
        // service becomes a ConnectorReference which merges connection manager and mcf
        service = new ConnectorReference(connectionManager, managedConnectionFactory);
        // init cm if needed
        final Object eagerInit = unset.remove("eagerInit");
        if (eagerInit != null && eagerInit instanceof String && "true".equalsIgnoreCase((String) eagerInit) && connectionManager instanceof AbstractConnectionManager) {
            try {
                ((AbstractConnectionManager) connectionManager).doStart();
                try {
                    final Object cf = managedConnectionFactory.createConnectionFactory(connectionManager);
                    if (cf instanceof ConnectionFactory) {
                        final Connection connection = ((ConnectionFactory) cf).getConnection();
                        connection.getMetaData();
                        connection.close();
                    }
                } catch (final Exception e) {
                // no-op: just to force eager init of pool
                }
            } catch (final Exception e) {
                logger.warning("Can't start connection manager", e);
            }
        }
        logUnusedProperties(unset, serviceInfo);
    } else if (service instanceof DataSource) {
        ClassLoader classLoader = loader;
        if (classLoader == null) {
            classLoader = getClass().getClassLoader();
        }
        final ImportSql importer = new ImportSql(classLoader, serviceInfo.id, (DataSource) service);
        if (importer.hasSomethingToImport()) {
            importer.doImport();
        }
        final ObjectRecipe recipe = DataSourceFactory.forgetRecipe(service, serviceRecipe);
        if (recipe != serviceRecipe || !serviceInfo.properties.containsKey("XaDataSource")) {
            logUnusedProperties(recipe, serviceInfo);
        }
        // else logged on xadatasource itself
        final Properties prop = serviceInfo.properties;
        String url = prop.getProperty("JdbcUrl", prop.getProperty("url"));
        if (url == null) {
            url = prop.getProperty("jdbcUrl");
        }
        if (url == null) {
            logger.debug("Unable to find url for " + serviceInfo.id + " will not monitor it");
        } else {
            final String host = extractHost(url);
            if (host != null) {
                remoteResourceMonitor.addHost(host);
                remoteResourceMonitor.registerIfNot();
            }
        }
    } else if (!Properties.class.isInstance(service)) {
        if (serviceInfo.unsetProperties == null || isTemplatizedResource(serviceInfo)) {
            logUnusedProperties(serviceRecipe, serviceInfo);
        }
    // else wait post construct
    }
    final ResourceCreated event = new ResourceCreated(service, serviceInfo.id);
    SystemInstance.get().fireEvent(event);
    return event.getReplacement() == null ? service : event.getReplacement();
}
Also used : URLClassLoaderFirst(org.apache.openejb.util.classloader.URLClassLoaderFirst) OpenEJBException(org.apache.openejb.OpenEJBException) MalformedURLException(java.net.MalformedURLException) Serializable(java.io.Serializable) GeronimoBootstrapContext(org.apache.geronimo.connector.GeronimoBootstrapContext) TransactionContextHandler(org.apache.geronimo.connector.work.TransactionContextHandler) ArrayList(java.util.ArrayList) GeronimoWorkManager(org.apache.geronimo.connector.work.GeronimoWorkManager) SuperProperties(org.apache.openejb.util.SuperProperties) ExecutorBuilder(org.apache.openejb.util.ExecutorBuilder) AbstractConnectionManager(org.apache.geronimo.connector.outbound.AbstractConnectionManager) ConnectionManager(javax.resource.spi.ConnectionManager) ObjectRecipe(org.apache.xbean.recipe.ObjectRecipe) SimpleWorkManager(org.apache.openejb.core.transaction.SimpleWorkManager) WorkManager(javax.resource.spi.work.WorkManager) GeronimoWorkManager(org.apache.geronimo.connector.work.GeronimoWorkManager) ResourceAdapter(javax.resource.spi.ResourceAdapter) SecurityContextHandler(org.apache.openejb.core.security.SecurityContextHandler) UnsetPropertiesRecipe(org.apache.xbean.recipe.UnsetPropertiesRecipe) GeronimoConnectionManagerFactory(org.apache.openejb.resource.GeronimoConnectionManagerFactory) DataSource(javax.sql.DataSource) OpenEJBRuntimeException(org.apache.openejb.OpenEJBRuntimeException) HintsContextHandler(org.apache.geronimo.connector.work.HintsContextHandler) SimpleBootstrapContext(org.apache.openejb.core.transaction.SimpleBootstrapContext) ByteArrayInputStream(java.io.ByteArrayInputStream) PropertiesFactory(org.apache.openejb.resource.PropertiesFactory) Map(java.util.Map) TreeMap(java.util.TreeMap) HashMap(java.util.HashMap) ConnectorReference(org.apache.openejb.core.ConnectorReference) Options(org.apache.openejb.loader.Options) XATerminator(javax.resource.spi.XATerminator) HashSet(java.util.HashSet) Set(java.util.Set) UrlSet(org.apache.xbean.finder.UrlSet) ClassLoaderAwareHandler(org.apache.openejb.util.classloader.ClassLoaderAwareHandler) DaemonThreadFactory(org.apache.openejb.util.DaemonThreadFactory) SimpleWorkManager(org.apache.openejb.core.transaction.SimpleWorkManager) SimpleBootstrapContext(org.apache.openejb.core.transaction.SimpleBootstrapContext) GeronimoBootstrapContext(org.apache.geronimo.connector.GeronimoBootstrapContext) BootstrapContext(javax.resource.spi.BootstrapContext) AbstractConnectionManager(org.apache.geronimo.connector.outbound.AbstractConnectionManager) SuperProperties(org.apache.openejb.util.SuperProperties) Properties(java.util.Properties) URL(java.net.URL) Entry(java.util.Map.Entry) ManagedConnectionFactory(javax.resource.spi.ManagedConnectionFactory) ConnectionFactory(javax.resource.cci.ConnectionFactory) Executor(java.util.concurrent.Executor) GeronimoTransactionManager(org.apache.geronimo.transaction.manager.GeronimoTransactionManager) ResourceCreated(org.apache.openejb.assembler.classic.event.ResourceCreated) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) Connection(javax.resource.cci.Connection) AtomicReference(java.util.concurrent.atomic.AtomicReference) ResourceAdapterInternalException(javax.resource.spi.ResourceAdapterInternalException) InvalidObjectException(java.io.InvalidObjectException) NameAlreadyBoundException(javax.naming.NameAlreadyBoundException) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) ObjectStreamException(java.io.ObjectStreamException) ResourceAdapterInternalException(javax.resource.spi.ResourceAdapterInternalException) URISyntaxException(java.net.URISyntaxException) UndeployException(org.apache.openejb.UndeployException) DefinitionException(javax.enterprise.inject.spi.DefinitionException) ConstructionException(org.apache.xbean.recipe.ConstructionException) MBeanRegistrationException(javax.management.MBeanRegistrationException) InstanceNotFoundException(javax.management.InstanceNotFoundException) ValidationException(javax.validation.ValidationException) MalformedObjectNameException(javax.management.MalformedObjectNameException) DuplicateDeploymentIdException(org.apache.openejb.DuplicateDeploymentIdException) TimeoutException(java.util.concurrent.TimeoutException) NamingException(javax.naming.NamingException) OpenEJBException(org.apache.openejb.OpenEJBException) DeploymentException(javax.enterprise.inject.spi.DeploymentException) NoSuchApplicationException(org.apache.openejb.NoSuchApplicationException) MalformedURLException(java.net.MalformedURLException) OpenEJBRuntimeException(org.apache.openejb.OpenEJBRuntimeException) BeanType(org.apache.openejb.BeanType) Type(java.lang.reflect.Type) TransactionType(org.apache.openejb.core.transaction.TransactionType) ManagedConnectionFactory(javax.resource.spi.ManagedConnectionFactory) ConstructionException(org.apache.xbean.recipe.ConstructionException) WorkContextHandler(org.apache.geronimo.connector.work.WorkContextHandler)

Example 3 with DaemonThreadFactory

use of org.apache.openejb.util.DaemonThreadFactory in project tomee by apache.

the class TldScanner method scanClassLoaderForTagLibs.

public static Set<URL> scanClassLoaderForTagLibs(final ClassLoader classLoader) throws OpenEJBException {
    if (skip()) {
        return Collections.emptySet();
    }
    final Set<URL> tldUrls = new HashSet<URL>();
    if (classLoader == null) {
        return tldUrls;
    }
    if (classLoader == Object.class.getClassLoader()) {
        return tldUrls;
    }
    final List<URL> urls = urls(classLoader);
    final int hashCodeForUrls = hash(urls);
    final Set<URL> cachedSet = cacheByhashCode.get(hashCodeForUrls);
    if (cachedSet != null) {
        return cachedSet;
    }
    tldUrls.addAll(scan(classLoader.getParent()));
    if (urls.size() > 0) {
        final ExecutorService es = Executors.newFixedThreadPool(Math.min(urls.size(), 2 * Runtime.getRuntime().availableProcessors() + 1), new DaemonThreadFactory("OpenEJB-tld-server-scanning"));
        final Collection<Future<Set<URL>>> futures = new ArrayList<Future<Set<URL>>>(urls.size());
        for (URL url : urls) {
            if (url.getProtocol().equals("jar")) {
                try {
                    String path = url.getPath();
                    if (path.endsWith("!/")) {
                        path = path.substring(0, path.length() - 2);
                    }
                    url = new URL(path);
                } catch (final MalformedURLException e) {
                    DeploymentLoader.logger.warning("JSP tag library location bad: " + url.toExternalForm(), e);
                    continue;
                }
            }
            if (!url.getProtocol().equals("file")) {
                continue;
            }
            final File file;
            try {
                file = toFile(url).getCanonicalFile().getAbsoluteFile();
            } catch (final IOException e) {
                DeploymentLoader.logger.warning("JSP tag library location bad: " + url.toExternalForm(), e);
                continue;
            }
            futures.add(es.submit(new Callable<Set<URL>>() {

                @Override
                public Set<URL> call() throws Exception {
                    return scanForTagLibs(file);
                }
            }));
        }
        es.shutdown();
        for (final Future<Set<URL>> set : futures) {
            try {
                tldUrls.addAll(set.get());
            } catch (final Exception e) {
            // no-op
            }
        }
    }
    cacheByhashCode.put(hashCodeForUrls, tldUrls);
    return tldUrls;
}
Also used : MalformedURLException(java.net.MalformedURLException) UrlSet(org.apache.xbean.finder.UrlSet) HashSet(java.util.HashSet) Set(java.util.Set) DaemonThreadFactory(org.apache.openejb.util.DaemonThreadFactory) ArrayList(java.util.ArrayList) IOException(java.io.IOException) URL(java.net.URL) Callable(java.util.concurrent.Callable) MalformedURLException(java.net.MalformedURLException) OpenEJBException(org.apache.openejb.OpenEJBException) IOException(java.io.IOException) ExecutorService(java.util.concurrent.ExecutorService) Future(java.util.concurrent.Future) JarFile(java.util.jar.JarFile) URLs.toFile(org.apache.openejb.util.URLs.toFile) File(java.io.File) HashSet(java.util.HashSet)

Example 4 with DaemonThreadFactory

use of org.apache.openejb.util.DaemonThreadFactory in project tomee by apache.

the class AsynchronousPool method create.

public static AsynchronousPool create(final AppContext appContext) {
    final Options options = appContext.getOptions();
    final ExecutorBuilder builder = new ExecutorBuilder().prefix("AsynchronousPool").size(options.get("AsynchronousPool.Size", 5)).threadFactory(new DaemonThreadFactory("@Asynchronous", appContext.getId()));
    return new AsynchronousPool(builder.build(options), options.get("AsynchronousPool.ShutdownWaitDuration", new Duration(1, TimeUnit.MINUTES)));
}
Also used : Options(org.apache.openejb.loader.Options) ExecutorBuilder(org.apache.openejb.util.ExecutorBuilder) DaemonThreadFactory(org.apache.openejb.util.DaemonThreadFactory) Duration(org.apache.openejb.util.Duration)

Example 5 with DaemonThreadFactory

use of org.apache.openejb.util.DaemonThreadFactory in project tomee by apache.

the class ArquillianUtil method preLoadClassesAsynchronously.

public static void preLoadClassesAsynchronously(final String classesToLoad) {
    if (classesToLoad == null || classesToLoad.isEmpty()) {
        return;
    }
    final ClassLoader loader = Thread.currentThread().getContextClassLoader();
    final String[] split = classesToLoad.trim().split(",");
    final ExecutorService es = Executors.newCachedThreadPool(new DaemonThreadFactory(split));
    for (final String clazz : split) {
        es.submit(new PreLoadClassTask(loader, clazz));
    }
    es.shutdown();
}
Also used : DaemonThreadFactory(org.apache.openejb.util.DaemonThreadFactory) ExecutorService(java.util.concurrent.ExecutorService)

Aggregations

DaemonThreadFactory (org.apache.openejb.util.DaemonThreadFactory)7 ExecutorService (java.util.concurrent.ExecutorService)3 IOException (java.io.IOException)2 MalformedURLException (java.net.MalformedURLException)2 URL (java.net.URL)2 ArrayList (java.util.ArrayList)2 HashSet (java.util.HashSet)2 Set (java.util.Set)2 ExecutionException (java.util.concurrent.ExecutionException)2 TimeoutException (java.util.concurrent.TimeoutException)2 NamingException (javax.naming.NamingException)2 OpenEJBRuntimeException (org.apache.openejb.OpenEJBRuntimeException)2 Duration (org.apache.openejb.util.Duration)2 ByteArrayInputStream (java.io.ByteArrayInputStream)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 File (java.io.File)1 InputStream (java.io.InputStream)1 InvalidObjectException (java.io.InvalidObjectException)1 ObjectStreamException (java.io.ObjectStreamException)1 PrintStream (java.io.PrintStream)1