Github user Leemoonsoo commented on the issue: https://github.com/apache/zeppelin/pull/1439 When `callback registry` places in `ZeppelinServer` process and want to let user register callback routine from the `interpreter` by exposing user `callback registry` api, then callback routine need to be serialized from `Interpreter` to send to the `ZeppelinServer`. That's why i think you send string representation of code, which is callback routine, through thrift message. If callback registry places inside of `Interpreter` instance, `Interpreter` implementation can directly access `callback registry`. So callback routine does not need to be serialized. That means not only string representation of code, but also some java object (runnable object) can be registered into the registry. And then [RemoteInterpreterServer](https://github.com/apache/zeppelin/blob/master/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java#L390)] can run callback routines before and after it invokes `Interpreter.interpret()` method. So ZeppelinServer doesn't really need to know callback registry, i think. Or are there reasons and use cases that changes of callback registry need to be broadcasted to ZeppelinServer?
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. ---