diff --git a/commons-rdf-jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdComparisonTest.java b/commons-rdf-jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdComparisonTest.java
index 17adab2..742a5e5 100644
--- a/commons-rdf-jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdComparisonTest.java
+++ b/commons-rdf-jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdComparisonTest.java
@@ -82,60 +82,65 @@
 
     @Test
     public void grahContains() throws Exception {
-        final JsonLdGraph graph = rdf.createGraph();
-        final JsonLdIRI s = rdf.createIRI("http://example.com/s");
-        final JsonLdIRI p = rdf.createIRI("http://example.com/p");
-        final JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+        try (final JsonLdGraph graph = rdf.createGraph()) {
+            final JsonLdIRI s = rdf.createIRI("http://example.com/s");
+            final JsonLdIRI p = rdf.createIRI("http://example.com/p");
+            final JsonLdLiteral lit1 = rdf.createLiteral("Hello");
 
-        graph.add(s, p, lit1);
-        assertTrue(graph.contains(s, p, rdf.createLiteral("Hello")));
-        assertTrue(graph.contains(s, p, rdf.createLiteral("Hello", Types.XSD_STRING)));
-        assertFalse(graph.contains(s, p, rdf.createLiteral("Hello", Types.XSD_NORMALIZEDSTRING)));
-        assertFalse(graph.contains(s, p, rdf.createLiteral("Hello", "en")));
-        assertFalse(graph.contains(s, p, rdf.createLiteral("Other")));
+            graph.add(s, p, lit1);
+            assertTrue(graph.contains(s, p, rdf.createLiteral("Hello")));
+            assertTrue(graph.contains(s, p, rdf.createLiteral("Hello", Types.XSD_STRING)));
+            assertFalse(graph.contains(s, p, rdf.createLiteral("Hello", Types.XSD_NORMALIZEDSTRING)));
+            assertFalse(graph.contains(s, p, rdf.createLiteral("Hello", "en")));
+            assertFalse(graph.contains(s, p, rdf.createLiteral("Other")));
+        }
     }
 
     @Test
     public void datasetContains() throws Exception {
-        final JsonLdDataset dataset = rdf.createDataset();
-        final JsonLdIRI s = rdf.createIRI("http://example.com/s");
-        final JsonLdIRI p = rdf.createIRI("http://example.com/p");
-        final JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+        try (final JsonLdDataset dataset = rdf.createDataset()) {
+            final JsonLdIRI s = rdf.createIRI("http://example.com/s");
+            final JsonLdIRI p = rdf.createIRI("http://example.com/p");
+            final JsonLdLiteral lit1 = rdf.createLiteral("Hello");
 
-        dataset.add(null, s, p, lit1);
-        assertTrue(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello")));
-        assertTrue(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello", Types.XSD_STRING)));
-        assertFalse(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello", Types.XSD_NORMALIZEDSTRING)));
-        assertFalse(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello", "en")));
-        assertFalse(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Other")));
+            dataset.add(null, s, p, lit1);
+            assertTrue(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello")));
+            assertTrue(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello", Types.XSD_STRING)));
+            assertFalse(
+                    dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello", Types.XSD_NORMALIZEDSTRING)));
+            assertFalse(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello", "en")));
+            assertFalse(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Other")));
+        }
     }
 
     @Test
     public void datasetRemove() throws Exception {
-        final JsonLdDataset dataset = rdf.createDataset();
-        final JsonLdIRI s = rdf.createIRI("http://example.com/s");
-        final JsonLdIRI p = rdf.createIRI("http://example.com/p");
-        final JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+        try (final JsonLdDataset dataset = rdf.createDataset()) {
+            final JsonLdIRI s = rdf.createIRI("http://example.com/s");
+            final JsonLdIRI p = rdf.createIRI("http://example.com/p");
+            final JsonLdLiteral lit1 = rdf.createLiteral("Hello");
 
-        dataset.add(null, s, p, lit1);
-        assertTrue(dataset.contains(Optional.empty(), s, p, lit1));
-        dataset.remove(null, null, null, rdf.createLiteral("Other")); // should NOT match
-        assertTrue(dataset.contains(Optional.empty(), s, p, lit1));
-        dataset.remove(null, null, null, rdf.createLiteral("Hello", Types.XSD_STRING)); // SHOULD  match
-        assertFalse(dataset.contains(Optional.empty(), s, p, lit1));
+            dataset.add(null, s, p, lit1);
+            assertTrue(dataset.contains(Optional.empty(), s, p, lit1));
+            dataset.remove(null, null, null, rdf.createLiteral("Other")); // should NOT match
+            assertTrue(dataset.contains(Optional.empty(), s, p, lit1));
+            dataset.remove(null, null, null, rdf.createLiteral("Hello", Types.XSD_STRING)); // SHOULD match
+            assertFalse(dataset.contains(Optional.empty(), s, p, lit1));
+        }
     }
 
     @Test
     public void datasetStream() throws Exception {
-        final JsonLdDataset dataset = rdf.createDataset();
-        final JsonLdIRI s = rdf.createIRI("http://example.com/s");
-        final JsonLdIRI p = rdf.createIRI("http://example.com/p");
-        final JsonLdLiteral lit1 = rdf.createLiteral("Hello");
-        final JsonLdLiteral lit2 = rdf.createLiteral("Other");
+        try (final JsonLdDataset dataset = rdf.createDataset()) {
+            final JsonLdIRI s = rdf.createIRI("http://example.com/s");
+            final JsonLdIRI p = rdf.createIRI("http://example.com/p");
+            final JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+            final JsonLdLiteral lit2 = rdf.createLiteral("Other");
 
-        dataset.add(null, s, p, lit1);
-        assertTrue(dataset.stream(Optional.empty(), s, p, lit1).findAny().isPresent());
-        assertFalse(dataset.stream(Optional.empty(), s, p, lit2).findAny().isPresent());
+            dataset.add(null, s, p, lit1);
+            assertTrue(dataset.stream(Optional.empty(), s, p, lit1).findAny().isPresent());
+            assertFalse(dataset.stream(Optional.empty(), s, p, lit2).findAny().isPresent());
+        }
     }
 
 }
diff --git a/commons-rdf-jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdParserBuilderTest.java b/commons-rdf-jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdParserBuilderTest.java
index 17adfcb..33abb19 100644
--- a/commons-rdf-jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdParserBuilderTest.java
+++ b/commons-rdf-jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdParserBuilderTest.java
@@ -55,9 +55,10 @@
         final URL url = getClass().getResource(TEST_JSONLD);
         assertNotNull("Test resource not found: " + TEST_JSONLD, url);
         final IRI iri = factory.createIRI(url.toString());
-        final Graph g = factory.createGraph();
-        new JsonLdParser().contentType(RDFSyntax.JSONLD).source(iri).target(g).parse().get(10, TimeUnit.SECONDS);
-        checkGraph(g);
+        try (final Graph g = factory.createGraph()) {
+            new JsonLdParser().contentType(RDFSyntax.JSONLD).source(iri).target(g).parse().get(10, TimeUnit.SECONDS);
+            checkGraph(g);
+        }
     }
 
     @Test
@@ -68,20 +69,22 @@
             assertNotNull("Test resource not found: " + TEST_JSONLD, is);
             Files.copy(is, path, StandardCopyOption.REPLACE_EXISTING);
         }
-        final Graph g = factory.createGraph();
-        new JsonLdParser().contentType(RDFSyntax.JSONLD).source(path).target(g).parse().get(10, TimeUnit.SECONDS);
-        checkGraph(g);
+        try (final Graph g = factory.createGraph()) {
+            new JsonLdParser().contentType(RDFSyntax.JSONLD).source(path).target(g).parse().get(10, TimeUnit.SECONDS);
+            checkGraph(g);
+        }
     }
 
     @Test
     public void parseByStream() throws Exception {
-        final Graph g = factory.createGraph();
-        try (InputStream is = getClass().getResourceAsStream(TEST_JSONLD)) {
-            assertNotNull("Test resource not found: " + TEST_JSONLD, is);
-            new JsonLdParser().base("http://example.com/base/").contentType(RDFSyntax.JSONLD).source(is).target(g)
-                    .parse().get(10, TimeUnit.SECONDS);
+        try (final Graph g = factory.createGraph()) {
+            try (InputStream is = getClass().getResourceAsStream(TEST_JSONLD)) {
+                assertNotNull("Test resource not found: " + TEST_JSONLD, is);
+                new JsonLdParser().base("http://example.com/base/").contentType(RDFSyntax.JSONLD).source(is).target(g)
+                        .parse().get(10, TimeUnit.SECONDS);
+            }
+            checkGraph(g);
         }
-        checkGraph(g);
     }
 
     private void checkGraph(final Graph g) {
