Plain Old Java Object (POJO) example

Start with a Plain Old Java™ Object (POJO, in this example) that contains all of the business logic for your extension.

For example.

In this case, the POJO contains a single method. Your typical extension contains more logic. For example.

This FESI extension has three main parts.

  1. First, the extension makes a JSObject named prototype and adds the method “log” to prototype:
      final JSObject prototype = go.makeJSObject();
      
      prototype.setMember("log", new JSFunctionAdapter() {
         public Object doCall(JSObject thisObject, Object[] args)
               throws JSException {
            if (args.length >= 1) {
               Extension.log(args[0].toString());
            }      return null;
         }});
       
      go.setMember("CustomExtension", obj);
      

    The prototype JSObject is then added to the JSGlobalObject with the name CustomExtension. This addition allows scripts to call.

      CustomExtension.log("message");

  2. The second part of the extension creates a global function named log.
      go.setMember("log", new JSFunctionAdapter() {
         public Object doCall(JSObject thisObject, Object[] args)
               throws JSException {
            if (args.length >= 1) {
               Extension.log(args[0].toString());
            }      return null;
         }});
      

    Now, a script can call.

      log("message");

  3. The third part of the extension creates a constructor that can be called from scripts. For example:

      go.setMember("Logger", new JSFunctionAdapter() {
         public Object doNew(JSObject thisObject, Object[] args)
               throws JSException {
            JSGlobalObject go = thisObject.getGlobalObject();
            JSObject proto = go.makeJSObject();
      
            proto.setMember("log", new JSFunctionAdapter() {
               public Object doCall(JSObject thisObject, Object[] args)
                     throws JSException {
                  if (args.length >= 1) {
                     Extension.log(args[0].toString());
                  }            return null;
               }      });
            final JSObject obj = go.makeJSObject(proto);
            return obj;
         }});
      

    With this constructor, scripts can do the following.

      var logger = new Logger();
      logger.log("message");
      

Parent topic: Migration of custom FESI extensions to the IBM JSEngine