56
Folie 1 Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009 Java und Python Das Beste aus beiden Welten nutzen Java Users Group Köln (05.10.2009, Köln) Andreas Schreiber <[email protected]> Deutsches Zentrum für Luft- und Raumfahrt e.V. http://www.dlr.de/sc

Java und Python - Das Beste aus beiden Welten nutzen

Embed Size (px)

DESCRIPTION

Vortrag auf der Python Users Group Köln (05.10.2009)

Citation preview

Page 1: Java und Python - Das Beste aus beiden Welten nutzen

Folie 1Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Java und Python

Das Beste aus beiden Welten nutzen

Java Users Group Köln (05.10.2009, Köln)Andreas Schreiber <[email protected]>Deutsches Zentrum für Luft- und Raumfahrt e.V.http://www.dlr.de/sc

Page 2: Java und Python - Das Beste aus beiden Welten nutzen

Folie 2Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Das DLR

Page 3: Java und Python - Das Beste aus beiden Welten nutzen

Folie 3Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Das DLRDeutsches Zentrum für Luft- und Raumfahrt

ForschungseinrichtungRaumfahrt-Agentur Projektträger

Page 4: Java und Python - Das Beste aus beiden Welten nutzen

Folie 4Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Köln

Lampoldshausen

Stuttgart

Oberpfaffenhofen

Braunschweig

Göttingen

Berlin-

Bonn

Trauen

Hamburg

Neustrelitz

Weilheim

Bremen-

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.

Page 5: Java und Python - Das Beste aus beiden Welten nutzen

Folie 5Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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

Page 6: Java und Python - Das Beste aus beiden Welten nutzen

Folie 6Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Einrichtung Simulations- und Softwaretechnik

Mission: Erarbeitung neuer Software-Technologien und Untersuchung der Relevanz für das DLREinführung neuer Software-Technologien in DLR-InstitutenEntwicklung eigener und Support externer Software-Produkte

Forschungsgebiete: Software Engineering, Verteiltes Rechnen, Integration, Daten- und Wissensmanagement, High-Performance Computing, Concurrent Engineering, VR

Mitarbeiter: ca. 30

Page 7: Java und Python - Das Beste aus beiden Welten nutzen

Folie 7Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Software-Entwicklungim DLR

Page 8: Java und Python - Das Beste aus beiden Welten nutzen

Folie 8Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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

Page 9: Java und Python - Das Beste aus beiden Welten nutzen

Folie 9Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Software-Entwicklungen in Luft- und RaumfahrtKlassifizierung

Software für missionskritische SystemeEmbedded Software und Real-Time-Software in Flugzeugen, Satelliten, Raumfahrzeugen, …

Software mit großen UserzahlenInternet/Intranet/Email, Webshop für Satellitendaten

Software zur Unterstützung Prozessunterstützung, Datenmanagement, Modellierungs- und Simulationsumgebungen, …

Software deren Effizienz wichtig istNumerische Simulationscodes

Page 10: Java und Python - Das Beste aus beiden Welten nutzen

Folie 10Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Page 11: Java und Python - Das Beste aus beiden Welten nutzen

Folie 11Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

The Right Tool for the Job

Page 12: Java und Python - Das Beste aus beiden Welten nutzen

Folie 12Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

JavaWarum wird Java verwendet?

Weite Verbreitung in vielen AnwendungsgebietenIndustrie, Forschung, Universitäten

Verfügbar auf vielen PlattformenGute 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 EntwicklungswerkzeugeEclipse, NetBeans, IntelliJ IDEA, …

Page 13: Java und Python - Das Beste aus beiden Welten nutzen

Folie 13Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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

Page 14: Java und Python - Das Beste aus beiden Welten nutzen

Folie 14Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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!”

Page 15: Java und Python - Das Beste aus beiden Welten nutzen

Folie 15Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

“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

Page 16: Java und Python - Das Beste aus beiden Welten nutzen

Folie 16Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Das Beste aus beiden Welten nutzen

Großartige Libraries und Tool-Unterstützung Unschlagbar leicht zu

erlernende Sprach-Syntax

Page 17: Java und Python - Das Beste aus beiden Welten nutzen

Folie 17Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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

Page 18: Java und Python - Das Beste aus beiden Welten nutzen

Folie 18Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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

Page 19: Java und Python - Das Beste aus beiden Welten nutzen

Folie 19Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Tools zur Python-Java-Integration

Page 20: Java und Python - Das Beste aus beiden Welten nutzen

Folie 20Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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)Java Code

(Anwendung)

JEPPJEPP

JNI

Python Code

Python Code JPypeJPype

JythonJython

