docs: void handleException(EJBKey key, TxCookieImpl txCookie,
                           ExceptionType type, EJBMethodInfoImpl methodInfo)
                      throws CSIException
      {
  
          if (type == ExceptionType.CHECKED_EXCEPTION) {
  
              // Checked exceptions always result in "normal" transaction
              // resolution semantics
  
              postInvoke(key, txCookie, methodInfo);
              return;
          }
  
          if (txCookie.beginner) {
  
              // Unchecked exceptions on container-started transactions
              // result in a rollback; the client will receive the original
              // exception (i.e. some RemoteException)
  
              rollback(true, key, methodInfo);
  
              // By returning, we'll end up throwing the exception which
              // caused this rollback to the client
  
              return;
          }
  
          // The container did not begin a transaction. If one exsits,
          // it must be client initialed global tx. Mark it for
          // rollback and throw TransactionRolledbackException
          //d174358
          if (globalTxExists(false))
          {
  
              // Control point on application thread for effecting       //LIDB1673.2.1.5
              // rollback in the case of timeout                        //LIDB1673.2.1.5//d171654
              // conditions.                                             //LIDB1673.2.1.5
              // completeTxTimeout will throw                            //LIDB1673.2.1.5
              // CSITransactionRolledbackException if the tran has timed out //LIDB1673.2.1.5
              txCtrl.completeTxTimeout(); //LIDB1673.2.1.5
              if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled())
              {
                  Tr.event(tc, "handleException: marking client transaction rollbackOnly"); //LIDB1673.2.1.5
              }
  
              rollback(false, key, methodInfo);
              throw new CSITransactionRolledbackException();
          }
  
          // LIDB2446: could be a shareable ltc which should be marked rollbackonly
          final LocalTransactionCoordinator coord = ltcCurrent.getLocalTranCoord();
          if (coord != null)
          {
              if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled())
              {
                  Tr.event(tc, "handleException: marking client LTC rollbackOnly");
              }
              coord.setRollbackOnly();
          }
  
      }