Java und Python Das Beste aus beiden Welten nutzen Java Users Group Köln (05.10.2009, Köln) Andreas Schreiber  <Andreas.Schreiber@dlr.de> Deutsches Zentrum für Luft- und Raumfahrt e.V. http://www.dlr.de/sc
Das DLR
Das DLR Deutsches Zentrum für Luft- und Raumfahrt  Forschungseinrichtung Raumfahrt-Agentur  Projektträger
Standorte und Personal 6.200 Mitarbeiterinnen und Mitarbeiter arbeiten in  29 Forschungsinstituten und Einrichtungen in 13 Standorten. Büros in Brüssel,  Paris und Washington.    Köln    Lampoldshausen    Stuttgart    Oberpfaffenhofen Braunschweig       Göttingen Berlin -      Bonn Trauen      Hamburg    Neustrelitz Weilheim    Bremen -  
Leitbild - Mission Erforschung der Erde und des Sonnensystems, Forschung zum Erhalt der Umwelt, zur Mobilität, zur Gewährleistung der Sicherheit und zur Bearbeitung gesellschaftlicher Fragen im öffentlichen Auftrag Brückenfunktion von Grundlagenforschung und innovativen Anwendungen sowie Transfer von Wissen und Forschungsergebnissen zu Industrie und Politik durch Vermittlung, Beratung sowie Dienstleistungen Gestaltung des deutschen Raumfahrtengagements und internationale Interessenvertretung als hoheitliche Aufgabe Leistung eines signifikanten Beitrags zum Wissenschafts- und Wirtschaftsstandort Deutschland und zum europäischen Wachstumsraum Ausbildung des wissenschaftlichen Nachwuchses zur Steigerung der Innovationsfähigkeit Deutschlands
Einrichtung Simulations- und Softwaretechnik Mission:  Erarbeitung neuer Software-Technologien und Untersuchung der Relevanz für das DLR Einführung neuer Software-Technologien in DLR-Instituten Entwicklung eigener und Support  externer Software-Produkte Forschungsgebiete:  Software Engineering, Verteiltes Rechnen, Integration, Daten- und Wissensmanagement, High-Performance Computing, Concurrent Engineering, VR Mitarbeiter:  ca. 30
Software-Entwicklung im DLR
Software-Entwicklung im DLR Größenordnung Über 1000 Mitarbeiter des  DLR entwickeln Software DLR ist eines der größten  Software-Häuser Deutschlands Das sind >100 Millionen EUR  Personalkosten pro Jahr
Software-Entwicklungen in Luft- und Raumfahrt Klassifizierung Software für missionskritische Systeme Embedded Software und Real-Time-Software in Flugzeugen, Satelliten, Raumfahrzeugen, … Software mit großen Userzahlen Internet/Intranet/Email, Webshop für Satellitendaten Software zur Unterstützung  Prozessunterstützung, Datenmanagement, Modellierungs- und Simulationsumgebungen, … Software deren Effizienz wichtig ist Numerische Simulationscodes
 
