The exception handling package provides a base seperation of business and system
      exceptions, allows for nested exception stacks, and has a convenience method for
      retrieving the stack trace as a String.
      The class hierarchy is as follows:
       
      The BaseException interface defines common functionality at the root of the two
      base classes, BaseRuntimeException and BaseApplicationException.  These
      enforce the conceptual notion and handling of two distinct exception types, application
      business exceptions and system exceptions.  Application exceptions represent issues
      exceptional to normal business flow, such as 'funds not available'.  System exceptions
      are typically environmental and development time issues, such as misconfigured property
      files, code issues, or unavailable databases.  Arch4J draws this distinction so that the
      application developer may focus his code on the application issues at hand, not on the
      environment the code lives in.  System exceptions are java.lang.RuntimeExceptions
      and therefore do not need to be declared or handled by business code.  Using system
      exceptions requires that business code lives in a contained environment that will eventually
      handle these.  The EJB environment is a good example of this.  System exceptions are
      automatically caught, logged, and indicated to client code without cluttering up the
      application code.  Arch4J defines other, non-EJB environments which are reinforced by the
      code generator.
      Nested exception handling is quite useful when it's necessary to add contextual
      information to an exception or to  repackage an exception in another to meet a method's
      declared interface.  Note that it is very unuseful to simply catch, nest and rethrow
      exceptions at every level of business logic.  This leads to cluttered log files.  JDK 1.4
      introduced nested exceptions to the language and Arch4J will soon incorporate this into its
      own solution without modifying the existing exception interface.
      The getStackTraceString() method is simply a convenience so that a developer can
      get the stack trace as a String for logging or error debugging.