|
Oracle ADF Model and Business Components API Reference 10.1.2 B14022-01 | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object java.lang.Throwable java.lang.Exception java.lang.RuntimeException oracle.jbo.JboException
Top level exception for the JBO package.
All exceptions thrown from the Business Components for Java framework should be subclasses of this exception.
This class provides a single point for the localization and formatting of Exception messages.
Translation of a message's text occurs at the time
the client calls getLocalizedMessage()
rather than at
creation time since the client may need to present the message in
one of a number of different languages (refer to DAC for details).
The Business Components for Java framework provides many exception
classes, for example, ValidationException
and NameClashException
.
These classes extend oracle.jbo.JboException, which extends java.lang.RuntimeException.
Therefore, a Business Component method can throw a Business
Components for Java exception without a throws clause in the signature.
Most subclasses of JboException
will provide a
value for the error code in a specialized constructor.
Business Components for Java exceptions have an attribute that stores an error message, and they support NLS translation and message formatting. JboException uses java.util.ListResourceBundle to format its messages. A resource bundle class defines constants and strings to use as error messages. The default format is:
{productCode}-{errorCode}: {messageBody}
For example,
ORA-10234: You cannot do that.
The components of a Business Component exception messages are derived from the following generalized set of parameters:
Parameter |
Description |
Product code |
A non-translated product code string, such as FRM, ORA, or OBCJ |
Error code |
A non-translated error code string, such as 10234 or 03101 |
ResourceBundle |
Un-translated message text such as contained in
|
an optional set of parameters |
These can be message parameters, equal in number to the number of "%" symbols in the message text. Possible message parameter examples are: Vendor and Oracle. |
details |
A "details" list containing background information. This can be any exception thrown in low-level code that is transformed into a Business Component exception. |
Additional components may be introduced in future.
Messages may need to include information known only when the exception is thrown, so error message strings can include placeholders that refer to values in an array of Objects passed to the exception when it's thrown. When the message is formatted for display, these parameters are placed into slots in the message (the first slot is 0) using the standard formatting capabilities provided by java.text.MessageFormat. Following is a an entry from CSMessageBundle.java.
public static final String EXC_VAL_ATTR_SET_FAILED = "03101"; ... // Description: Generic Attribute validation failure. // set<Attribute> method failed to set the value. // Parameter 0: Ignored. // Parameter 1: Entity Object/View Object name. // Parameter 2: Attribute name. // Parameter 3: New value {EXC_VAL_ATTR_SET_FAILED, "Attribute set with value {3} for {2} in {1} failed."},
Applications may define subclasses of most JBO exceptions. To do this the application should override the following methods to provide the correct set of values for the messaging services:
You can use Business Component for Java exception classes in your own code to indicate errors, and you can create custom exception classes. For example, you can extend JboException and override the getProductCode method, making it return values appropriate for your exception.
You can throw a JboException by using a statement like this:
throw new JboException("Don't do that.", "101", null );
The drawback to this approach is that the hard-coded error message is not easy to localize.
To make an exception localizable into different national languages, use the NLS framework. First, create a resource bundle for your error messages. The following code example defines a bundle named MyMsgBundle that stores three error messages.
import oracle.jbo.common.util.CheckedListResourceBundle; public class MyMsgBundle extends CheckedListResourceBundle // String Constants public static final String BAD_EMPNO = "101"; public static final String DEPT_NOT_FOUND = "102"; public static final String NOT_IN_DEPT = "103"; ... //Private 2-D array of key-value pairs private static final Object[][] sMessageStrings = { ... { BAD_EMPNO, "Invalid employee number." }, { DEPT_NOT_FOUND, "Department {0} does not exist." } { NOT_IN_DEPT, "Employee {0} not found in Department {1}." } ... } }
Then you can use the resource bundle class to define a value to pass to the constructor for your exception class or JboException:
throw new JboException(MyMsgBundle.class // Class of Bundle MyMsgBundle.DEPT_NOT_FOUND // String Constant new Object[1] { localVar1 } //Arguments to message );
JboException provides a getLocalizedMessage method which returns the message formatted for the specified locale.
The NLS framework translates the message text when the client calls getLocalizedMessage rather than at creation time because the client may need to present the message in a number of different languages. This mechanism provides a single point for localizing and formatting messages.
JboException can marshal itself across a network. It handles NLS issues for the middle tier, enabling one instance of a middle-tier component to serve (for example) French users and English users at the same time.
If your exception contains member data that must be marshalled, extend JboException. If you need to provide more control over the serialized stream, implement the readObject and writeObject methods. The Java serialization mechanism uses these methods to serialize/deserialize an object. You might want implement these methods if you want to:
exclude some members from being serialized
For example, suppose you have the class MyException (shown below), and you want to carry memberA and memberB across tiers:
public class MyException extends JboException { int memberA; String memberB; ... }
Write code like the following in MyException:
private void writeObject(ObjectOutputStream out) throws IOException { out.writeInt(memberA); out.writeUTF(mEntityRowHandle); }
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { memberA = in.readInt(); memberB = in.readUTF(); }
Field Summary | |
protected boolean |
mHasPeerException
|
Constructor Summary | |
JboException(java.lang.Class resBundleClass,
java.lang.String errorCode,
java.lang.Object[] params)
Creates a translatable exception. |
|
JboException(java.lang.Class resBundleClass,
java.lang.String errorCode,
java.lang.Object[] params,
java.lang.Exception[] excs)
Creates a translatable exception. |
|
JboException(java.lang.Class resBundleClass,
java.lang.String errorCode,
java.lang.Object[] params,
JboException[] exceptions)
Creates a translatable exception. |
|
JboException(java.lang.String message)
Create a non-formattable exception. |
|
JboException(java.lang.String message,
java.lang.String errorCode,
java.lang.Object[] params)
Creates a formattable but non-localizable exception. |
|
JboException(java.lang.Throwable ex)
Converts an exception into a non-formattable JboException . |
Method Summary | |
void |
addToDetails(java.lang.Object obj)
Adds to the list of details. |
void |
addToExceptions(java.lang.Throwable exception)
Adds an exception to the list of detail exceptions. |
boolean |
containsException(java.lang.Throwable e)
Returns true if this exception contains the given Throwable object in it's details or if one of it's details contains the Throwable object. |
void |
doEntityToVOMapping(ApplicationModule rootAm,
ViewObject[] vos)
|
java.lang.String |
getBaseMessage()
Gets the message without localizing it or inserting parameters. |
java.lang.String |
getDetailMessage()
Constructs a message incorporating the list of details. |
java.lang.Object[] |
getDetails()
Gets the list of objects and exceptions that spawned this message. |
java.lang.String |
getErrorCode()
Returns the message's error code. |
java.lang.Object[] |
getErrorParameters()
Returns the error message parameters. |
java.lang.Throwable[] |
getExceptions()
Gets the list of exceptions that spawned this message. |
protected JboExceptionHelper |
getJboExceptionHelper()
Get the Helper object for this exception. |
java.lang.String |
getLocalizedBaseMessage(java.util.Locale l)
Localizes the message text for a specific Locale , but without
inserting parameters. |
java.lang.String |
getLocalizedMessage(java.util.Locale l)
Formats the message text for a specific Locale . |
java.lang.String |
getMessage()
Formats the message text for the locale if set into this exception and otherwise use the default locale. |
java.lang.String |
getProductCode()
Returns a message's product code. |
java.lang.Class |
getResourceClass()
Gets the class of the resource bundle used to localize messages. |
java.lang.String |
getResourceName()
Returns the name of the ResourceBundle used to localize or resolve
messages. |
java.lang.Object |
getSource()
|
static java.lang.String |
getTypeNameFromId(int id)
|
boolean |
hasPeerExceptions()
|
boolean |
isAppendCodes()
Returns true if this exception has to prefix the error message with Product and Message Ids. |
boolean |
isLocalizable()
Tests this message's localizability. |
boolean |
needsEntityToVOMapping()
|
void |
printStackTrace()
Prints this Throwable and its backtrace to the
standard error stream. |
void |
printStackTrace(java.io.PrintStream s)
Prints this Throwable and its backtrace to the
specified print stream. |
void |
printStackTrace(java.io.PrintWriter s)
Prints this Throwable and its backtrace to the specified
print writer. |
void |
setAppendCodes(boolean flag)
Set false if this exception should not prefix the error message with Product and Message Ids. |
void |
setApplicationModule(ApplicationModule am)
|
void |
setDetails(java.lang.Object[] details)
Sets the list of details. |
protected void |
setErrorParameters(java.lang.Object[] params)
Resets the error parameters. |
void |
setExceptions(java.lang.Throwable[] details)
Sets the list of details. |
void |
setLocaleContext(LocaleContext locale)
Set the default locale for this exception to the given locale. |
void |
setNeedsEntityToVOMapping(boolean flag)
|
void |
setSource(java.lang.Object id)
|
Methods inherited from class java.lang.Throwable |
fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, initCause, setStackTrace, toString |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
protected boolean mHasPeerException
Constructor Detail |
public JboException(java.lang.String message, java.lang.String errorCode, java.lang.Object[] params)
If a localizable exception is desired, use the
JboException(Class, String, Object[])
constructor.
message
- the unformatted text of the message.errorCode
- an error code.params
- the error message's parameters.ResourceBundle
public JboException(java.lang.String message)
message
- the text of the message.public JboException(java.lang.Throwable ex)
JboException
.
ex
- an excpetion to be added to the details list.public JboException(java.lang.Class resBundleClass, java.lang.String errorCode, java.lang.Object[] params)
resBundleClass
- a subclass class of the ResourceBundle
that will supply the message text.errorCode
- an error code associated with a message in the
resource bundle.params
- the error message's parameters.ResourceBundle
public JboException(java.lang.Class resBundleClass, java.lang.String errorCode, java.lang.Object[] params, JboException[] exceptions)
resBundleClass
- a subclass class of the ResourceBundle
that will supply the message text.errorCode
- an error code associated with a message in the
resource bundle.params
- the error message's parameters.ResourceBundle
public JboException(java.lang.Class resBundleClass, java.lang.String errorCode, java.lang.Object[] params, java.lang.Exception[] excs)
**Primarily for use by Oracle Applications.** BC4J framework does not use this exception nor throws such an exception.
resBundleClass
- a subclass class of the ResourceBundle
that will supply the message text.errorCode
- an error code associated with a message in the
resource bundle.params
- the error message's parameters.excs
- An array if exceptions that this exception bundles as peer exceptions.ResourceBundle
Method Detail |
public final boolean hasPeerExceptions()
public java.lang.String getMessage()
getMessage
in interface JboMessage
public java.lang.String getLocalizedMessage(java.util.Locale l)
Locale
.
getLocalizedMessage
in interface JboMessage
l
- a locale.
public java.lang.String getBaseMessage()
getBaseMessage
in interface JboMessage
public java.lang.Class getResourceClass()
getResourceClass
in interface JboMessage
ResourceBundle
.public java.lang.String getLocalizedBaseMessage(java.util.Locale l)
Locale
, but without
inserting parameters.
getLocalizedBaseMessage
in interface JboMessage
l
- a locale.
public java.lang.String getResourceName()
ResourceBundle
used to localize or resolve
messages.
getResourceName
in interface JboMessage
public java.lang.Object[] getErrorParameters()
getErrorParameters
in interface JboMessage
protected void setErrorParameters(java.lang.Object[] params)
public java.lang.String getErrorCode()
getErrorCode
in interface JboMessage
public java.lang.String getProductCode()
getProductCode
in interface JboMessage
JBO_PRODUCT_CODE
.public java.lang.Object[] getDetails()
Details are usually used to accommodate lower-level exceptions. For example, if a SQLException is thrown in some low-level code, the Business Components for Java framework can catch it and represent it as one of the Business Component exceptions. The original SQLException becomes the first entry in the detail.
getDetails
in interface JboMessage
public java.lang.Throwable[] getExceptions()
Details are usually used to accommodate lower-level exceptions. For example, if a SQLException is thrown in some low-level code, the Business Components for Java framework can catch it and represent it as one of the Business Component exceptions. The original SQLException becomes the first entry in the detail.
public java.lang.String getDetailMessage()
getDetailMessage
in interface JboMessage
public void setDetails(java.lang.Object[] details)
setDetails
in interface JboMessage
details
- an array which replaces the current list of details.
array in this exception object.public void setExceptions(java.lang.Throwable[] details)
details
- a list of Throwable exception objects
array in this exception object.public void addToDetails(java.lang.Object obj)
addToDetails
in interface JboMessage
obj
- an object to add to the details list.public void addToExceptions(java.lang.Throwable exception)
exception
- a Throwable exception object to add to the details list.public boolean isLocalizable()
isLocalizable
in interface JboMessage
true
if this message can be localized.protected JboExceptionHelper getJboExceptionHelper()
JboExceptionHelper
public static java.lang.String getTypeNameFromId(int id)
public void setApplicationModule(ApplicationModule am)
public void printStackTrace()
Throwable
and its backtrace to the
standard error stream. This method prints a stack trace for this
Throwable
object on the error output stream that is
the value of the field System.err
. The first line of
output contains the result of the Throwable.toString()
method for
this object. Remaining lines represent data previously recorded by
the method Throwable.fillInStackTrace()
. The format of this
information depends on the implementation, but the following
example may be regarded as typical:
This example was produced by running the program:java.lang.NullPointerException at MyClass.mash(MyClass.java:9) at MyClass.crunch(MyClass.java:6) at MyClass.main(MyClass.java:3)
class MyClass { public static void main(String[] argv) { crunch(null); } static void crunch(int[] a) { mash(a); } static void mash(int[] b) { System.out.println(b[0]); } }
public void printStackTrace(java.io.PrintStream s)
Throwable
and its backtrace to the
specified print stream.
public void printStackTrace(java.io.PrintWriter s)
Throwable
and its backtrace to the specified
print writer.
public final void setNeedsEntityToVOMapping(boolean flag)
public final boolean needsEntityToVOMapping()
public void doEntityToVOMapping(ApplicationModule rootAm, ViewObject[] vos)
public boolean isAppendCodes()
public void setAppendCodes(boolean flag)
public void setSource(java.lang.Object id)
public java.lang.Object getSource()
public boolean containsException(java.lang.Throwable e)
public void setLocaleContext(LocaleContext locale)
|
Oracle ADF Model and Business Components API Reference 10.1.2 B14022-01 | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Copyright © 1997, 2004, Oracle. All rights reserved.