You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2018/02/21 15:36:38 UTC

[isis] 10/11: ISIS-1867: refactors GridLoaderServiceDefault to cache its JAXBContext during initialization

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 88a2f665cfa1473873b2db4ed8f5ec52309ceddb
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Feb 21 15:21:11 2018 +0000

    ISIS-1867: refactors GridLoaderServiceDefault to cache its JAXBContext during initialization
---
 .../services/grid/GridLoaderServiceDefault.java    | 36 +++++++++++++---------
 1 file changed, 21 insertions(+), 15 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
index cd1a2ef..95cc52f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
@@ -25,6 +25,7 @@ import java.util.Objects;
 
 import javax.annotation.PostConstruct;
 import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
 
 import com.google.common.base.Function;
 import com.google.common.collect.FluentIterable;
@@ -60,20 +61,22 @@ public class GridLoaderServiceDefault implements GridLoaderService {
     // cache (used only in prototyping mode)
     private final Map<String, Grid> gridByXml = Maps.newHashMap();
 
-    private List<Class<? extends Grid>> pageImplementations;
-
-
+    private JAXBContext jaxbContext;
 
     @PostConstruct
     public void init(){
-        pageImplementations = FluentIterable.from(gridSystemServices)
-                .transform(new Function<GridSystemService, Class<? extends Grid>>() {
-                    @Override
-                    public Class<? extends Grid> apply(final GridSystemService gridSystemService) {
-                        return gridSystemService.gridImplementation();
-                    }
-                })
-                .toList();
+        final List<Class<? extends Grid>> pageImplementations =
+                FluentIterable.from(gridSystemServices)
+                    .transform(
+                            (Function<GridSystemService, Class<? extends Grid>>) gss -> gss.gridImplementation())
+                    .toList();
+
+        final Class[] clazz = pageImplementations.toArray(_Constants.emptyClasses);
+        try {
+            jaxbContext = JAXBContext.newInstance(clazz);
+        } catch (JAXBException e) {
+            // leave as null
+        }
     }
 
     @Override
@@ -126,11 +129,14 @@ public class GridLoaderServiceDefault implements GridLoaderService {
             }
         }
 
-        try {
-            // all known implementations of Page
-            final JAXBContext context = JAXBContext.newInstance(pageImplementations.toArray(_Constants.emptyClasses));
 
-            final Grid grid = (Grid) jaxbService.fromXml(context, xml);
+        try {
+            if(jaxbContext == null) {
+                // shouldn't occur, indicates that initialization failed to locate any GridSystemService implementations.
+                return null;
+            }
+            
+            final Grid grid = (Grid) jaxbService.fromXml(jaxbContext, xml);
             grid.setDomainClass(domainClass);
             if(supportsReloading()) {
                 gridByXml.put(xml, grid);

-- 
To stop receiving notification emails like this one, please contact
danhaywood@apache.org.