blob: 8d0e12f716368063256a7613b3e25ea1c27c372a [file] [log] [blame]
/*
* 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
<<<<<<< Updated upstream
*
* 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
=======
*
* https://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
>>>>>>> Stashed changes
* limitations under the License.
*/
package org.apache.jdo.tck.util;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* This class extends java.lang.ThreadGroup and stores any uncaught exception of threads from this
* ThreadGroup for later retrieval.
*
* @author Michael Bouschen
*/
public class ThreadExceptionHandler extends ThreadGroup {
/**
* Map of uncaught exceptions. The thread is the key and the uncaught Throwable is the value in
* the map.
*/
private final Map<Thread, Throwable> uncaughtExceptions = new HashMap<>();
/** Constructor. */
public ThreadExceptionHandler() {
super("ThreadExceptionHandler");
}
/**
* Called by the Java Virtual Machine when a thread in this thread group stops because of an
* uncaught exception. This implementation stores the uncaught exception in a map for later
* retrieval.
*/
@Override
public void uncaughtException(Thread t, Throwable e) {
uncaughtExceptions.put(t, e);
}
/**
* Returns an uncaught exception for the specified thread.
*
* @param t the thread
* @return uncaught exception for the specified thread
*/
public Throwable getUncaughtException(Thread t) {
return uncaughtExceptions.get(t);
}
/**
* Returns all uncaught exceptions stored in this ThreadGroup. Each element in the returned set is
* a Map.Entry with the thread as the key and the uncaught Throwable is the value.
*
* @return Set of uncaught exceptions
*/
public Set<Map.Entry<Thread, Throwable>> getAllUncaughtExceptions() {
return uncaughtExceptions.entrySet();
}
/** Clears all exceptions in this ThreadGroup. */
public void clear() {
uncaughtExceptions.clear();
}
}