Python Code

Python Code

Interface/P

roto

koll

Python Code

Python Code

Python Code

Python Code

Page 21: Java und Python - Das Beste aus beiden Welten nutzen

Folie 21Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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

Page 22: Java und Python - Das Beste aus beiden Welten nutzen

Folie 22Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Java Virtual Machine

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)

JythonJython

Python Code

Python Code

Java Application

Code

Java Application

Code

Page 23: Java und Python - Das Beste aus beiden Welten nutzen

Folie 23Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

JythonCode-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("python_script.py"); } catch (Exception e) { System.out.println(“Some error!"); }}

Page 24: Java und Python - Das Beste aus beiden Welten nutzen

Folie 24Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

JythonCode-Beispiel 2: Python Code

Swing

from javax.swing import *

frame = JFrame("Hello Jython")label = JLabel("Hello Jython!", JLabel.CENTER)frame.add(label)frame.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE)frame.setSize(200, 100)frame.show()

Page 25: Java und Python - Das Beste aus beiden Welten nutzen

Folie 25Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

JEPPJava 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

Java Application Code

Python Code

Python Code

JNI

JEPPJEPP

Page 26: Java und Python - Das Beste aus beiden Welten nutzen

Folie 26Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

JEPPCode-Beispiel

Ausführen (“evaluate”) von Python-Befehlen

Ausführen eines Python-SSkripts

Jep jep = new Jep(false, SCRIPT_PATH, cl);jep.eval("print 'hello'");jep.close();

Jep jep = new Jep(false, SCRIPT_PATH, cl);jep.runScript(SCRIPT_PATH + file);jep.close();

Page 27: Java und Python - Das Beste aus beiden Welten nutzen

Folie 27Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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

Page 28: Java und Python - Das Beste aus beiden Welten nutzen

Folie 28Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Python Interpreter

JNI

JPypeJPype

Python Application Code

Python Application Code

Java Virtual Machine

Java ApplicationCode

Java ApplicationCode

JPypeJava 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

Page 29: Java und Python - Das Beste aus beiden Welten nutzen

Folie 29Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

JPypeCode-Beispiel (1)

„Hello World“

from jpype import *# Start JVMstartJVM (path to jvm.dll, "-ea")# Print "Hello World"java.lang.System.out.println("Hello World")# Shutdown JVMshutdownJVM()

Page 30: Java und Python - Das Beste aus beiden Welten nutzen

Folie 30Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

JPypeCode-Beispiel (2)

Aufruf einer Java-Methode aus Python

import jpype# Start JVMjpype.startJVM(path to jvm.dll, "-ea")# Create reference to java packagejavaPackage = jpype.JPackage("JavaPackageName")# Create reference to java classjavaClass = javaPackage.JavaClassName# Create instance of java classjavaObject = javaClass()# Call java methodsjavaObject.JavaMethodName()# Shutdown JVMjpype.shutdownJVM()

Page 31: Java und Python - Das Beste aus beiden Welten nutzen

Folie 31Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

JCCPyLucene'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

PythonCode

PythonCode

Java Virtual Machine

Java ApplicationCode

pythonExtension()

Java ApplicationCode

pythonExtension()

Generated C++Wrapper CodeGenerated C++Wrapper Code

JCC CodeGeneratorJCC CodeGenerator

Page 32: Java und Python - Das Beste aus beiden Welten nutzen

Folie 32Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

JCCCode-Beispiel

Notwendig: Initialisierung einer VM

import jcc# Start JVMjcc.initVM(maxheap=‘2000m’, …)

Page 33: Java und Python - Das Beste aus beiden Welten nutzen

Folie 33Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

JCC Code-BeispielNutzung 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("Query:")query = QueryParser("contents", analyzer).parse(command)hits = searcher.search(query)for hit in hits: doc = Hit.cast_(hit).getDocument() print 'path:', doc.get("path"), 'name:', doc.get("name")searcher.close()

Page 34: Java und Python - Das Beste aus beiden Welten nutzen

Folie 34Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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 APIsObject Request Broker (ORB)Web-Services-Protokolle basierend auf XML

Nachteil: Zusätzliche Services sind notwendigz.B. ein Directory Service zur Registrierung und Lokation von entfernten Objekten

Naming Service für CORBAUniversal Description, Discovery and Integration (UDDI) für Web Services

Page 35: Java und Python - Das Beste aus beiden Welten nutzen

Folie 35Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Java Virtual Machine

GeneratedJava Code

(Stub)

GeneratedJava Code

(Stub)

Python Interpreter

Object Request Broker (ORBs)CORBA

OR

B

Python Application

Code(Server)

Python Application

Code(Server)

Generated Python Code

(Skeleton)

Generated Python Code

(Skeleton)

JavaApplication

Code(Client)

JavaApplication

Code(Client)

IDL CompilerIDL Compiler

IDLIDL

Page 36: Java und Python - Das Beste aus beiden Welten nutzen

Folie 36Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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

Page 37: Java und Python - Das Beste aus beiden Welten nutzen

Folie 37Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

CORBA-BeispielInterface

Hello World Interface in Interface Definition Language (IDL)

module HelloWorld {

const string Message = "Hello CORBA World!";

interface Hello {string hello_world();

};};

Page 38: Java und Python - Das Beste aus beiden Welten nutzen

Folie 38Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

CORBA-BeispielPython 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): """ Implementation of the 'Hello' interface. """

