void LoggingIntegrationObserver<Scalar>::observeFailedTimeStep(
    const StepperBase<Scalar> &stepper,
    const StepControlInfo<Scalar> &stepCtrlInfo,
    const int timeStepIter
    )
{
  logCall(nameObserveFailedTimeStep_);
}				
RCP<IntegrationObserverBase<Scalar> > 
LoggingIntegrationObserver<Scalar>::cloneIntegrationObserver() const
{
  logCall(nameCloneIntegrationObserver_);
  Teuchos::RCP<IntegrationObserverBase<Scalar> > observer = 
    Teuchos::rcp(new LoggingIntegrationObserver<Scalar>(*this));
  return observer;
}
jobject initCallHandler(DCArgs* args, CallTempStruct** callOut, JNIEnv* env, CommonCallbackInfo* info)
{
    jobject instance = NULL;
    CallTempStruct* call = NULL;

    if (args) {
        env = (JNIEnv*)dcbArgPointer(args); // first arg = Java env
        instance = dcbArgPointer(args); // skip second arg = jclass or jobject
    }
    if (env) {
        //initMethods(env);
        *callOut = call = getTempCallStruct(env);
        call->env = env;
    } else
        *callOut = NULL;

    if (gLog && call && info)
        logCall(call->env, info->fMethod);

    return instance;
}
void LoggingIntegrationObserver<Scalar>::
observeEndTimeIntegration(const StepperBase<Scalar> &stepper)
{
  logCall(nameObserveEndTimeIntegration_);
}				
void 
LoggingIntegrationObserver<Scalar>::
resetIntegrationObserver(const TimeRange<Scalar> &integrationTimeDomain)
{
  logCall(nameResetIntegrationObserver_);
}