CRecordAddAppFactory

The message CRecordAddAppFactory is used to register an application factory. Any number of application factories can be registered on any number of nodes. When an application is started, the application collector then selects one of the registered factories and starts the application there.

This message belongs to the application factory collector API.
The Application Collector Service is located in the plugin NY_ApplicationFactoryCollectorPlugIn.

{
  "id": "ee3af3ad-16e4-45c7-af8b-8c11e93f18c7",
  "name": "ADD_APP_FACTORY",
  "isService": "false",
  "namespaces": "",
  "description": "Add an application factory.",
  "slots": [
    {
      "key": "app",
      "name": "APPLICATION",
      "direction": "REQUEST",
      "mandatory": "true",
      "type": "RECORD",
      "description": "The application as record APPLICATION."
    },
    {
      "key": "factoryAddress",
      "name": "FACTORY_ADDRESS",
      "direction": "REQUEST",
      "mandatory": "true",
      "type": "TARGET_ADDRESS",
      "description": "The address of the application factory."
    }
  ]
}

Arguments

  • APPLICATION: The description of the application. See CRecordApplication.
  • FACTORY_ADDRESS: The target address of the factory.

Usage

Sending the message

Example of use (after generating of the class CRecordAddAppFactory):

// create an application description
@NotNull
private CRecord createApplicationRecord() throws CException
{
    final CRecord record = CRecordApplication.create();
    // every application has an UUID as ID
    CRecordApplication.setId(record,
                             UUID.fromString("186687b0-e99b-4479-be94-d69051c9542f"));
    CRecordApplication.setName(record,
                               "Monitor");
    CRecordApplication.setShortDescription(record,
                                           "A monitor to hold monitoring panels");
    CRecordApplication.setLongDescription(record,
                                          "An application for monitoring states of the nyssr.net");
    // an image in the file store
    CRecordApplication.setIcon(record,
                               "apps/Monitor/monitor.png");
    // no special permission required
    CRecordApplication.setPermissions(record,
                                      new String[]{});

    return record;
}

// register your app
private void registerApplicationFactory() throws CException
{
    // The message is sent to the AppCollector microservice.
    final IId microserviceId = CIdFactory.fromObject("NY_ApplicationFactoryCollector");
    final CEnvelope env = CEnvelope.forMicroService(microserviceId);

    final CRecord record = CRecordAddAppFactory.create();
    CRecordAddAppFactory.setApplication(record,
                                        createApplicationRecord());
    CRecordAddAppFactory.setFactoryAddress(record,
                                           getAddress());

    sendRequest(env,
                record);
}

You can check the result of the registration in a separate message handler for the response:

// in the constructor of your target:
addMessageHandler(CRecordAddAppFactory.ID,
                  this::asyncAddAppFactory);
// handle the answer
private boolean asyncAddAppFactory(@NotNull final CEnvelope aEnvelope,
                                   @NotNull final CRecord aRecord)
{
    if (aEnvelope.isAnswer())
    {
        if (aEnvelope.getResultCode() != CResultCode.SUCCESS)
        {
            // ...
        }
        return true;
    }
    else
    {
        return false;
    }
}

See also: