Example usage for java.util.concurrent ThreadPoolExecutor submit

List of usage examples for java.util.concurrent ThreadPoolExecutor submit

Introduction

In this page you can find the example usage for java.util.concurrent ThreadPoolExecutor submit.

Prototype

public Future<?> submit(Runnable task) 

Source Link

Usage

From source file:org.bimserver.GeometryGenerator.java

@SuppressWarnings("unchecked")
public GenerateGeometryResult generateGeometry(long uoid, final PluginManager pluginManager,
        final DatabaseSession databaseSession, final IfcModelInterface model, final int pid, final int rid,
        final boolean store, GeometryCache geometryCache)
        throws BimserverDatabaseException, GeometryGeneratingException {
    GenerateGeometryResult generateGeometryResult = new GenerateGeometryResult();
    packageMetaData = model.getPackageMetaData();
    productClass = packageMetaData.getEClass("IfcProduct");
    productRepresentationClass = packageMetaData.getEClass("IfcProductRepresentation");
    geometryFeature = productClass.getEStructuralFeature("geometry");
    representationFeature = productClass.getEStructuralFeature("Representation");
    representationsFeature = productRepresentationClass.getEStructuralFeature("Representations");

    if (geometryCache != null && !geometryCache.isEmpty()) {
        returnCachedData(model, geometryCache, databaseSession, pid, rid);
        return null;
    }/*w w w. j  a va2s. c o  m*/
    long start = System.nanoTime();
    String pluginName = "";
    if (model.getPackageMetaData().getSchema() == Schema.IFC4) {
        pluginName = "org.bimserver.ifc.step.serializer.Ifc4StepSerializerPlugin";
    } else if (model.getPackageMetaData().getSchema() == Schema.IFC2X3TC1) {
        pluginName = "org.bimserver.ifc.step.serializer.Ifc2x3tc1StepSerializerPlugin";
    }

    try {
        final SerializerPlugin ifcSerializerPlugin = (SerializerPlugin) pluginManager.getPlugin(pluginName,
                true);
        if (ifcSerializerPlugin == null) {
            throw new UserException("No IFC serializer found");
        }

        User user = (User) databaseSession.get(uoid, OldQuery.getDefault());
        UserSettings userSettings = user.getUserSettings();
        RenderEnginePluginConfiguration defaultRenderEngine = userSettings.getDefaultRenderEngine();
        if (defaultRenderEngine == null) {
            throw new UserException("No default render engine has been selected for this user");
        }
        final RenderEnginePlugin renderEnginePlugin = pluginManager
                .getRenderEngine(defaultRenderEngine.getPluginDescriptor().getPluginClassName(), true);
        if (renderEnginePlugin == null) {
            throw new UserException("No (enabled) render engine found of type "
                    + defaultRenderEngine.getPluginDescriptor().getPluginClassName());
        }

        int maxSimultanousThreads = Math.min(
                bimServer.getServerSettingsCache().getServerSettings().getRenderEngineProcesses(),
                Runtime.getRuntime().availableProcessors());
        if (maxSimultanousThreads < 1) {
            maxSimultanousThreads = 1;
        }

        final RenderEngineSettings settings = new RenderEngineSettings();
        settings.setPrecision(Precision.SINGLE);
        settings.setIndexFormat(IndexFormat.AUTO_DETECT);
        settings.setGenerateNormals(true);
        settings.setGenerateTriangles(true);
        settings.setGenerateWireFrame(false);

        final RenderEngineFilter renderEngineFilter = new RenderEngineFilter();

        if (maxSimultanousThreads == 1) {
            Runner runner = new Runner(null, renderEnginePlugin, databaseSession, settings, store, model,
                    ifcSerializerPlugin, model, pid, rid, null, renderEngineFilter, generateGeometryResult);
            runner.run();
        } else {
            Set<EClass> classes = new HashSet<>();
            for (IdEObject object : model.getAllWithSubTypes(packageMetaData.getEClass("IfcProduct"))) {
                IdEObject representation = (IdEObject) object.eGet(representationFeature);
                if (representation != null
                        && ((List<?>) representation.eGet(representationsFeature)).size() > 0) {
                    classes.add(object.eClass());
                }
            }

            if (classes.size() == 0) {
                return null;
            }

            classes.remove(packageMetaData.getEClass("IfcAnnotation"));
            classes.remove(packageMetaData.getEClass("IfcOpeningElement"));

            LOGGER.debug("Using " + maxSimultanousThreads + " processes for geometry generation");
            ThreadPoolExecutor executor = new ThreadPoolExecutor(maxSimultanousThreads, maxSimultanousThreads,
                    24, TimeUnit.HOURS, new ArrayBlockingQueue<Runnable>(classes.size()));

            final Map<IdEObject, IdEObject> bigMap = new HashMap<IdEObject, IdEObject>();

            HideAllInversesObjectIDM idm = new HideAllInversesObjectIDM(
                    CollectionUtils.singleSet(packageMetaData.getEPackage()),
                    pluginManager.getMetaDataManager().getPackageMetaData("ifc2x3tc1").getSchemaDefinition());
            OidProvider oidProvider = new OidProvider() {
                @Override
                public long newOid(EClass eClass) {
                    return databaseSession.newOid(eClass);
                }
            };
            for (final EClass eClass : classes) {
                final BasicIfcModel targetModel = new BasicIfcModel(
                        pluginManager.getMetaDataManager().getPackageMetaData("ifc2x3tc1"), null);
                ModelHelper modelHelper = new ModelHelper(bimServer.getMetaDataManager(), targetModel);
                modelHelper.setOidProvider(oidProvider);
                modelHelper.setObjectIDM(idm);

                IdEObject newOwnerHistory = modelHelper.copyBasicObjects(model, bigMap);

                for (IdEObject idEObject : model.getAll(eClass)) {
                    IdEObject newObject = modelHelper.copy(idEObject, false,
                            ModelHelper.createObjectIdm(idEObject.eClass()));
                    modelHelper.copyDecomposes(idEObject, newOwnerHistory);
                    bigMap.put(newObject, idEObject);
                    if (eClass.getName().equals("IfcWallStandardCase")) {
                        EStructuralFeature hasOpeningsFeature = idEObject.eClass()
                                .getEStructuralFeature("HasOpenings");
                        for (IdEObject ifcRelVoidsElement : ((List<IdEObject>) idEObject
                                .eGet(hasOpeningsFeature))) {
                            bigMap.put(modelHelper.copy(ifcRelVoidsElement, false), ifcRelVoidsElement);
                            EStructuralFeature relatedOpeningElementFeature = ifcRelVoidsElement.eClass()
                                    .getEStructuralFeature("RelatedOpeningElement");
                            IdEObject relatedOpeningElement = (IdEObject) ifcRelVoidsElement
                                    .eGet(relatedOpeningElementFeature);
                            if (relatedOpeningElement != null) {
                                bigMap.put(modelHelper.copy(relatedOpeningElement, false),
                                        relatedOpeningElement);
                            }
                        }
                    }
                }

                executor.submit(new Runner(eClass, renderEnginePlugin, databaseSession, settings, store,
                        targetModel, ifcSerializerPlugin, model, pid, rid, bigMap, renderEngineFilter,
                        generateGeometryResult));
            }
            executor.shutdown();
            executor.awaitTermination(24, TimeUnit.HOURS);
        }

        long end = System.nanoTime();
        LOGGER.info("Rendertime: " + ((end - start) / 1000000) + "ms, " + "Reused: "
                + Formatters.bytesToString(bytesSaved.get()) + ", Total: "
                + Formatters.bytesToString(totalBytes.get()) + ", Final: "
                + Formatters.bytesToString(totalBytes.get() - bytesSaved.get()));
    } catch (Exception e) {
        LOGGER.error("", e);
        throw new GeometryGeneratingException(e);
    }
    return generateGeometryResult;
}

