Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Integrating Python and Java In Eclipse

Integrating Python and Java In Eclipse

EclipseCon France 2015 talk

Tracy Miranda

June 25, 2015
Tweet

More Decks by Tracy Miranda

Other Decks in Technology

Transcript

  1. Fast, powerful libraries: numpy, scipy Ease of Use Access To

    Learning Resources Great Community IPython Notebook
  2. Dynamically-Typed Statically -Typed Concise Verbose  Ideal for beginners Scales

    well   Loved by academics and researchers Loved by tool developers and enterprise Numpy, scipy, matplotlib, IPython notebook Eclipse RCP, SWT, EMF  
  3. public class HelloWorld { public static void main(String[] args) {

    System.out.println("Hello, World!"); } } if __name__ == '__main__': print "Hello, World!"
  4.  Control the User Interface  Python to Java 

    In Python, being able to access Java objects  Moving data around  Needed for Plotting arrays in the workbench  (while still running your existing scripts)  Java to Python  In Java, code can access scripts in Python  Workflows, Extending Eclipse with Python
  5.  Java implementation of Python  Runs in JVM so

    can access all JAVA classes  Jython cannot access C modules  numpy, scipy  JyNi could solve this,  but no solution today  Separate environment
  6.  “A Bridge between Java and Python”  Runs in

    JVM and allows Python to access JAVA classes  Enables Python to Java  Allows control of User Interface and ability to run your scripts  Creates proxies rather than moving data  Exposes everything  No Java to Python support
  7. Custom solution to move data around Enhanced Remote Procedure Call

     Datasets (ndarrays)  Regions Of Interest (ROIs)  Exceptions Language Independent Server and client written for Java and Python
  8. Python x = numpy.ndarray(...) y = numpy.ndarray(...) rpcclient.Plotter.line( x, y)

    FLATTEN Java import org.eclipse.dawnsci.IDataset class Plotter { public void line( IDataset x, IDataset y) { // ...} } UNFLATTEN Transport (XML-RPC + Disk/Memory) Datasets: /tmp/x /tmp/y Meta and simple data: Target Plotter Method  line x  /tmp/x y  /tmp/y
  9. Java interface IFilter { IDataset filter(IDataset data); } //create client

    for PyFilter client.newProxyInstance(IFilter.class) IDataset result = proxy.filter(data) FLATTEN Python class PyFilter: def filter(data): # manipulate ndarray data return data # create server server.add_handler(PyFilter()) UNFLATTEN Transport (XML-RPC + Disk/Memory) Datasets: /tmp/data Meta and simple data: Target  PyFilter Method  filter data  /tmp/data
  10.  Allows moving data around efficiently  Java to Python,

    Python to Java  Generic Calling Infrastructure  Way of Handling Exceptions Only exists in DAWNSci today – needs repackaging for use more widely. Support for custom datatypes
  11. Java and Python Integration is possible thanks to a mix

    of different technologies:  PyDev  Jython  AnalysisRPC  Py4J  Going forward can we unify this technology?
  12.  Ongoing initiative  Looking for a home for AnalysisRPC

     Make more readily available for science ▪ DAWN, EASE, Science Top level project?  Requirements Capture  DAWNSci, ICE , Passerelle, Airbus, TraceCompass  Let us know your requirements too!