Github user selvinsource commented on the issue:
https://github.com/apache/zeppelin/pull/3092
@zjffdu thanks for reviewing the PR.
Let me give you a bit of background before I answer your question on using
another java interpreter.
First of all, I found lately Zeppelin an amazing tool to work with and in
particular using the Spark/scala interpreter.
However I also started evaluating / using Hazelcast Jet, which is a similar
streaming/batch engine, entirely written in Java, and I immediately had a need
to have that in Zeppelin to do some visualization of the results.
I therefore started to look into how to create an interpreter for Jet and
went through all the existing interpreter to get some ideas. I then realized
that the Beam interpreter is just a java interpreter apart from the many
dependencies on Beam/Google libraries.
A solution could have been to clone the Beam interpreter to create a Jet
one with dependencies only on Hazelcast Jet but that didn't seem the best
solution (when you start cloning code).
Hence my idea to create a Java interpreter (using what has been done and
tested already with Beam) and have Beam (and eventually Hazelcast Jet)
interpreters to simply extends the Java one with engine specific dependencies.
So, this PR is a start, to have a common Java interpreter that other Java
API/engine interpreters can extend.
I agree the current implementation is not ideal as a whole class with a
main method is needed to run some simple java code, the better approach is to
use a Java REPL API.
The obvious choice is Java 9 JShell as it is the only one that is going to
be supported in the long run and no need of other dependencies as it is shipped
as part of the JDK. I don't think it's wise to use any other Java REPL as they
won't compete with JShell which will be the standard that every IDE will
integrate with.
However, the question back to you, is Zeppelin ready to be compiled with
Java 9 and requiring Java 9 run time? Is it wise at this stage?
Talking from experience, in production environments I have seen rarely Java
9, the Java community is waiting for the next LTS release which is Java 11 (due
in Sep 2018).
I would say to start with a Java interpreter like the one I proposed
(re-using what's good was done for Beam), have Beam and eventually Jet extends
the Java interpreter. Once Zeppelin will run on Java 11, the Java interpreter
can be easily upgraded to use the JShell API therefore all other java based
interpreters will have the same benefits (Beam, Jet, etc...).
Definitely the Java interpreter will be much more usable and immediate with
a REPL, it just need to wait for the JShell to be available.
If you want I can already create a JIRA ticket to eventually update the
Java interpreter to JShell as soon as this is available and I am happy to
contribute to it: having seen the JShell API is going to be even simpler than
the current REPL implementation that has been used in the Beam interpreter (but
let's not forget that it works just fine!).
---