MotivationIt is very useful in many scenarios to provide safe and convenient 
capabilities for function39s external resource initialization and release. In 
addition to the normal data processing path, it enables functions to use 
HookFunction to manage external resources

At present, in order to process data, only the logic of resource initialization 
-> processing -> release and shutdown can be written in the process() of 
Function. This method is complicated, insecure, and unnecessary.

Instead, we should have a new standard way for users to use Function easily and 
safely. Summarized as follows:

Before Function starts, some resources only need to be initialized once, and 
there is no need to make various judgments in the process() method of the 
Function interface

After closing the Function, in the process of using process(), you need to 
manually close the referenced external resources, which need to be released 
separately in the close() of javaInstance 

API and Implementation Changes
The organization of the function implementation hierarchy has been added, it 
currently looks like the following figure:




Use Cases:

Before transformation







public class DemoFunction implements Function<String, String>{

    RedisClient client

    @Override

    public String process(String str, Context context) {

        1.client=init()

        2.Object object = client.get(key)

        //Data enrichment

        3.client.close()

        return null

    }

}






After the transformation







public class DemoFunction implements HookFunction<String, String>{

    RedisClient client

    @Override

    public void setup(Context context) {

        Map<String, Object> connectInfo = context.getUserConfigMap()

        client=init()

    }
 
    @Override

    public  String process(String str, Context context) {

        Object object = client.get(key)

        //Data enrichment

        return null

    }
 
    @Override

    public void cleanup() {

        client.close()

    }

}






It is quite simple and clear to use in function processing code.




Reply via email to