Передача массива из Java в ESQL в IIB - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу передать список конфигурации «Userdefined» из Java в ESQL в IIB.Я могу вернуть одно значение, но ищу полный список.Ниже приведен код Java и ESQL.Любые входные данные приветствуются.

Код ESQL:

CREATE COMPUTE MODULE SiteCodeValdationRoutine_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
    CALL CopyEntireMessage();           
    CALL getSiteCodeProperties(Environment.MFT.Sitecode);   
    RETURN TRUE;
END;

CREATE PROCEDURE CopyEntireMessage() BEGIN
    SET OutputRoot = InputRoot;
END;

CREATE PROCEDURE getSiteCodeProperties( OUT Sitecode CHARACTER)
    LANGUAGE JAVA EXTERNAL NAME "com.nb.iib.util.SiteCodeParameterLookup.getSiteCodeParameters";
END MODULE;

Код Java:

package com.nb.iib.util;

import java.util.Properties;
import com.ibm.broker.config.proxy.BrokerProxy;
import com.ibm.broker.config.proxy.ConfigurableService;

public class SiteCodeParameterLookup {

    public static void getSiteCodeParameters(String siteCodeArray[]) {

        siteCodeArray = new String[10];
        BrokerProxy bp = null;
        try {
            // Grab Local Broker Proxy
            bp = BrokerProxy.getLocalInstance();
            if (bp == null) {
                throw new IllegalStateException("Could not obtain Broker Proxy Connection");
            }
            // Search up
            ConfigurableService[] ud_set = bp.getConfigurableServices("UserDefined");
            if (ud_set == null) {
                throw new IllegalStateException("Could not find Site Code value under User Defined Properties: ");
            }

            // Add
            System.out.println("Configurable Service Name :" + ud_set[0].getName());

            for (int i = 0; i < 1; i++) {
                siteCodeArray[i] = ud_set[i].getName();
            }
        } catch (Throwable t) {
            throw new IllegalStateException(
                    "SiteCodeNotConfigured. Sitecode configuration missing in User Definied Properties", t);
        } finally {
            // Disconnect Broker Proxy when use is complete
            if (bp != null)
                bp.disconnect();
        }
    }
}

Мне нужно вернуть siteCodeArray в ESQL.

1 Ответ

0 голосов
/ 05 ноября 2018

Таким образом, ESQL не выполняет массивы, но вы можете создать набор узлов в дереве среды.Получите указатель на дерево Среды и создайте поддерево, содержащее набор узлов, по одному для каждой записи в массиве.

Внедрите что-то подобное в ваш код.

MbMessage env = assembly.getGlobalEnvironment();
MbElement siteCodes = env.getRootElement().createElementAsLastChild(MbElement.TYPE_NAME, "SiteCodes", null);
for(ConfigurableService cs: ud_set) {
    siteCodes.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "SiteCode", cs.getName());
}
...