From ce078c9c70ff4b5b801a939e29190246f571062f Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 17 Jan 2014 10:54:34 +0000
Subject: [PATCH] Additional opendj-config-maven-plugin fix for OOME in small JVMs:

---
 opendj-sdk/opendj-config-maven-plugin/src/main/java/org/forgerock/opendj/maven/GenerateConfigMojo.java |   23 +++++++++++++----------
 1 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/opendj-sdk/opendj-config-maven-plugin/src/main/java/org/forgerock/opendj/maven/GenerateConfigMojo.java b/opendj-sdk/opendj-config-maven-plugin/src/main/java/org/forgerock/opendj/maven/GenerateConfigMojo.java
index ee94935..b126990 100644
--- a/opendj-sdk/opendj-config-maven-plugin/src/main/java/org/forgerock/opendj/maven/GenerateConfigMojo.java
+++ b/opendj-sdk/opendj-config-maven-plugin/src/main/java/org/forgerock/opendj/maven/GenerateConfigMojo.java
@@ -34,8 +34,8 @@
 import java.util.Enumeration;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
-import java.util.List;
 import java.util.Map;
+import java.util.Queue;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -154,7 +154,7 @@
     private Templates stylesheetProfileCLI;
     private Templates stylesheetMessages;
     private Templates stylesheetManifest;
-    private final List<Future<?>> tasks = new LinkedList<Future<?>>();
+    private final Queue<Future<?>> tasks = new LinkedList<Future<?>>();
 
     private final URIResolver resolver = new URIResolver() {
 
@@ -217,14 +217,14 @@
     private void createTransformTask(final StreamSourceFactory inputFactory, final StreamResult output,
             final Templates stylesheet, final ExecutorService executor, final String... parameters)
             throws Exception {
-        final Transformer transformer = stylesheet.newTransformer();
-        transformer.setURIResolver(resolver);
-        for (int i = 0; i < parameters.length; i += 2) {
-            transformer.setParameter(parameters[i], parameters[i + 1]);
-        }
         final Future<Void> future = executor.submit(new Callable<Void>() {
             @Override
             public Void call() throws Exception {
+                final Transformer transformer = stylesheet.newTransformer();
+                transformer.setURIResolver(resolver);
+                for (int i = 0; i < parameters.length; i += 2) {
+                    transformer.setParameter(parameters[i], parameters[i + 1]);
+                }
                 transformer.transform(inputFactory.newStreamSource(), output);
                 return null;
             }
@@ -325,8 +325,12 @@
                         "type", entry.getKey());
             }
 
-            // Wait for all transformations to complete and cleanup.
-            for (final Future<?> task : tasks) {
+            /*
+             * Wait for all transformations to complete and cleanup. Remove the
+             * completed tasks from the list as we go in order to free up
+             * memory.
+             */
+            for (Future<?> task = tasks.poll(); task != null; task = tasks.poll()) {
                 task.get();
             }
         } finally {
@@ -460,5 +464,4 @@
         }
         getLog().info("Found " + componentDescriptors.size() + " XML descriptors");
     }
-
 }

--
Gitblit v1.10.0