From source file:org.bimserver.geometry.StreamingGeometryGenerator.java

private void processMappingQuery(final DatabaseSession databaseSession, QueryContext queryContext,
        GenerateGeometryResult generateGeometryResult, final StreamingSerializerPlugin ifcSerializerPlugin,
        final RenderEngineSettings settings, final RenderEngineFilter renderEngineFilter,
        RenderEnginePool renderEnginePool, ThreadPoolExecutor executor, EClass eClass, Query query,
        QueryPart queryPart, boolean geometryReused, Map<Long, ProductDef> map, int nrObjects)
        throws QueryException, IOException {
    JsonQueryObjectModelConverter jsonQueryObjectModelConverter = new JsonQueryObjectModelConverter(
            packageMetaData);//w w w  .j a v a 2 s  .co  m

    String queryNameSpace = packageMetaData.getSchema().name().toLowerCase() + "-stdlib";

    if (eClass.getName().equals("IfcAnnotation")) {
        // IfcAnnotation also has the field ContainedInStructure, but that is it's own field (looks like a hack on the IFC-spec side)
        queryPart.addInclude(jsonQueryObjectModelConverter
                .getDefineFromFile(queryNameSpace + ":IfcAnnotationContainedInStructure", true));
    } else {
        queryPart.addInclude(jsonQueryObjectModelConverter
                .getDefineFromFile(queryNameSpace + ":ContainedInStructure", true));
    }
    if (packageMetaData.getSchema() == Schema.IFC4) {
        queryPart.addInclude(
                jsonQueryObjectModelConverter.getDefineFromFile(queryNameSpace + ":IsTypedBy", true));
    }
    queryPart.addInclude(jsonQueryObjectModelConverter.getDefineFromFile(queryNameSpace + ":Decomposes", true));
    queryPart.addInclude(
            jsonQueryObjectModelConverter.getDefineFromFile(queryNameSpace + ":OwnerHistory", true));
    Include representationInclude = jsonQueryObjectModelConverter
            .getDefineFromFile(queryNameSpace + ":RepresentationSpecificMapping", true);
    queryPart.addInclude(representationInclude);
    Include objectPlacement = jsonQueryObjectModelConverter
            .getDefineFromFile(queryNameSpace + ":ObjectPlacement", true);
    queryPart.addInclude(objectPlacement);
    if (packageMetaData.getEClass("IfcElement").isSuperTypeOf(eClass)) {
        Include openingsInclude = queryPart.createInclude();
        openingsInclude.addType(packageMetaData.getEClass(eClass.getName()), false);
        openingsInclude.addField("HasOpenings");
        Include hasOpenings = openingsInclude.createInclude();
        hasOpenings.addType(packageMetaData.getEClass("IfcRelVoidsElement"), false);
        hasOpenings.addField("RelatedOpeningElement");
        hasOpenings.addInclude(representationInclude);
        hasOpenings.addInclude(objectPlacement);
        //                  Include relatedOpeningElement = hasOpenings.createInclude();
        //                  relatedOpeningElement.addType(packageMetaData.getEClass("IfcOpeningElement"), false);
        //                  relatedOpeningElement.addField("HasFillings");
        //                  Include hasFillings = relatedOpeningElement.createInclude();
        //                  hasFillings.addType(packageMetaData.getEClass("IfcRelFillsElement"), false);
        //                  hasFillings.addField("RelatedBuildingElement");
    }
    QueryObjectProvider queryObjectProvider = new QueryObjectProvider(databaseSession, bimServer, query,
            Collections.singleton(queryContext.getRoid()), packageMetaData);

    ReportJob job = report.newJob(eClass.getName(), nrObjects);
    GeometryRunner runner = new GeometryRunner(this, eClass, renderEnginePool, databaseSession, settings,
            queryObjectProvider, ifcSerializerPlugin, renderEngineFilter, generateGeometryResult, queryContext,
            geometryReused, map, job, reuseGeometry, geometryGenerationDebugger, query);
    executor.submit(runner);
    jobsTotal.incrementAndGet();
}

From source file:core.Task.java

/**
 * ----------------------/*w  w  w.  j a  v  a  2  s  . c o m*/
 * Executing discovery
 * ----------------------
 */
private void runDiscovery() {

    HashMap<String, HashMap<String, String>> networks;
    List<String> exclusions;

    /*
     * Get networks
     */
    ApiRequest networksRequest = new ApiRequest(this.coordinates).setRequestMethod(ApiRequestMethods.GET)
            .setApiMethod("v1/core/get-networks");

    ApiResponse networksResponse = ApiCaller.request(networksRequest);

    if (!networksResponse.success) {

        /*
         * Log record
         * Can't get node list
         */
        this.logBadResponse("ERROR", "TASK GET NODES",
                "Task " + this.coordinates.get("taskName") + " can't get discovery network list.",
                networksResponse);
        return;
    }

    String networksJson = networksResponse.response;

    Type networksType = new TypeToken<HashMap<String, HashMap<String, String>>>() {
    }.getType();

    try {
        networks = gson.fromJson(networksJson, networksType);

    } catch (JsonSyntaxException e) {
        this.logException("ERROR", "TASK GET NODES",
                "Task " + this.coordinates.get("taskName") + " can't parse discovery network list from json.",
                e);
        return;
    }

    /*
     * Get exclusions IP's
     */
    ApiRequest exclusionsRequest = new ApiRequest(this.coordinates).setRequestMethod(ApiRequestMethods.GET)
            .setApiMethod("v1/core/get-exclusions");

    ApiResponse exclusionsResponse = ApiCaller.request(exclusionsRequest);

    if (!exclusionsResponse.success) {

        /*
         * Log record
         * Can't get node list
         */
        this.logBadResponse("ERROR", "TASK GET NODES",
                "Task " + this.coordinates.get("taskName") + " can't get exclusions ip list.",
                exclusionsResponse);
        return;
    }

    String exclusionsJson = exclusionsResponse.response;

    Type exclusionsType = new TypeToken<ArrayList<String>>() {
    }.getType();

    try {
        exclusions = gson.fromJson(exclusionsJson, exclusionsType);
    } catch (JsonSyntaxException e) {
        this.logException("ERROR", "TASK GET NODES",
                "Task " + this.coordinates.get("taskName") + " can't parse exclusions ip list from json.", e);
        return;
    }

    /*
     * Thread executor init
     */
    ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(threadCount); // number of threads

    /*
     * Futures for workers results return
     */
    List<Future<Boolean>> results = new ArrayList<>();

    // Adding discovery workers to executor
    // noinspection Java8MapForEach
    networks.entrySet().forEach(node -> {

        Boolean dataValid = true;

        String[] allIps = {};
        List<String> allExclusions = new ArrayList<>();

        String snmpRead = node.getValue().get("snmp_read");
        String version = node.getValue().get("snmp_version");
        String port = node.getValue().get("port_snmp");
        String networkId = node.getValue().get("id");

        Integer snmpVer = 1;
        Integer snmpPort = 161;

        if (snmpRead == null || snmpRead.length() == 0) {
            dataValid = false;
            String unknownTaskMessage = "Task " + this.coordinates.get("taskName") + ". Network "
                    + node.getKey() + ": empty SNMP read community.";
            this.logMessage("ERROR", "TASK EXECUTE", unknownTaskMessage);
        }
        if (version == null || version.length() == 0) {
            dataValid = false;
            String unknownTaskMessage = "Task " + this.coordinates.get("taskName") + ". Network "
                    + node.getKey() + ": empty SNMP version.";
            this.logMessage("ERROR", "TASK EXECUTE", unknownTaskMessage);
        }
        if (port == null || port.length() == 0) {
            dataValid = false;
            String unknownTaskMessage = "Task " + this.coordinates.get("taskName") + ". Network "
                    + node.getKey() + ": empty SNMP port.";
            this.logMessage("ERROR", "TASK EXECUTE", unknownTaskMessage);
        }

        if (dataValid) {
            /*
             * Set SNMP version
             */
            try {
                snmpVer = Integer.parseInt(version);
            } catch (NumberFormatException e) {
                dataValid = false;
                String parseVersionMessage = "Task " + this.coordinates.get("taskName") + ", node "
                        + this.coordinates.get("nodeId") + ": can't parse SNMP version of network";
                this.logException("ERROR", "TASK EXECUTE", parseVersionMessage, e);
            }

            /*
             * Set SNMP port
             */
            try {
                snmpPort = Integer.parseInt(port);
            } catch (NumberFormatException e) {
                dataValid = false;
                String parsePortMessage = "Task " + this.coordinates.get("taskName") + ", node "
                        + this.coordinates.get("nodeId") + ": can't parse SNMP port to integer.";
                this.logException("WARNING", "TASK EXECUTE", parsePortMessage, e);
            }
        }

        /*
         * Calculating all IPs of current subnet
         */
        if (dataValid) {
            try {
                SubnetUtils subnet = new SubnetUtils(node.getKey());

                /*
                 * If exclusions ip is in subnet range, add it to exclusuins list
                 */
                for (String exclusionIp : exclusions) {
                    try {
                        if (subnet.getInfo().isInRange(exclusionIp)) {
                            allExclusions.add(exclusionIp);
                        }
                    } catch (IllegalArgumentException e) {
                        dataValid = false;
                        String validateExclusionsMessage = "Task " + this.coordinates.get("taskName")
                                + ", node " + this.coordinates.get("nodeId") + ": wrong exclusion ip "
                                + exclusionIp;
                        this.logException("WARNING", "TASK EXECUTE", validateExclusionsMessage, e);
                    }
                }

                allIps = subnet.getInfo().getAllAddresses();
            } catch (Exception e) {
                dataValid = false;
                String extractIpsMessage = "Task " + this.coordinates.get("taskName") + ", node "
                        + this.coordinates.get("nodeId") + ": can't extract IPs from subnet.";
                this.logException("WARNING", "TASK EXECUTE", extractIpsMessage, e);
            }
        }

        if (dataValid) {
            for (String ip : allIps) {
                if (!allExclusions.contains(ip)) {
                    Map<String, String> currentCoord = new HashMap<>();
                    currentCoord.putAll(this.coordinates);
                    currentCoord.put("nodeIp", ip);
                    results.add(executor.submit(new WorkerDiscovery(currentCoord, this.settings, networkId,
                            snmpVer, snmpRead, snmpPort)));
                }
            }
        }
    });

    for (Future<Boolean> result : results) {

        Boolean currentResult;

        try {
            currentResult = result.get();

            if (currentResult) {
                this.success++;
            } else {
                this.failed++;
            }

        } catch (Exception e) {
            this.logException("ERROR", "TASK GET WORKER RESPONSE", "Task " + this.coordinates.get("taskName")
                    + " was interrupted while waiting for discovery worker result.", e);
            return;
        }
    }

    executor.shutdown();

    /*
     * Task finish log
     */
    String finalMessage = "Task " + this.coordinates.get("taskName") + " has been finished. " + " Success: "
            + this.success + ". Failed or offline: " + this.failed + ".";
    this.logMessage("INFO", "TASK FINISH", finalMessage);

}

