Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
firstline1
collapsetrue
// This is the initialization and shutdown code

// Create the eaglemlApi object
String endpoint = "http://url.to.mcserviceeagle.web.server:port";
String login = "eagleuser";
String password = "eaglepassword";
com.eagleinvsys.eagleapi.client.EagleApi eaglemlApi = new EagleApi(endpoint, login, password, null /* by default use java.io.tmpdir temp folder, or specify the path to the temporary folder for big extracts */, true);

// Optional - Add this to enable the CSV metrics reporting
File csvmetricsdir = new File("/apps/eagle/csvmetrics");
eaglemlApi.enableCsvMetricReporter(csvmetricsdir, 0);

// Optional - set the threshold on the extract result size, after which the data is saved to a temporary file. Default is 1MB
//eaglemlApi.setTempFileThreshold(10000000);

// Optional - set the starting callback port number and the number of ports to try. 
// If not specified the operating system will use a random port number.
// You need to do this only if there is a firewall between the EaglemlApi object and Message CenterEagle THICK Application Server, preventing the callback to complete
//eaglemlApi.setStartingCallbackPort(40000);
// Optional - set the number of ports to try. In this example eaglemlApi will attempt to use ports in the range of 40000 to 40020
// If it can not listen to any of these ports it will fail to start.
//eaglemlApi.setNumberOfPortsToTry(20);


// Optional - set the published host address for callbacks. If not set the local host address (one of the interfaces) will be used.
// This is needed only if there is a firewall/NAT between EaglemlApi Client and MessageCenter Eagle THICK Application Servr and Message Center needs a specific IP to execute the callback.
//eaglemlApi.setPublishedHostAddress("192.168.1.104");

// Optional - set the name of the stream to which RTR will be sent.
//eaglemlApi.setSendToStream("eagle_ml-2-0_default_out_extract_service");

// Start the EagleApi listener and initialize the objects required to parse the results.
// Pass true as a parameter to wait for initialization to complete.
// Pass false as a parameter to complete the initialization asynchronously
eaglemlApi.start(true);

...

Code Block
languagejava
firstline1
collapsetrue
•	// THIS IS A SAMPLE OF THE REQUEST EXECUTION. REQUESTS CAN BE EXECUTED ONLY AFTER THE eaglemlApi.start() is called.

Map<String, String> parameters = new HashMap<String, String>();

// Add the parameters required to build an URI
// Generate a unique correlationId
// Add the attachments for the POST request
eaglemlApi.executeRestRequestAsync("GET", "/eagle/v2/manager-relationships", parameters, correlationId, businessTaskId, correlationId null, 600 /* timeout in seconds */, (result, exception) -> {
    if(exception != null) {
     // There was an exception while executing the request. Process it.
    } else {
        switch(result.getResultStatus()) {
            case EagleApiResultStatus.SUCCESS:
                List<IEagleApiResultDataFile> files = result.getDataFiles();
                for (IEagleApiResultDataFile file : files) {
                    // See the java doc for the IEagleApiResultDataFile. The file will represent one extract.
                    // Currently EaglemlApi will produce only one file.
                    // You can get a stream of uncompressed data:
                    try(InputStream stream = file.getStream()) {
                        // Parse the extract and execute any transformations - for example to JSON
                    }
                    // If needed you can get the compressed data and get access to the file with the file.isInMemory(), file.getData(), file.getFile()
                    // The temporary files (if any) created while processing the extracts will be removed when you close the IEagleApiResult instance.
                    // If you want to preserve you'll have to move/copy them here.
                }
                break;
            case EagleApiResultStatus.TIMEOUT:
                // TIMEOUT - report an error
                break;
            case EagleApiResultStatus.ERROR:
                // ERROR - use result.getErrorMessage to get the error message
                break;
            case EagleApiResultStatus.STOPPED:
                // The request execution was stopped, when eaglemlApi.stop() is called
                break;
            case EagleApiResultStatus.NO_DATA:
                // The extract resulted in no data retrieved. Report this back.
                break;
        }
    }
});

...

  • When the server receives a request with x-eagle-rest-callback header, it sends the TaskAcknowledged (ACK) message back to the client, performs the request, archives the result data, then tries to send a multipart message consisting of the TaskStatusResponse and the result data.
  • The client receives the ACK and starts to await incoming multiparts (TSR+data).
  •     On multipart arrival it switched off the callback (the port is free now) and:
  •     Parses the TaskStatusResponse to understand if its task status is SUCCESS, FAILED or NO_DATA.
  •         If the status is SUCCESS, the result data will be uploaded as an archive file and saved in the temporary folder with correlation id as its name. (temporary folder is the system %TEMP%, e.g., C:\Users\admin\AppData\Local\Temp\ - this folder is not purged automatically)
  •             If a folder is specified in the “resultsdir” parameter, the result data will be unzipped and stored in this particular folder.
  •             If “resultsdir” is not specified or empty, the extract remains unzipped in the temp folder.
  •         If the status is FAILED or NO_DATA, error description will be displayed.
  •     If the multipart does not arrive before the -timeout expires, the callback will be unregistered and the timeout error will be displayed.

Available Settings

NameValid ValuesDescription
-loginusernameUsername to log in the environment
EAGLEAPIPASSpassword

Password for the environment set as a global system variable. Can be defined in the command line, for example:

set EAGLEAPIPASS=my_password
-resultsdirempty or folder pathThe folder in which unzipped result file will be stored. If not specified, the result will remain unzipped in the temp folder
-csvmetricsdirempty or folder pathThe folder in which metrics will be stored
-threadseven number, 1 or greaterDefines the number of separate threads for an async process. For each thread a separate listener are created.
-endpointaddress of the environmentEndpoint address
-filefile pathPath to the file with the query
-executionsync or async

Execution mode - synchronous or asynchronous

Query File Details

The file with the query is selected by the -file command, for example:

...