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

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


The following commit(s) were added to refs/heads/master by this push:
     new b570491ed4 [NO ISSUE][GEO] Reuse ObjectMapper instances in geo 
functions
b570491ed4 is described below

commit b570491ed490053212c5d855d1d7641de102ba9c
Author: sshiv012 <[email protected]>
AuthorDate: Mon Jan 5 03:09:20 2026 -0800

    [NO ISSUE][GEO] Reuse ObjectMapper instances in geo functions
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details :
    - Refactor PrintTools.geometryToGeoJSON() to use a static ObjectMapper
    - Refactor AGeometry.toJSON() to use a static ObjectMapper
    - Avoids creating new ObjectMapper and registering JtsModule on every call
    - Added right number of args for Parsing Error, 124
    
    Change-Id: Ib4cd841fa40d4fdd5bd350d6167a6737e5ad6767
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20763
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: Ian Maxon <[email protected]>
---
 .../evaluators/functions/STAsGeoJSONDescriptor.java    | 17 ++++++++---------
 .../dataflow/data/nontagged/printers/PrintTools.java   | 11 ++++++++---
 .../java/org/apache/asterix/om/base/AGeometry.java     | 18 +++++++++++-------
 3 files changed, 27 insertions(+), 19 deletions(-)

diff --git 
a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STAsGeoJSONDescriptor.java
 
b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STAsGeoJSONDescriptor.java
index f5d2217005..55fffcbe4e 100644
--- 
a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STAsGeoJSONDescriptor.java
+++ 
b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STAsGeoJSONDescriptor.java
@@ -36,23 +36,22 @@ public class STAsGeoJSONDescriptor extends 
AbstractSTSingleGeometryDescriptor {
     private static final long serialVersionUID = 1L;
     public static final IFunctionDescriptorFactory FACTORY = 
STAsGeoJSONDescriptor::new;
     private static final Logger LOGGER = LogManager.getLogger();
-    private final ObjectMapper mapper;
+    private static final ObjectMapper GEO_JSON_MAPPER = createObjectMapper();
 
-    public STAsGeoJSONDescriptor() {
-        mapper = new ObjectMapper();
+    private static ObjectMapper createObjectMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.registerModule(new JtsModule());
+        return mapper;
     }
 
     @Override
     protected Object evaluateOGCGeometry(Geometry geometry) throws 
HyracksDataException {
-        String geoJson = null;
         try {
-            mapper.registerModule(new JtsModule());
-            geoJson = mapper.writeValueAsString(geometry);
+            return GEO_JSON_MAPPER.writeValueAsString(geometry);
         } catch (JsonProcessingException e) {
-            LOGGER.debug("JSON Processing exception during STAsGeoJSON 
function");
-            throw HyracksDataException.create(ErrorCode.PARSING_ERROR);
+            LOGGER.debug("JSON Processing exception during STAsGeoJSON 
function", e);
+            throw HyracksDataException.create(ErrorCode.PARSING_ERROR, 
"STAsGeoJSON", e.getMessage());
         }
-        return geoJson;
     }
 
     @Override
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/PrintTools.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/PrintTools.java
index 92fb1bb359..8c5dfbbbbb 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/PrintTools.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/PrintTools.java
@@ -47,6 +47,13 @@ public class PrintTools {
 
     private static final GregorianCalendarSystem gCalInstance = 
GregorianCalendarSystem.getInstance();
     private static final long CHRONON_OF_DAY = TimeUnit.DAYS.toMillis(1);
+    private static final ObjectMapper GEO_JSON_MAPPER = createGeoJsonMapper();
+
+    private static ObjectMapper createGeoJsonMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.registerModule(new JtsModule());
+        return mapper;
+    }
 
     public static void printDateString(byte[] b, int s, int l, PrintStream ps) 
throws HyracksDataException {
         long chrononTime = getDateChronon(b, s + 1);
@@ -517,10 +524,8 @@ public class PrintTools {
         if (geometry == null) {
             return "";
         }
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.registerModule(new JtsModule());
         try {
-            return mapper.writeValueAsString(geometry);
+            return GEO_JSON_MAPPER.writeValueAsString(geometry);
         } catch (JsonProcessingException e) {
             return "";
         }
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AGeometry.java 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AGeometry.java
index c9d66b4e67..94b00579ae 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AGeometry.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AGeometry.java
@@ -30,6 +30,14 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 
 public class AGeometry implements IAObject {
 
+    private static final ObjectMapper GEO_JSON_MAPPER = createObjectMapper();
+
+    private static ObjectMapper createObjectMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.registerModule(new JtsModule());
+        return mapper;
+    }
+
     protected Geometry geometry;
 
     public AGeometry(Geometry geometry) {
@@ -67,15 +75,11 @@ public class AGeometry implements IAObject {
 
     @Override
     public ObjectNode toJSON() {
-        ObjectMapper om = new ObjectMapper();
-        om.registerModule(new JtsModule());
-        ObjectNode json;
         try {
-            String geoJson = om.writeValueAsString(geometry);
-            json = (ObjectNode) om.readTree(geoJson);
+            String geoJson = GEO_JSON_MAPPER.writeValueAsString(geometry);
+            return (ObjectNode) GEO_JSON_MAPPER.readTree(geoJson);
         } catch (IOException e) {
-            return om.createObjectNode();
+            return GEO_JSON_MAPPER.createObjectNode();
         }
-        return json;
     }
 }

Reply via email to