From source file:org.bimserver.geometry.StreamingGeometryGenerator.java

private void processQuery(final DatabaseSession databaseSession, QueryContext queryContext,
        GenerateGeometryResult generateGeometryResult, final StreamingSerializerPlugin ifcSerializerPlugin,
        final RenderEngineSettings settings, final RenderEngineFilter renderEngineFilter,
        RenderEnginePool renderEnginePool, ThreadPoolExecutor executor, EClass eClass, Query query,
        QueryPart queryPart, boolean geometryReused, Map<Long, ProductDef> map, int nrObjects)
        throws QueryException, IOException {
    JsonQueryObjectModelConverter jsonQueryObjectModelConverter = new JsonQueryObjectModelConverter(
            packageMetaData);//from w  ww .j av a  2s . co  m

    String queryNameSpace = packageMetaData.getSchema().name().toLowerCase() + "-stdlib";

    if (eClass.getName().equals("IfcAnnotation")) {
        // IfcAnnotation also has the field ContainedInStructure, but that is it's own field (looks like a hack on the IFC-spec side)
        queryPart.addInclude(jsonQueryObjectModelConverter
                .getDefineFromFile(queryNameSpace + ":IfcAnnotationContainedInStructure", true));
    } else {
        queryPart.addInclude(jsonQueryObjectModelConverter
                .getDefineFromFile(queryNameSpace + ":ContainedInStructure", true));
    }
    if (packageMetaData.getSchema() == Schema.IFC4) {
        queryPart.addInclude(
                jsonQueryObjectModelConverter.getDefineFromFile(queryNameSpace + ":IsTypedBy", true));
    }

    Include representationInclude = jsonQueryObjectModelConverter
            .getDefineFromFile(queryNameSpace + ":Representation", true);
    Include objectPlacement = jsonQueryObjectModelConverter
            .getDefineFromFile(queryNameSpace + ":ObjectPlacement", true);
    Include decomposes = jsonQueryObjectModelConverter.getDefineFromFile(queryNameSpace + ":Decomposes", true);
    Include ownerHistory = jsonQueryObjectModelConverter.getDefineFromFile(queryNameSpace + ":OwnerHistory",
            true);

    if (applyLayerSets) {
        if (packageMetaData.getEClass("IfcElement").isSuperTypeOf(eClass)) {
            Include connected = queryPart.createInclude();
            connected.addType(eClass, false);
            connected.addField("ConnectedTo");
            connected.addField("ConnectedFrom");
            Include connectedTo = connected.createInclude();
            connectedTo.addType(packageMetaData.getEClass("IfcRelConnectsPathElements"), false);
            connectedTo.addField("RelatedElement");
            connectedTo.addField("RelatingElement");

            // TODO According to Thomas we only need the "Axis" representation types, too much work for now, so sending all representations for now

            connectedTo.addInclude(representationInclude);
            connectedTo.addInclude(objectPlacement);
            connectedTo.addInclude(ownerHistory);
            connectedTo.addInclude(decomposes);

            // Also doing opening to make this query complete, otherwise we could end up not having openings in the referenced walls

            Include openingsInclude = connectedTo.createInclude();
            openingsInclude.addType(packageMetaData.getEClass(eClass.getName()), false);
            openingsInclude.addField("HasOpenings");
            Include hasOpenings = openingsInclude.createInclude();
            hasOpenings.addType(packageMetaData.getEClass("IfcRelVoidsElement"), false);
            hasOpenings.addField("RelatedOpeningElement");
            hasOpenings.addInclude(representationInclude);
            hasOpenings.addInclude(objectPlacement);
        }
    }

    queryPart.addInclude(decomposes);
    queryPart.addInclude(ownerHistory);
    queryPart.addInclude(representationInclude);
    queryPart.addInclude(objectPlacement);

    if (eClass.getName().equals("IfcOpeningElement")) {
        // In this case, we need to use the FillsVoids reference to get to an object on which we can add the decomposes include as well, otherwise we'll never get to the IfcProject level
        Include fillsVoidsInclude = queryPart.createInclude();
        fillsVoidsInclude.addType(eClass, false);
        fillsVoidsInclude.addField("VoidsElements");
        Include fillsInclude = fillsVoidsInclude.createInclude();
        fillsInclude.addType(packageMetaData.getEClass("IfcRelVoidsElement"), false);
        fillsInclude.addField("RelatingBuildingElement");

        fillsInclude.addInclude(decomposes);
        fillsInclude.addInclude(ownerHistory);
        fillsInclude.addInclude(jsonQueryObjectModelConverter
                .getDefineFromFile(queryNameSpace + ":ContainedInStructure", true));
    }

    // Adding the materials, those don't come automatically
    Include materialsInclude = queryPart.createInclude();
    materialsInclude.addType(eClass, false);
    materialsInclude.addField("HasAssociations");
    materialsInclude.addInclude(jsonQueryObjectModelConverter
            .getDefineFromFile(queryNameSpace + ":IfcRelAssociatesMaterial", true));

    if (packageMetaData.getEClass("IfcElement").isSuperTypeOf(eClass)) {
        Include openingsInclude = queryPart.createInclude();
        openingsInclude.addType(packageMetaData.getEClass(eClass.getName()), false);
        openingsInclude.addField("HasOpenings");
        Include hasOpenings = openingsInclude.createInclude();
        hasOpenings.addType(packageMetaData.getEClass("IfcRelVoidsElement"), false);
        hasOpenings.addField("RelatedOpeningElement");
        hasOpenings.addInclude(representationInclude);
        hasOpenings.addInclude(objectPlacement);
        //                  Include relatedOpeningElement = hasOpenings.createInclude();
        //                  relatedOpeningElement.addType(packageMetaData.getEClass("IfcOpeningElement"), false);
        //                  relatedOpeningElement.addField("HasFillings");
        //                  Include hasFillings = relatedOpeningElement.createInclude();
        //                  hasFillings.addType(packageMetaData.getEClass("IfcRelFillsElement"), false);
        //                  hasFillings.addField("RelatedBuildingElement");
    }
    QueryObjectProvider queryObjectProvider = new QueryObjectProvider(databaseSession, bimServer, query,
            Collections.singleton(queryContext.getRoid()), packageMetaData);

    ReportJob job = report.newJob(eClass.getName(), nrObjects);
    GeometryRunner runner = new GeometryRunner(this, eClass, renderEnginePool, databaseSession, settings,
            queryObjectProvider, ifcSerializerPlugin, renderEngineFilter, generateGeometryResult, queryContext,
            geometryReused, map, job, reuseGeometry, geometryGenerationDebugger, query);
    executor.submit(runner);
    jobsTotal.incrementAndGet();
}