1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 package com.sun.star.lib.uno.environments.remote; 29 30 /** 31 * Manages the UNO thread pool factory. 32 * 33 * <P>The thread pool factory is a process-wide resource. It is important that 34 * all UNO environments within a process share the same thread pool mechanisms: 35 * if a synchronous UNO call is bridged out from one local UNO environment over 36 * one remote bridge, and recursively calls back into another local UNO 37 * environment over another remote bridge, the code in the second environment 38 * should be executed in the thread that did the original call from the first 39 * environment.</P> 40 * 41 * <P>There are both a Java and a native thread pool factory. A pure Java 42 * process will always use the Java thread pool factory. A mixed process uses 43 * the system property <CODE>org.openoffice.native</CODE> (to be set by the 44 * native code that starts the JVM) to determine which implementation 45 * to use.</P> 46 */ 47 public final class ThreadPoolManager { 48 /** 49 * Creates a thread pool instance. 50 * 51 * @return a new thread pool instance; will never be <CODE>null</CODE> 52 */ 53 public static synchronized IThreadPool create() { 54 if (useNative) { 55 return new NativeThreadPool(); 56 } else { 57 if (javaFactory == null) { 58 javaFactory = new JavaThreadPoolFactory(); 59 } 60 return javaFactory.createThreadPool(); 61 } 62 } 63 64 /** 65 * Leads to using the native thread pool factory, unless a Java thread pool 66 * has already been created. 67 * 68 * @return <CODE>false</CODE> if a Java thread pool has already been created 69 */ 70 public static synchronized boolean useNative() { 71 useNative = javaFactory == null; 72 return useNative; 73 } 74 75 private static boolean useNative 76 = System.getProperty("org.openoffice.native") != null; 77 private static JavaThreadPoolFactory javaFactory = null; 78 79 private ThreadPoolManager() {} // do not instantiate 80 } 81