The Right Tool for the Job
Java Warum wird Java verwendet? Weite Verbreitung in vielen Anwendungsgebieten Industrie, Forschung, Universitäten Verfügbar auf vielen Plattformen Gute Performance Guter Garbage Collector (kein GIL) Viele viele Bibliotheken  z.B. für Datenbankzugriff, XML-Verarbeitung, Report/PDF-Generierung, Security,  Benutzeroberflächen Verfügbarkeit guter und umfangreicher Dokumentation für alle Aspekte der Java-Programmierung Sehr gute Entwicklungswerkzeuge Eclipse, NetBeans, IntelliJ IDEA, …
Python  Warum wird Python verwendet? Sehr leicht zu erlernen und einfach zu benutzen  (  = steile Lernkurve ) Rapid Application Development  (  = kurze Entwicklungszeit ) „ Inherent great maintainability“   def  fakultaet(x): if  x >  1 : return  x * fakultaet(x -  1 ) else: return   1
Python in Forschung und Wissenschaft Python ist verbreitet in Forschung und Entwicklung Wissenschaftler und Ingenieure wollen eigentlich keine Software entwickeln sondern ihre Probleme lösen Möglichst schnelles Umsetzen ihrer Ideen in laufenden Code Wenn sie Code schreiben, sollte es so einfach wie möglich sein “ I want to design  planes,  not software!”
“ Python has the cleanest,  most-scientist- or engineer  friendly syntax and semantics. -Paul F. Dubois Paul F. Dubois. Ten good practices in scientific programming. Comp. In Sci. Eng., Jan/Feb 1999, pp.7-11
Das Beste aus beiden Welten nutzen Großartige  Libraries  und Tool- Unterstützung Unschlagbar leicht zu erlernende Sprach-Syntax
Das Beste aus beiden Welten nutzen  Embedded Scripting… Es gibt viel ausgereifte Java-Software Applikationen, Frameworks, Bibliotheken Kommerzielle Software und Open Source Software z.B. Das Eclipse Universum, Apache-Software, Portal-Frameworks, Workflow-Systeme, … Häufig auftretende Use Cases Integration von eingebetteten Skript-Interpretern in Java-Anwendungen Benutzung von Java-Bibliotheken aus Python-Code
Das Beste aus beiden Welten nutzen  Integration von Python-Code in Java-Anwendungen… Bestimmter Code existiert nur entweder für Java oder Python Aufwand zur Neu-Implementierung kann sehr hoch sein Für bereits sehr gut getestete Bibliotheken ist der Aufwand beträchtlich, ein vergleichbares Qualitätsniveau zu erreichen Häufig auftretende Use Cases Einfach ein Bibliothek in der jeweils „anderen“ Sprache nutzen Spezielle die Nutzung von Python-Code aus Java-Anwendungen Oder C/Fortran/WASAUCHIMMER-Code mit Python-Wrapper Es ist schwieriger, C-Code für Java zu wrappen als für Python
Tools zur Python-Java-Integration
Tools zur Python-Java-Integration Übersicht Python von Java aus benutzen Jython JEPP Java von Python aus benutzen JPype JCC Interprozess-Kommunikation CORBA SOAP Andere Remote Object Libraries Python  Interpreter Python  Interpreter Java Virtual Machine (JVM) Java Code (Anwendung) JEPP JNI Python  Code JPype Jython Python  Code Interface/Protokoll Python  Code Python  Code
Nutzung von Python aus Java-Anwendungen Use Cases Die Anwendung soll eingebettete Skripting-Funktionalität haben Die Anwendung soll einen externen Python-Code nutzen Die Applikation soll einen externen Code mit Python-Schnittstelle nutzen  C, C++, Fortran, … Tools Jython JEPP
Jython Vollständige Neu-Implementierung des Python-Interpreters in 100% Java Python-Code wird in der Java VM ausgeführt Website:  http://www.jython.org Letzte Version: Jython 2.5.1 (26.09.2009) Java Virtual Machine Jython Python  Code Java  Application Code
Jython Code-Beispiel 1: Java Code Ausführen von Python-Code import  org.python.util.PythonInterpreter ; import  org.python.core.*; class  TestClass { public   static   void  main(String[] args) { try  { org.python.util.PythonInterpreter python = new  org.python.util.PythonInterpreter (); python.execfile( &quot;python_script.py&quot; ); }  catch  (Exception e) { System.out.println( “Some error!&quot; ); } }
Jython Code-Beispiel 2: Python Code Swing from  javax.swing  import  * frame = JFrame( &quot;Hello Jython&quot; ) label = JLabel( &quot;Hello   Jython!&quot; , JLabel.CENTER) frame.add(label) frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE) frame.setSize( 200 ,  100 ) frame.show()
JEPP Java Embedded Python Einbettung des CPython-Interpreters über das Java Native Interface (JNI) in Java Python-Code wird im CPython-Interpreter ausgeführt Website:  http://jepp.sourceforge.net/ Python Interpreter Java Virtual Machine Java Application  Code Python  Code JNI JEPP
JEPP Code-Beispiel Ausführen (“evaluate”) von Python-Befehlen Ausführen eines Python-SSkripts Jep jep =  new  Jep(false, SCRIPT_PATH, cl); jep.eval( &quot;print 'hello'&quot; ); jep.close(); Jep jep =  new  Jep(false, SCRIPT_PATH, cl); jep.runScript(SCRIPT_PATH + file); jep.close();
Nutzung von Java aus Python-Anwendungen Use Cases Die Anwendung soll eine externe Java-Applikation nutzen Die Anwendung soll eine Java-Bibliothek nutzen Tools JPype JCC
JPype Java to Python Integration Verbindung über die Native Interfaces der Java VM und des Python-Interpreters Startet eine Java Virtual Machine Website:  http://jpype.sourceforge.net Python Interpreter JNI JPype Python  Application Code Java Virtual Machine Java Application Code
JPype Code-Beispiel (1) „Hello World“ from  jpype  import  * # Start JVM startJVM ( path to jvm.dll ,  &quot;-ea&quot; ) # Print &quot;Hello World&quot; java.lang.System.out.println( &quot;Hello World&quot; ) # Shutdown JVM shutdownJVM()
JPype Code-Beispiel (2) Aufruf einer Java-Methode aus Python import  jpype # Start JVM jpype.startJVM( path to jvm.dll ,  &quot;-ea&quot; ) # Create reference to java package javaPackage = jpype.JPackage( &quot;JavaPackageName&quot; ) # Create reference to java class javaClass = javaPackage.JavaClassName # Create instance of java class javaObject = javaClass() # Call java methods javaObject.JavaMethodName() # Shutdown JVM jpype.shutdownJVM()
JCC PyLucene's Code Generator C++ Code-Generator zum Aufruf von Java aus C++/Python C++ Objekte zum Wrappen von Java-Bibliotheken über JNI Generiert komplette  CPython-Extensions Unterstützt werden Mac OS X, Linux, Solaris and Windows C++-Compiler ist notwendig Website:  http://lucene.apache.org/pylucene/jcc   Teil von PyLucene Python Interpreter JNI Python Code Java Virtual Machine Java Application Code pythonExtension() Generated C++ Wrapper Code JCC Code Generator
JCC Code-Beispiel Notwendig: Initialisierung einer VM import  jcc # Start JVM jcc.initVM(maxheap= ‘2000m’ , …)
JCC Code-Beispiel Nutzung von PyLucene: Durchsuchen des Lucene Index Suche nach „Query“ in Verzeichnis „index“ from  lucene  import  QueryParser, IndexSearcher, StandardAnalyzer, FSDirectory, Hit, VERSION, initVM, CLASSPATH initVM(CLASSPATH) directory = FSDirectory.getDirectory( “index” , False) searcher = IndexSearcher(directory) analyzer = StandardAnalyzer() command = raw_input( &quot;Query:&quot; ) query = QueryParser( &quot;contents&quot; , analyzer).parse(command) hits = searcher.search(query) for  hit  in  hits: doc = Hit.cast_(hit).getDocument() print  'path:' , doc.get( &quot;path&quot; ), 'name:', doc.get( &quot;name&quot; ) searcher.close()
Interprozess-Kommunikation Interprozess-Kommunikation (IPC)   Datenaustausch zwischen unterschiedlichen Prozessen auf einem oder mehreren, über Netzwerk verbundenen, Computerns Typische IPC-Techniken  Remote Procedure Calls (RPC) Message Passing Die meist verwendeten APIs Object Request Broker (ORB) Web-Services-Protokolle basierend auf XML Nachteil: Zusätzliche Services sind notwendig z.B. ein Directory Service zur Registrierung und Lokation von entfernten Objekten  Naming Service für CORBA Universal Description, Discovery and Integration (UDDI) für Web Services
Object Request Broker (ORBs) CORBA Java Virtual Machine Generated Java Code (Stub) Python Interpreter ORB Python  Application Code (Server) Generated  Python Code (Skeleton) Java Application Code (Client) IDL Compiler IDL
CORBA-Implementierungen für Python Fnorb   Reine Python-Implementierung, funktioniert mit CPython und Jython Leichtgewichtige CORBA-Implementierung Interoperabel mit dem Standard-ORB von Java  Die Entwicklung von Fnorb wurde eingestellt omniORB   ORB-Implementierung für C++ und Python, kann von CPython benutzt werden Der Python ORB (omniORBpy) benutzt die C++-Implementierung von omniORB.  omniORB wird aktiv weiterentwickelt mit regelmäßigen Releases Website:  http://omniorb.sourceforge.net
CORBA-Beispiel Interface Hello World Interface in Interface Definition Language (IDL) module  HelloWorld { const  string Message =  &quot;Hello CORBA World!&quot; ; interface  Hello { string hello_world(); }; };
CORBA-Beispiel Python Server (Fnorb): Implementierung des Interfaces # Standard/built-in modules. import  sys # Fnorb modules. from  Fnorb.orb  import  BOA, CORBA # Stubs and skeletons generated by 'fnidl'. import  HelloWorld, HelloWorld_skel class  HelloWorldServer(HelloWorld_skel.Hello_skel): &quot;&quot;&quot; Implementation of the 'Hello' interface. &quot;&quot;&quot; def  hello_world(self):  print HelloWorld.Message  return  HelloWorld.Message
CORBA-Beispiel Python Server (Fnorb): Main Function def  main(argv):  # Initialise ORB and BOA orb = CORBA.ORB_init(argv, CORBA.ORB_ID) boa = BOA.BOA_init(argv, BOA.BOA_ID) # Create object reference obj = boa.create( 'fred' , HelloWorldServer._FNORB_ID) # Create an instance of the implementation class. impl = HelloWorldServer() # Activate the implementation   boa.obj_is_ready(obj, impl) # Write the stringified object reference to a file   open( 'Server.ref' ,  'w' ).write(orb.object_to_string(obj)) boa._fnorb_mainloop()  # Start the event loop return  0
CORBA-Beispiel  Java Client public   class  Client { public   static   void  main ( String args[] ) { java.util.Properties props = System.getProperties();  try  { org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,props); org.omg.CORBA.Object obj = null; java.io.BufferedReader in =  new  java.io.BufferedReader( new  java.io.FileReader( “Server.ref&quot; )); String ref = in.readLine(); obj = orb.string_to_object(ref); Hello hello = HelloHelper.narrow(obj); hello.hello_world(); orb.destroy(); }  catch  (Exception e) { e.printStackTrace(); } }
Web Services SOAP Java Virtual Machine Servlet Container Java Application Code (Server) Python Interpreter Generated  Python Code (Stub) Python  Application Code (Client) Generated Java Code (Skeleton) WSDL Compiler WSDL
Web Services SOAP Java Gute Unterstützung Java API for XML-Based Web Services (JAX-WS) Gute Referenz-Implementierung Python Mittelmäßige bis schlechte Unterstützung Zolera SOAP Infrastructure (ZSI) Einzige SOAP Bibliothek für Python, die halbwegs nutzbar ist
Weitere Remote Object Libraries Python Remote Objects (Pyro)  Pyro ist ähnlich zu Java's Remote Method Invocation (RMI)  Sehr einfach und portabel, funktioniert mit Jython  Hat einen eigenen Naming Service  omniORB wird aktiv weiterentwickelt mit regelmäßigen Releases Simple Python Interface to Remote Objects (SPIRO) SPIRO implementiert einen ORB uns dient zur Kommunikation zweischen CPython und Jython Die Entwicklung von SPIRO wurde eingestellt
Beispiele
Beispiel QF-Test – Automatisiertes Test von GUIs
Beispiel TENT – Software Integration and Workflow Management
Use Cases für Python-Scripting (1) Steuern und kontrollieren des Programms durch Benutzerskripte Beispielsweise für komplexe Parametervariationen oder die Steuerung multidisziplinärer gekoppelter Simulationen Automatisierung sich wiederholender Aufgaben Meistens wird das „Makro“-Aufzeichnung und –Abspielung genannt Erweiterung der Benutzeroberfläche Beispielsweise durch zusätzliche problemangepasste Dialoge oder sonstige Erweiterungen Für Java muss die Skriptsprache die GUI-Bibliotheken nutzen können (AWT, Swing, SWT) Integration zusätzlicher Legacy-Applikationen Wichtig und verbreitet bei Integrations- und Workflow-Systemen End-Anwender können externe Codes ohne Änderung des Java-Programme selber integrieren
Use Cases für Python-Scripting (2) Interaktives Experimentieren und Debuggen des Java-Programms Leicht machbar mit einem eingebettete interaktiven Interpreter Erlaubt Endanwendern und Entwickler das Debuggen und Analysieren des Java-Programms zu Laufzeit Erzeugen automatischer Tests zur Qualitätssicherung Aufzeichnen der Benutzeraktionen zur Laufzeit in Form eines Python-Skripts („Journaling“) Editieren und Verallgemeinern des aufgezeichneten Skripts Wieder-Abspielen des Skript entweder manuelle oder automatisch
Beispiel: Codes mit Python-Schnittstellen Numerische Simulations-Software in C++ bzw. Fortran  Beispiele für hochauflösende CFD-Löser mit Python-Schnittstellen DLR  TAU-Code  ( http://www.dlr.de/as ) ONERA  elsA-Code  ( http://elsa.onera.fr ) Integration in Java-Workflow-Systeme über die vorgestellten Techniken  Eurofighter X-31
DataFinder Datenmanagement-System  Für Daten aus Simulationen Experimenten Erdbeobachtung Programmiersprache Python GUI-Toolkit Qt
DataFinder-Erweiterung mit Java-Bibliotheken (1) Grid Application Toolkit (GAT) Nutzung von Grid-Ressourcen Entwickelt durch Albert-Einstein Institut (MPI für Gravitationsphysik) und  Vrije Universiteit Amsterdam Implementiert in  Java ( JavaGAT ) Anbindung an DataFinder über JPype
DataFinder-Erweiterung mit Java-Bibliotheken (1) Provenance-Aufzeichnung Aufzeichnung von Provenance-Daten Aufzeichnung von Prozessinformationen zur Laufzeit des Prozesses Zur Ermittlung von Ursprung der Daten Konformität des (Daten-)  erzeugenden Prozesses Provenance-Software implementiert in Java Server Client-Bibliothek Anbindung über JPype
Beispiel Provenance-Informationen in Simulations-Workflows Interaktionen: Konfiguration Prozessablauf  Monitoring Datentransfer Relationen: - r0:  i0  causes  i1 - r1:  i1  causes  i2 - r2:  i2  causes  i3 - r3:  i2  causes  i4 - r4:  i3  causes  i2 - r5:  i2  causes  m1 - r6:  i2  causes d1 - r7:  i0  causes d2 Status Akteur Process control File-Server Pre- Processing Parameter variation Simulation Visualization i0 i1 i2 i3 i4 m1 d1 d2 c1  c-1 c2  c-2 c3  c-3 c4 c-4
Hinweise
pyCologne Die Python User Group Köln Monatliche Treffen von Python-Interessierten  aus dem Großraum Köln Treffen an jedem 2. Mittwoch im Monat  Beginn: 18:30 Uhr Ort: Benutzerrechenzentrum der Universität zu Köln (Berrenrather Strasse 136, Köln) Informationen über pyCologne Internet:  http:// www.pycologne.de Twitter:  http://twitter.com/ pycologne Mailingliste: https://lists.uni-koeln.de/mailman/listinfo/python-users
Fragen? Kontakt www.andreas-schreiber.net twitter.com/onyame [email_address]

Java und Python - Das Beste aus beiden Welten nutzen

  • 1.
    Java und PythonDas Beste aus beiden Welten nutzen Java Users Group Köln (05.10.2009, Köln) Andreas Schreiber <Andreas.Schreiber@dlr.de> Deutsches Zentrum für Luft- und Raumfahrt e.V. http://www.dlr.de/sc
  • 2.
  • 3.
    Das DLR DeutschesZentrum für Luft- und Raumfahrt Forschungseinrichtung Raumfahrt-Agentur Projektträger
  • 4.
    Standorte und Personal6.200 Mitarbeiterinnen und Mitarbeiter arbeiten in 29 Forschungsinstituten und Einrichtungen in 13 Standorten. Büros in Brüssel, Paris und Washington.  Köln  Lampoldshausen  Stuttgart  Oberpfaffenhofen Braunschweig   Göttingen Berlin -   Bonn Trauen   Hamburg  Neustrelitz Weilheim  Bremen - 
  • 5.
    Leitbild - MissionErforschung der Erde und des Sonnensystems, Forschung zum Erhalt der Umwelt, zur Mobilität, zur Gewährleistung der Sicherheit und zur Bearbeitung gesellschaftlicher Fragen im öffentlichen Auftrag Brückenfunktion von Grundlagenforschung und innovativen Anwendungen sowie Transfer von Wissen und Forschungsergebnissen zu Industrie und Politik durch Vermittlung, Beratung sowie Dienstleistungen Gestaltung des deutschen Raumfahrtengagements und internationale Interessenvertretung als hoheitliche Aufgabe Leistung eines signifikanten Beitrags zum Wissenschafts- und Wirtschaftsstandort Deutschland und zum europäischen Wachstumsraum Ausbildung des wissenschaftlichen Nachwuchses zur Steigerung der Innovationsfähigkeit Deutschlands
  • 6.
    Einrichtung Simulations- undSoftwaretechnik Mission: Erarbeitung neuer Software-Technologien und Untersuchung der Relevanz für das DLR Einführung neuer Software-Technologien in DLR-Instituten Entwicklung eigener und Support externer Software-Produkte Forschungsgebiete: Software Engineering, Verteiltes Rechnen, Integration, Daten- und Wissensmanagement, High-Performance Computing, Concurrent Engineering, VR Mitarbeiter: ca. 30
  • 7.
  • 8.
    Software-Entwicklung im DLRGrößenordnung Über 1000 Mitarbeiter des DLR entwickeln Software DLR ist eines der größten Software-Häuser Deutschlands Das sind >100 Millionen EUR Personalkosten pro Jahr
  • 9.
    Software-Entwicklungen in Luft-und Raumfahrt Klassifizierung Software für missionskritische Systeme Embedded Software und Real-Time-Software in Flugzeugen, Satelliten, Raumfahrzeugen, … Software mit großen Userzahlen Internet/Intranet/Email, Webshop für Satellitendaten Software zur Unterstützung Prozessunterstützung, Datenmanagement, Modellierungs- und Simulationsumgebungen, … Software deren Effizienz wichtig ist Numerische Simulationscodes
  • 10.
  • 11.
    The Right Toolfor the Job
  • 12.
    Java Warum wirdJava verwendet? Weite Verbreitung in vielen Anwendungsgebieten Industrie, Forschung, Universitäten Verfügbar auf vielen Plattformen Gute Performance Guter Garbage Collector (kein GIL) Viele viele Bibliotheken z.B. für Datenbankzugriff, XML-Verarbeitung, Report/PDF-Generierung, Security, Benutzeroberflächen Verfügbarkeit guter und umfangreicher Dokumentation für alle Aspekte der Java-Programmierung Sehr gute Entwicklungswerkzeuge Eclipse, NetBeans, IntelliJ IDEA, …
  • 13.
    Python Warumwird Python verwendet? Sehr leicht zu erlernen und einfach zu benutzen ( = steile Lernkurve ) Rapid Application Development ( = kurze Entwicklungszeit ) „ Inherent great maintainability“ def fakultaet(x): if x > 1 : return x * fakultaet(x - 1 ) else: return 1
  • 14.
    Python in Forschungund Wissenschaft Python ist verbreitet in Forschung und Entwicklung Wissenschaftler und Ingenieure wollen eigentlich keine Software entwickeln sondern ihre Probleme lösen Möglichst schnelles Umsetzen ihrer Ideen in laufenden Code Wenn sie Code schreiben, sollte es so einfach wie möglich sein “ I want to design planes, not software!”
  • 15.
    “ Python hasthe cleanest, most-scientist- or engineer friendly syntax and semantics. -Paul F. Dubois Paul F. Dubois. Ten good practices in scientific programming. Comp. In Sci. Eng., Jan/Feb 1999, pp.7-11
  • 16.
    Das Beste ausbeiden Welten nutzen Großartige Libraries und Tool- Unterstützung Unschlagbar leicht zu erlernende Sprach-Syntax
  • 17.
    Das Beste ausbeiden Welten nutzen Embedded Scripting… Es gibt viel ausgereifte Java-Software Applikationen, Frameworks, Bibliotheken Kommerzielle Software und Open Source Software z.B. Das Eclipse Universum, Apache-Software, Portal-Frameworks, Workflow-Systeme, … Häufig auftretende Use Cases Integration von eingebetteten Skript-Interpretern in Java-Anwendungen Benutzung von Java-Bibliotheken aus Python-Code
  • 18.
    Das Beste ausbeiden Welten nutzen Integration von Python-Code in Java-Anwendungen… Bestimmter Code existiert nur entweder für Java oder Python Aufwand zur Neu-Implementierung kann sehr hoch sein Für bereits sehr gut getestete Bibliotheken ist der Aufwand beträchtlich, ein vergleichbares Qualitätsniveau zu erreichen Häufig auftretende Use Cases Einfach ein Bibliothek in der jeweils „anderen“ Sprache nutzen Spezielle die Nutzung von Python-Code aus Java-Anwendungen Oder C/Fortran/WASAUCHIMMER-Code mit Python-Wrapper Es ist schwieriger, C-Code für Java zu wrappen als für Python
  • 19.
  • 20.
    Tools zur Python-Java-IntegrationÜbersicht Python von Java aus benutzen Jython JEPP Java von Python aus benutzen JPype JCC Interprozess-Kommunikation CORBA SOAP Andere Remote Object Libraries Python Interpreter Python Interpreter Java Virtual Machine (JVM) Java Code (Anwendung) JEPP JNI Python Code JPype Jython Python Code Interface/Protokoll Python Code Python Code
  • 21.
    Nutzung von Pythonaus Java-Anwendungen Use Cases Die Anwendung soll eingebettete Skripting-Funktionalität haben Die Anwendung soll einen externen Python-Code nutzen Die Applikation soll einen externen Code mit Python-Schnittstelle nutzen C, C++, Fortran, … Tools Jython JEPP
  • 22.
    Jython Vollständige Neu-Implementierungdes Python-Interpreters in 100% Java Python-Code wird in der Java VM ausgeführt Website: http://www.jython.org Letzte Version: Jython 2.5.1 (26.09.2009) Java Virtual Machine Jython Python Code Java Application Code
  • 23.
    Jython Code-Beispiel 1:Java Code Ausführen von Python-Code import org.python.util.PythonInterpreter ; import org.python.core.*; class TestClass { public static void main(String[] args) { try { org.python.util.PythonInterpreter python = new org.python.util.PythonInterpreter (); python.execfile( &quot;python_script.py&quot; ); } catch (Exception e) { System.out.println( “Some error!&quot; ); } }
  • 24.
    Jython Code-Beispiel 2:Python Code Swing from javax.swing import * frame = JFrame( &quot;Hello Jython&quot; ) label = JLabel( &quot;Hello Jython!&quot; , JLabel.CENTER) frame.add(label) frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE) frame.setSize( 200 , 100 ) frame.show()
  • 25.
    JEPP Java EmbeddedPython Einbettung des CPython-Interpreters über das Java Native Interface (JNI) in Java Python-Code wird im CPython-Interpreter ausgeführt Website: http://jepp.sourceforge.net/ Python Interpreter Java Virtual Machine Java Application Code Python Code JNI JEPP
  • 26.
    JEPP Code-Beispiel Ausführen(“evaluate”) von Python-Befehlen Ausführen eines Python-SSkripts Jep jep = new Jep(false, SCRIPT_PATH, cl); jep.eval( &quot;print 'hello'&quot; ); jep.close(); Jep jep = new Jep(false, SCRIPT_PATH, cl); jep.runScript(SCRIPT_PATH + file); jep.close();
  • 27.
    Nutzung von Javaaus Python-Anwendungen Use Cases Die Anwendung soll eine externe Java-Applikation nutzen Die Anwendung soll eine Java-Bibliothek nutzen Tools JPype JCC
  • 28.
    JPype Java toPython Integration Verbindung über die Native Interfaces der Java VM und des Python-Interpreters Startet eine Java Virtual Machine Website: http://jpype.sourceforge.net Python Interpreter JNI JPype Python Application Code Java Virtual Machine Java Application Code
  • 29.
    JPype Code-Beispiel (1)„Hello World“ from jpype import * # Start JVM startJVM ( path to jvm.dll , &quot;-ea&quot; ) # Print &quot;Hello World&quot; java.lang.System.out.println( &quot;Hello World&quot; ) # Shutdown JVM shutdownJVM()
  • 30.
    JPype Code-Beispiel (2)Aufruf einer Java-Methode aus Python import jpype # Start JVM jpype.startJVM( path to jvm.dll , &quot;-ea&quot; ) # Create reference to java package javaPackage = jpype.JPackage( &quot;JavaPackageName&quot; ) # Create reference to java class javaClass = javaPackage.JavaClassName # Create instance of java class javaObject = javaClass() # Call java methods javaObject.JavaMethodName() # Shutdown JVM jpype.shutdownJVM()
  • 31.
    JCC PyLucene's CodeGenerator C++ Code-Generator zum Aufruf von Java aus C++/Python C++ Objekte zum Wrappen von Java-Bibliotheken über JNI Generiert komplette CPython-Extensions Unterstützt werden Mac OS X, Linux, Solaris and Windows C++-Compiler ist notwendig Website: http://lucene.apache.org/pylucene/jcc Teil von PyLucene Python Interpreter JNI Python Code Java Virtual Machine Java Application Code pythonExtension() Generated C++ Wrapper Code JCC Code Generator
  • 32.
    JCC Code-Beispiel Notwendig:Initialisierung einer VM import jcc # Start JVM jcc.initVM(maxheap= ‘2000m’ , …)
  • 33.
    JCC Code-Beispiel Nutzungvon PyLucene: Durchsuchen des Lucene Index Suche nach „Query“ in Verzeichnis „index“ from lucene import QueryParser, IndexSearcher, StandardAnalyzer, FSDirectory, Hit, VERSION, initVM, CLASSPATH initVM(CLASSPATH) directory = FSDirectory.getDirectory( “index” , False) searcher = IndexSearcher(directory) analyzer = StandardAnalyzer() command = raw_input( &quot;Query:&quot; ) query = QueryParser( &quot;contents&quot; , analyzer).parse(command) hits = searcher.search(query) for hit in hits: doc = Hit.cast_(hit).getDocument() print 'path:' , doc.get( &quot;path&quot; ), 'name:', doc.get( &quot;name&quot; ) searcher.close()
  • 34.
    Interprozess-Kommunikation Interprozess-Kommunikation (IPC) Datenaustausch zwischen unterschiedlichen Prozessen auf einem oder mehreren, über Netzwerk verbundenen, Computerns Typische IPC-Techniken Remote Procedure Calls (RPC) Message Passing Die meist verwendeten APIs Object Request Broker (ORB) Web-Services-Protokolle basierend auf XML Nachteil: Zusätzliche Services sind notwendig z.B. ein Directory Service zur Registrierung und Lokation von entfernten Objekten Naming Service für CORBA Universal Description, Discovery and Integration (UDDI) für Web Services
  • 35.
    Object Request Broker(ORBs) CORBA Java Virtual Machine Generated Java Code (Stub) Python Interpreter ORB Python Application Code (Server) Generated Python Code (Skeleton) Java Application Code (Client) IDL Compiler IDL
  • 36.
    CORBA-Implementierungen für PythonFnorb Reine Python-Implementierung, funktioniert mit CPython und Jython Leichtgewichtige CORBA-Implementierung Interoperabel mit dem Standard-ORB von Java Die Entwicklung von Fnorb wurde eingestellt omniORB ORB-Implementierung für C++ und Python, kann von CPython benutzt werden Der Python ORB (omniORBpy) benutzt die C++-Implementierung von omniORB. omniORB wird aktiv weiterentwickelt mit regelmäßigen Releases Website: http://omniorb.sourceforge.net
  • 37.
    CORBA-Beispiel Interface HelloWorld Interface in Interface Definition Language (IDL) module HelloWorld { const string Message = &quot;Hello CORBA World!&quot; ; interface Hello { string hello_world(); }; };
  • 38.
    CORBA-Beispiel Python Server(Fnorb): Implementierung des Interfaces # Standard/built-in modules. import sys # Fnorb modules. from Fnorb.orb import BOA, CORBA # Stubs and skeletons generated by 'fnidl'. import HelloWorld, HelloWorld_skel class HelloWorldServer(HelloWorld_skel.Hello_skel): &quot;&quot;&quot; Implementation of the 'Hello' interface. &quot;&quot;&quot; def hello_world(self): print HelloWorld.Message return HelloWorld.Message
  • 39.
    CORBA-Beispiel Python Server(Fnorb): Main Function def main(argv): # Initialise ORB and BOA orb = CORBA.ORB_init(argv, CORBA.ORB_ID) boa = BOA.BOA_init(argv, BOA.BOA_ID) # Create object reference obj = boa.create( 'fred' , HelloWorldServer._FNORB_ID) # Create an instance of the implementation class. impl = HelloWorldServer() # Activate the implementation boa.obj_is_ready(obj, impl) # Write the stringified object reference to a file open( 'Server.ref' , 'w' ).write(orb.object_to_string(obj)) boa._fnorb_mainloop() # Start the event loop return 0
  • 40.
    CORBA-Beispiel JavaClient public class Client { public static void main ( String args[] ) { java.util.Properties props = System.getProperties(); try { org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,props); org.omg.CORBA.Object obj = null; java.io.BufferedReader in = new java.io.BufferedReader( new java.io.FileReader( “Server.ref&quot; )); String ref = in.readLine(); obj = orb.string_to_object(ref); Hello hello = HelloHelper.narrow(obj); hello.hello_world(); orb.destroy(); } catch (Exception e) { e.printStackTrace(); } }
  • 41.
    Web Services SOAPJava Virtual Machine Servlet Container Java Application Code (Server) Python Interpreter Generated Python Code (Stub) Python Application Code (Client) Generated Java Code (Skeleton) WSDL Compiler WSDL
  • 42.
    Web Services SOAPJava Gute Unterstützung Java API for XML-Based Web Services (JAX-WS) Gute Referenz-Implementierung Python Mittelmäßige bis schlechte Unterstützung Zolera SOAP Infrastructure (ZSI) Einzige SOAP Bibliothek für Python, die halbwegs nutzbar ist
  • 43.
    Weitere Remote ObjectLibraries Python Remote Objects (Pyro) Pyro ist ähnlich zu Java's Remote Method Invocation (RMI) Sehr einfach und portabel, funktioniert mit Jython Hat einen eigenen Naming Service omniORB wird aktiv weiterentwickelt mit regelmäßigen Releases Simple Python Interface to Remote Objects (SPIRO) SPIRO implementiert einen ORB uns dient zur Kommunikation zweischen CPython und Jython Die Entwicklung von SPIRO wurde eingestellt
  • 44.
  • 45.
    Beispiel QF-Test –Automatisiertes Test von GUIs
  • 46.
    Beispiel TENT –Software Integration and Workflow Management
  • 47.
    Use Cases fürPython-Scripting (1) Steuern und kontrollieren des Programms durch Benutzerskripte Beispielsweise für komplexe Parametervariationen oder die Steuerung multidisziplinärer gekoppelter Simulationen Automatisierung sich wiederholender Aufgaben Meistens wird das „Makro“-Aufzeichnung und –Abspielung genannt Erweiterung der Benutzeroberfläche Beispielsweise durch zusätzliche problemangepasste Dialoge oder sonstige Erweiterungen Für Java muss die Skriptsprache die GUI-Bibliotheken nutzen können (AWT, Swing, SWT) Integration zusätzlicher Legacy-Applikationen Wichtig und verbreitet bei Integrations- und Workflow-Systemen End-Anwender können externe Codes ohne Änderung des Java-Programme selber integrieren
  • 48.
    Use Cases fürPython-Scripting (2) Interaktives Experimentieren und Debuggen des Java-Programms Leicht machbar mit einem eingebettete interaktiven Interpreter Erlaubt Endanwendern und Entwickler das Debuggen und Analysieren des Java-Programms zu Laufzeit Erzeugen automatischer Tests zur Qualitätssicherung Aufzeichnen der Benutzeraktionen zur Laufzeit in Form eines Python-Skripts („Journaling“) Editieren und Verallgemeinern des aufgezeichneten Skripts Wieder-Abspielen des Skript entweder manuelle oder automatisch
  • 49.
    Beispiel: Codes mitPython-Schnittstellen Numerische Simulations-Software in C++ bzw. Fortran Beispiele für hochauflösende CFD-Löser mit Python-Schnittstellen DLR TAU-Code ( http://www.dlr.de/as ) ONERA elsA-Code ( http://elsa.onera.fr ) Integration in Java-Workflow-Systeme über die vorgestellten Techniken Eurofighter X-31
  • 50.
    DataFinder Datenmanagement-System Für Daten aus Simulationen Experimenten Erdbeobachtung Programmiersprache Python GUI-Toolkit Qt
  • 51.
    DataFinder-Erweiterung mit Java-Bibliotheken(1) Grid Application Toolkit (GAT) Nutzung von Grid-Ressourcen Entwickelt durch Albert-Einstein Institut (MPI für Gravitationsphysik) und Vrije Universiteit Amsterdam Implementiert in Java ( JavaGAT ) Anbindung an DataFinder über JPype
  • 52.
    DataFinder-Erweiterung mit Java-Bibliotheken(1) Provenance-Aufzeichnung Aufzeichnung von Provenance-Daten Aufzeichnung von Prozessinformationen zur Laufzeit des Prozesses Zur Ermittlung von Ursprung der Daten Konformität des (Daten-) erzeugenden Prozesses Provenance-Software implementiert in Java Server Client-Bibliothek Anbindung über JPype
  • 53.
    Beispiel Provenance-Informationen inSimulations-Workflows Interaktionen: Konfiguration Prozessablauf Monitoring Datentransfer Relationen: - r0: i0 causes i1 - r1: i1 causes i2 - r2: i2 causes i3 - r3: i2 causes i4 - r4: i3 causes i2 - r5: i2 causes m1 - r6: i2 causes d1 - r7: i0 causes d2 Status Akteur Process control File-Server Pre- Processing Parameter variation Simulation Visualization i0 i1 i2 i3 i4 m1 d1 d2 c1 c-1 c2 c-2 c3 c-3 c4 c-4
  • 54.
  • 55.
    pyCologne Die PythonUser Group Köln Monatliche Treffen von Python-Interessierten aus dem Großraum Köln Treffen an jedem 2. Mittwoch im Monat Beginn: 18:30 Uhr Ort: Benutzerrechenzentrum der Universität zu Köln (Berrenrather Strasse 136, Köln) Informationen über pyCologne Internet: http:// www.pycologne.de Twitter: http://twitter.com/ pycologne Mailingliste: https://lists.uni-koeln.de/mailman/listinfo/python-users
  • 56.
    Fragen? Kontakt www.andreas-schreiber.nettwitter.com/onyame [email_address]