001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package javax.util.concurrent;
018
019 import java.util.concurrent.ThreadFactory;
020
021 /**
022 * A manageable version of a {@link java.util.concurrent.ThreadFactory}.<p>
023 *
024 * A ManagedThreadFactory provides a method for creating threads for execution
025 * in a managed environment. Implementations of the ManagedThreadFactory are
026 * provided by a Java™ EE Product Provider. Application Component Providers
027 * use the Java Naming and Directory Interface™ (JNDI) to look-up instances of one
028 * or more ManagedThreadFactory objects using resource environment references.<p>
029 *
030 * The Concurrency Utilities for Java™ EE specification describes several
031 * behaviors that a ManagedThreadFactory can implement. The Application
032 * Component Provider and Deployer identify these requirements and map the
033 * resource environment reference appropriately.<p>
034 *
035 * The Runnable task that is allocated to the new thread using the
036 * {@link java.util.concurrent.ThreadFactory#newThread(java.lang.Runnable)} method
037 * will run with the application component context of the component instance
038 * that created (looked-up) this ManagedThreadFactory instance.<p>
039 *
040 * The task runs without an explicit transaction (they do not enlist in the application
041 * component's transaction). If a transaction is required, use a
042 * {@link javax.transaction.UserTransaction} instance. A UserTransaction instance is
043 * available in JNDI using the name: "java:comp/UserTransaction"<p>
044 *
045 * Example:<pre>
046 * public run() {
047 * // Begin of task
048 * InitialContext ctx = new InitialContext();
049 * UserTransaction ut = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
050 * ut.begin();
051 *
052 * // Perform transactional business logic
053 *
054 * ut.commit();
055 * }</PRE>
056 *
057 * A ManagedThreadFactory can be used with Java SE ExecutorService implementations directly.<p>
058 *
059 * Example:<pre>
060 * /**
061 * * Create a ThreadPoolExecutor using a ManagedThreadFactory.
062 * * Resource Mappings:
063 * * type: javax.util.concurrent.ManagedThreadFactory
064 * * jndi-name: concurrent/tf/DefaultThreadFactory
065 * */
066 * public ExecutorService getManagedThreadPool() {
067 * InitialContext ctx = new InitialContext();
068 * ManagedThreadFactory tf = (ManagedThreadFactory)
069 * ctx.lookup("java:comp/env/concurrent/tf/DefaultThreadFactory");
070 *
071 * // All threads will run as part of this application component.
072 * return new ThreadPoolExecutor(5, 10, 5, TimeUnit.SECONDS,
073 * new ArrayBlockingQueue<Runnable>(10), tf);
074 * }
075 * </pre>
076 */
077 public interface ManagedThreadFactory extends ThreadFactory {
078
079 }