HTRACE-349. htrace-core4 implementation should use JDK7 try-with-resources (Mike Drob via cmccabe)
diff --git a/htrace-core4/src/main/java/org/apache/htrace/core/TraceCallable.java b/htrace-core4/src/main/java/org/apache/htrace/core/TraceCallable.java
index a0fec17..f5434e1 100644
--- a/htrace-core4/src/main/java/org/apache/htrace/core/TraceCallable.java
+++ b/htrace-core4/src/main/java/org/apache/htrace/core/TraceCallable.java
@@ -41,12 +41,8 @@
 
   @Override
   public V call() throws Exception {
-    TraceScope chunk = tracer.newScope(description,
-        parent.getSpan().getSpanId());
-    try {
+    try (TraceScope chunk = tracer.newScope(description, parent.getSpan().getSpanId())) {
       return impl.call();
-    } finally {
-      chunk.close();
     }
   }
 
diff --git a/htrace-core4/src/main/java/org/apache/htrace/core/TraceRunnable.java b/htrace-core4/src/main/java/org/apache/htrace/core/TraceRunnable.java
index 8f98708..abf530f 100644
--- a/htrace-core4/src/main/java/org/apache/htrace/core/TraceRunnable.java
+++ b/htrace-core4/src/main/java/org/apache/htrace/core/TraceRunnable.java
@@ -39,12 +39,8 @@
 
   @Override
   public void run() {
-    TraceScope chunk = tracer.newScope(description,
-        parent.getSpan().getSpanId());
-    try {
+    try (TraceScope chunk = tracer.newScope(description, parent.getSpan().getSpanId())) {
       runnable.run();
-    } finally {
-      chunk.close();
     }
   }
 
diff --git a/htrace-core4/src/main/java/org/apache/htrace/core/Tracer.java b/htrace-core4/src/main/java/org/apache/htrace/core/Tracer.java
index a683716..29fd14e 100644
--- a/htrace-core4/src/main/java/org/apache/htrace/core/Tracer.java
+++ b/htrace-core4/src/main/java/org/apache/htrace/core/Tracer.java
@@ -464,19 +464,15 @@
    */
   @SuppressWarnings("unchecked")
   <T, V> T createProxy(final T instance) {
-    final Tracer tracer = this;
     InvocationHandler handler = new InvocationHandler() {
       @Override
       public Object invoke(Object obj, Method method, Object[] args)
           throws Throwable {
-        TraceScope scope = tracer.newScope(method.getName());
-        try {
+        try (TraceScope scope = Tracer.this.newScope(method.getName());) {
           return method.invoke(instance, args);
         } catch (Throwable ex) {
           ex.printStackTrace();
           throw ex;
-        } finally {
-          scope.close();
         }
       }
     };
diff --git a/htrace-core4/src/test/java/org/apache/htrace/core/TraceCreator.java b/htrace-core4/src/test/java/org/apache/htrace/core/TraceCreator.java
index b843999..43fda9e 100644
--- a/htrace-core4/src/test/java/org/apache/htrace/core/TraceCreator.java
+++ b/htrace-core4/src/test/java/org/apache/htrace/core/TraceCreator.java
@@ -34,20 +34,14 @@
   }
 
   public void createSampleRpcTrace() {
-    TraceScope s = tracer.newScope(RPC_TRACE_ROOT);
-    try {
+    try (TraceScope s = tracer.newScope(RPC_TRACE_ROOT)) {
       pretendRpcSend();
-    } finally {
-      s.close();
     }
   }
 
   public void createSimpleTrace() {
-    TraceScope s = tracer.newScope(SIMPLE_TRACE_ROOT);
-    try {
+    try (TraceScope s = tracer.newScope(SIMPLE_TRACE_ROOT)) {
       importantWork1();
-    } finally {
-      s.close();
     }
   }
 
@@ -55,8 +49,7 @@
    * Creates the demo trace (will create different traces from call to call).
    */
   public void createThreadedTrace() {
-    TraceScope s = tracer.newScope(THREADED_TRACE_ROOT);
-    try {
+    try (TraceScope s = tracer.newScope(THREADED_TRACE_ROOT)) {
       Random r = ThreadLocalRandom.current();
       int numThreads = r.nextInt(4) + 1;
       Thread[] threads = new Thread[numThreads];
@@ -74,31 +67,23 @@
         }
       }
       importantWork1();
-    } finally {
-      s.close();
     }
   }
 
   private void importantWork1() {
-    TraceScope cur = tracer.newScope("important work 1");
-    try {
+    try (TraceScope cur = tracer.newScope("important work 1")) {
       Thread.sleep((long) (2000 * Math.random()));
       importantWork2();
     } catch (InterruptedException e) {
       Thread.currentThread().interrupt();
-    } finally {
-      cur.close();
     }
   }
 
   private void importantWork2() {
-    TraceScope cur = tracer.newScope("important work 2");
-    try {
+    try (TraceScope cur = tracer.newScope("important work 2")) {
       Thread.sleep((long) (2000 * Math.random()));
     } catch (InterruptedException e) {
       Thread.currentThread().interrupt();
-    } finally {
-      cur.close();
     }
   }
 
@@ -113,13 +98,10 @@
       } catch (InterruptedException ie) {
         Thread.currentThread().interrupt();
       } catch (ArithmeticException ae) {
-        TraceScope c = tracer.newScope("dealing with arithmetic exception.");
-        try {
+        try (TraceScope c = tracer.newScope("dealing with arithmetic exception.")) {
           Thread.sleep((long) (3000 * Math.random()));
         } catch (InterruptedException ie1) {
           Thread.currentThread().interrupt();
-        } finally {
-          c.close();
         }
       }
     }
@@ -131,11 +113,8 @@
   }
 
   public void pretendRpcReceiveWithTraceInfo(SpanId parentId) {
-    TraceScope s = tracer.newScope("received RPC", parentId);
-    try {
+    try (TraceScope s = tracer.newScope("received RPC", parentId)) {
       importantWork1();
-    } finally {
-      s.close();
     }
   }
 }