def hello_world(self): print HelloWorld.Message return HelloWorld.Message

Page 39: Java und Python - Das Beste aus beiden Welten nutzen

Folie 39Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

CORBA-BeispielPython 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

Page 40: Java und Python - Das Beste aus beiden Welten nutzen

Folie 40Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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")); 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(); }}

Page 41: Java und Python - Das Beste aus beiden Welten nutzen

Folie 41Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Web ServicesSOAP

Java Virtual Machine

Servlet Container

JavaApplication

Code(Server)

JavaApplication

Code(Server)

Python Interpreter

Generated Python Code

(Stub)

Generated Python Code

(Stub)

Python Application

Code(Client)

Python Application

Code(Client)

GeneratedJava Code(Skeleton)

GeneratedJava Code(Skeleton)

WSDL CompilerWSDL Compiler

WSDLWSDL

Page 42: Java und Python - Das Beste aus beiden Welten nutzen

Folie 42Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Web ServicesSOAP

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

Page 43: Java und Python - Das Beste aus beiden Welten nutzen

Folie 43Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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

Page 44: Java und Python - Das Beste aus beiden Welten nutzen

Folie 44Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Beispiele

Page 45: Java und Python - Das Beste aus beiden Welten nutzen

Folie 45Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

BeispielQF-Test – Automatisiertes Test von GUIs

Page 46: Java und Python - Das Beste aus beiden Welten nutzen

Folie 46Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

BeispielTENT – Software Integration and Workflow Management

Page 47: Java und Python - Das Beste aus beiden Welten nutzen

Folie 47Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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

Page 48: Java und Python - Das Beste aus beiden Welten nutzen

Folie 48Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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

Page 49: Java und Python - Das Beste aus beiden Welten nutzen

Folie 49Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Beispiel: Codes mit Python-SchnittstellenNumerische 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

EurofighterEurofighterX-31X-31

Page 50: Java und Python - Das Beste aus beiden Welten nutzen

Folie 50Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

DataFinder

Datenmanagement-System

Für Daten aus

Simulationen

Experimenten

Erdbeobachtung

Programmiersprache

Python

GUI-Toolkit Qt

Page 51: Java und Python - Das Beste aus beiden Welten nutzen

Folie 51Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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 anDataFinder überJPype

Page 52: Java und Python - Das Beste aus beiden Welten nutzen

Folie 52Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

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 implementiertin Java

Server

Client-Bibliothek

Anbindung überJPype

Provenance System

ProvenanceStore

ManagementInterface

QueryInterface

RecordingInterface

Processing Services

Management UIs Presentation UIs

Application Services· Simulation Codes· Workflows· Grid Services

· Provenance Analysis· Process Tracking· Result Validation

· Visualisation· Process Evaluation

Page 53: Java und Python - Das Beste aus beiden Welten nutzen

Folie 53Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Interaktionen:

Konfiguration

Prozessablauf

Monitoring

Datentransfer

BeispielProvenance-Informationen in Simulations-Workflows

Processcontrol File-Server

Pre-Processing

Parametervariation

Simulation Visualization

i0

i1 i2

i3

i4

m1

d1

d2

c1 c-1c2 c-2 c3 c-3

c4c-4

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

Page 54: Java und Python - Das Beste aus beiden Welten nutzen

Folie 54Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Hinweise

Page 55: Java und Python - Das Beste aus beiden Welten nutzen

Folie 55Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

pyCologneDie 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

Page 56: Java und Python - Das Beste aus beiden Welten nutzen

Folie 56Java Users Group Köln > Andreas Schreiber > Java und Python > 05.10.2009

Fragen?Fragen?

KontaktKontakt

www.andreas-schreiber.netwww.andreas-schreiber.net

twitter.com/onyametwitter.com/onyame

[email protected]@dlr.de