001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package com.sun.cldc.isolate;
028:
029: import java.io.PrintStream;
030:
031: /**
032: * An exception thrown when the implementation is unable to start
033: * execution of a new isolate due to an error or exceptional condition
034: * in the bootstrap code for the new isolate (i.e., before the
035: * application starts). Generally, this exception implies the new
036: * isolate was misconfigured, and the misconfiguration was detected
037: * when the isolate was initializing (either during the {@linkplain
038: * Isolate#Isolate constructor call} or {@link Isolate#start
039: * Isolate.start invocation}). If the underlying misconfiguration resulted in an
040: * exception in the new isolate, the accessors for the remote exception
041: * information will provide the details. If not, those methods will
042: * all return <code>null</code>.
043: *
044: * <p> Any errors or exceptions thrown by application code in the new
045: * isolate will be handled by the default {@link
046: * ThreadGroup#uncaughtException ThreadGroup.uncaughtException} and
047: * will not manifest as an <code>IsolateStartupException</code> in the creating
048: * isolate.
049: *
050: * <p>Because any nested exception occurred in a remote
051: * isolate, the exception cannot be directly {@linkplain
052: * java.lang.Throwable#initCause chained} (for example, the exception
053: * type may be available in the creator). However, the information
054: * about the remote exception is available from the {@link
055: * #getRemoteName}, {@link #getRemoteMessage} methods.
056: *
057: * <p>The detail message in an <code>IsolateStartupException</code> will
058: * be the <code>toString</code> string of the original exception in the
059: * remote isolate, if available. The backtrace associated with an
060: * <code>IsolateStartupException</code> will be from the current thread's
061: * stack.
062: *
063: * @see Isolate#Isolate
064: * @see Isolate#start
065: **/
066: public class IsolateStartupException extends Exception {
067: /**
068: * Constructs an <code>IsolateStartupException</code> with no specified detail
069: * message and <code>null</code> remote exception information.
070: */
071: public IsolateStartupException() {
072: }
073:
074: /**
075: * Constructs an <code>IsolateStartupException</code> with specified detail
076: * message and <code>null</code> remote exception information.
077: */
078: public IsolateStartupException(String detail) {
079: super (detail);
080: }
081:
082: /**
083: * Returns either the name of the exception type of the remote exception
084: * or <code>null</code> if there was no reportable remote Java exception.
085: *
086: * @return the name of the exception type of the remote exception
087: */
088: public String getRemoteName() {
089: return null;
090: }
091:
092: /**
093: * Returns the detail message string for the remote exception (which
094: * may be <code>null</code> even if a remote exception occured).
095: *
096: * @see #getRemoteName
097: * @return the detail message string for the remote exception.
098: */
099: public String getRemoteMessage() {
100: return null;
101: }
102:
103: /*
104: * Prints the remote exception name, message, and stack trace, like
105: * {@link java.lang.Throwable#printStackTrace()} does for the local
106: * exception. If no exception information is available, nothing
107: * will be printed.
108: */
109: public void printRemoteStackTrace() {
110: }
111:
112: /**
113: * Prints the remote exception like {@link #printRemoteStackTrace()}
114: * to the given <code>PrintStream</code>.
115: * If no exception information is available, nothing
116: * will be printed.
117: */
118: public void printRemoteStackTrace(PrintStream ps) {
119: }
120: }
|