001 /*
002 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003 *
004 * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005 *
006 * The contents of this file are subject to the terms of either the GNU
007 * General Public License Version 2 only ("GPL") or the Common
008 * Development and Distribution License("CDDL") (collectively, the
009 * "License"). You may not use this file except in compliance with the
010 * License. You can obtain a copy of the License at
011 * http://www.netbeans.org/cddl-gplv2.html
012 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013 * specific language governing permissions and limitations under the
014 * License. When distributing the software, include this License Header
015 * Notice in each file and include the License file at
016 * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017 * particular file as subject to the "Classpath" exception as provided
018 * by Sun in the GPL Version 2 section of the License file that
019 * accompanied this code. If applicable, add the following below the
020 * License Header, with the fields enclosed by brackets [] replaced by
021 * your own identifying information:
022 * "Portions Copyrighted [year] [name of copyright owner]"
023 *
024 * If you wish your version of this file to be governed by only the CDDL
025 * or only the GPL Version 2, indicate your decision by adding
026 * "[Contributor] elects to include this software in this distribution
027 * under the [CDDL or GPL Version 2] license." If you do not indicate a
028 * single choice of license, a recipient has the option to distribute
029 * your version of this file under either the CDDL, the GPL Version 2 or
030 * to extend the choice of license to its licensees as provided above.
031 * However, if you add GPL Version 2 code and therefore, elected the GPL
032 * Version 2 license, then the option applies only if the new code is
033 * made subject to such option by the copyright holder.
034 *
035 * Contributor(s):
036 *
037 * Portions Copyrighted 2008 Sun Microsystems, Inc.
038 */
039
040 package org.netbeans.modules.j2ee.deployment.impl.bridge;
041
042 import java.util.logging.Level;
043 import java.util.logging.Logger;
044 import org.netbeans.junit.Log;
045 import org.netbeans.modules.j2ee.deployment.impl.ServerRegistry;
046 import org.netbeans.modules.j2ee.deployment.impl.ServerRegistryTestBase;
047
048 /**
049 *
050 * @author Petr Hejl
051 */
052 public class Deadlock126640Test extends ServerRegistryTestBase {
053
054 private static final Logger CONTROL_LOGGER = Logger
055 .getLogger("org.netbeans.modules.j2ee.deployment.impl"); // NOI18N
056
057 private static final long DEADLOCK_TIMEOUT = 10000;
058
059 public Deadlock126640Test(String name) {
060 super (name);
061 }
062
063 @Override
064 protected Level logLevel() {
065 return Level.FINE;
066 }
067
068 public void testMain() throws InterruptedException {
069
070 Log
071 .controlFlow(
072 CONTROL_LOGGER,
073 null,
074 "THREAD: LOOKUP MSG: Registered bridging listener" // NOI18N
075 + "THREAD: INIT MSG: Entering registry initialization" // NOI18N
076 + "THREAD: LOOKUP MSG: Updating the lookup content" // NOI18N
077 + "THREAD: INIT MSG: Loading server plugins", // NOI18N
078 0);
079
080 Thread lookupThread = new LookupThread();
081 Thread initThread = new InitThread();
082 lookupThread.start();
083 initThread.start();
084
085 lookupThread.join(DEADLOCK_TIMEOUT);
086 initThread.join(DEADLOCK_TIMEOUT);
087
088 assertFalse(lookupThread.isAlive());
089 assertFalse(initThread.isAlive());
090 }
091
092 private static class LookupThread extends Thread {
093
094 public LookupThread() {
095 super ("LOOKUP"); // NOI18N
096 }
097
098 @Override
099 public void run() {
100 ServerInstanceProviderLookup lookup = ServerInstanceProviderLookup
101 .getInstance();
102 lookup.lookup(org.netbeans.api.server.ServerInstance.class);
103 }
104 }
105
106 private static class InitThread extends Thread {
107
108 public InitThread() {
109 super ("INIT"); // NOI18N
110 }
111
112 @Override
113 public void run() {
114 ServerRegistry.getInstance().getInstances();
115 }
116 }
117 }
|