=== modified file 'src/com/goldencode/p2j/jmx/NanoTimer.java'
--- old/src/com/goldencode/p2j/jmx/NanoTimer.java	2022-10-31 09:52:21 +0000
+++ new/src/com/goldencode/p2j/jmx/NanoTimer.java	2023-02-16 10:23:10 +0000
@@ -109,6 +109,7 @@
    {
        start = System.nanoTime();
    }
+   
    /** Stop operation and update counter */
    public void stop()
    {
@@ -158,4 +159,52 @@
            stop();
        }
    }
+
+   /**
+    * Execute operation and measure execution time
+    * 
+    * @param   <T> 
+    *          The type of the return value for the operation to be executed.
+    * @param   r
+    *          operation to be executed
+    *        
+    * @return  The result of the operation to be executed
+    */
+   public <T> T timerWithReturn(ReturningOperation<T> r)
+   {
+       if (!enabled)
+       {
+           try
+           {
+              return r.exec();
+           } 
+           catch (RuntimeException re)
+           {
+              // unchecked exception propagate as is.  otherwise, we can't process ConditionException.
+              throw re;
+           }
+           catch (Exception e)
+           {
+              throw new RuntimeException(e);
+           }
+       }
+       start();
+       try
+       {
+          return r.exec();
+       }
+       catch (RuntimeException re)
+       {
+          // unchecked exception propagate as is.  otherwise, we can't process ConditionException.
+          throw re;
+       }
+       catch (Exception e)
+       {
+          throw new RuntimeException(e);
+       }
+       finally
+       {
+           stop();
+       }
+   }
 }

=== added file 'src/com/goldencode/p2j/jmx/ReturningOperation.java'
--- old/src/com/goldencode/p2j/jmx/ReturningOperation.java	1970-01-01 00:00:00 +0000
+++ new/src/com/goldencode/p2j/jmx/ReturningOperation.java	2023-02-16 10:24:40 +0000
@@ -0,0 +1,82 @@
+/*
+** Module   : ReturningOperation.java
+** Abstract : Functional interface for operations which may throw exceptions and return a value
+** ("Supplier with exceptions")  
+**
+** Copyright (c) 2023, Golden Code Development Corporation.
+**
+** -#- -I- --Date-- ---------------------------------Description----------------------------------
+** 001 AL2 20220216 Created initial version.
+
+*/ 
+
+/*
+** This program is free software: you can redistribute it and/or modify
+** it under the terms of the GNU Affero General Public License as
+** published by the Free Software Foundation, either version 3 of the
+** License, or (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU Affero General Public License for more details.
+**
+** You may find a copy of the GNU Affero GPL version 3 at the following
+** location: https://www.gnu.org/licenses/agpl-3.0.en.html
+** 
+** Additional terms under GNU Affero GPL version 3 section 7:
+** 
+**   Under Section 7 of the GNU Affero GPL version 3, the following additional
+**   terms apply to the works covered under the License.  These additional terms
+**   are non-permissive additional terms allowed under Section 7 of the GNU
+**   Affero GPL version 3 and may not be removed by you.
+** 
+**   0. Attribution Requirement.
+** 
+**     You must preserve all legal notices or author attributions in the covered
+**     work or Appropriate Legal Notices displayed by works containing the covered
+**     work.  You may not remove from the covered work any author or developer
+**     credit already included within the covered work.
+** 
+**   1. No License To Use Trademarks.
+** 
+**     This license does not grant any license or rights to use the trademarks
+**     Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks
+**     of Golden Code Development Corporation. You are not authorized to use the
+**     name Golden Code, FWD, or the names of any author or contributor, for
+**     publicity purposes without written authorization.
+** 
+**   2. No Misrepresentation of Affiliation.
+** 
+**     You may not represent yourself as Golden Code Development Corporation or FWD.
+** 
+**     You may not represent yourself for publicity purposes as associated with
+**     Golden Code Development Corporation, FWD, or any author or contributor to
+**     the covered work, without written authorization.
+** 
+**   3. No Misrepresentation of Source or Origin.
+** 
+**     You may not represent the covered work as solely your work.  All modified
+**     versions of the covered work must be marked in a reasonable way to make it
+**     clear that the modified work is not originating from Golden Code Development
+**     Corporation or FWD.  All modified versions must contain the notices of
+**     attribution required in this license.
+*/
+
+package com.goldencode.p2j.jmx;
+
+/** 
+ * Functional interface for operations which may throw exceptions and return a value 
+ */
+@FunctionalInterface
+public interface ReturningOperation<T>
+{
+   /**
+    * Execute operation
+    * 
+    * @return  The supplied value.
+    * @throws  Exception
+    */
+   public T exec() 
+   throws Exception;
+}
\ No newline at end of file

=== modified file 'src/com/goldencode/p2j/security/ContextLocal.java'
--- old/src/com/goldencode/p2j/security/ContextLocal.java	2022-10-31 09:52:21 +0000
+++ new/src/com/goldencode/p2j/security/ContextLocal.java	2023-02-16 10:26:07 +0000
@@ -2,7 +2,7 @@
 ** Module   : ContextLocal.java
 ** Abstract : Container for a context local variable, using the ThreadLocal idiom
 **
-** Copyright (c) 2006-2022, Golden Code Development Corporation.
+** Copyright (c) 2006-2023, Golden Code Development Corporation.
 **
 ** -#- -I- --Date-- --JPRM-- ----------------------------------Description-----------------------------------
 ** 001 ECF 20060120   @24009 Created initial version. Contains a context
@@ -73,6 +73,7 @@
 **                           an uninitialized thread-local variable. initialValue() is only invoked once for
 **                           a thread-local, unless remove() is called.
 **     CA  20221031          Added JMX instrumentation for the 'get()' method.
+**     AL2 20230216          Avoid using an array to store the return value of the JMX instrumentation 
 */
 
 /*
@@ -454,12 +455,8 @@
     * @return  Context local variable.
     */
    public final T get(boolean create)
-   {
-      Object[] res = new Object[1];
-      
-      GET.timer(() -> res[0] = getImpl(create));
-      
-      return (T) res[0];
+   {      
+      return GET.timerWithReturn(() -> getImpl(create));
    }
    
    /**

