JPA-Tage mit Oracle Deutschland im April 2010
Verfasst von Thomas Darimont unter Allgemein, Veranstaltung am 15. März 2010
Oracle Deutschland in Kooperation mit der buschmais GbR möchten Sie gerne zu einer kostenlosen eintägigen
Veranstaltung einladen, um Sie mit den zahlreichen Fähigkeiten von JPA 2.0, EclipseLink und dessen
JPA-Implementierung vertraut zu machen. Außerdem möchten wir Ihnen darstellen, wie EclipseLink JPA
innerhalb eines konkreten Projektes benutzt wurde, um eine JDO basierte Anwendung zu modernisieren.
Dabei beleuchten wir folgende Fragestellungen:
* Was ist das Java Persistence API und wie ergänzt die Version 2.0 die bestehende Version 1.0?
* Was verbirgt sich hinter EclipseLink? Welche Funktionalitäten bietet EclipseLink, EclipseLink JPA und dessen Erweiterungen?
* Wie wurde in einem konkreten Projekt vorgegangen, um eine JDO basierte Anwendung durch JPA mittels EclipseLink JPA und dessen Erweiterungen abzulösen?
Termine:
20.04.2010 Düsseldorf
21.04.2010 Frankfurt Dreieich
22.04.2010 München
Weitere Informationen zur Agenda, Anfahrt und Anmeldung finden Sie auf der Oracle Homepage unter:
http://www.oracle.com/global/de/community/adf/einladung_ELJPATage.html
sowie auf den Seiten von buschmais:
see you at devoxx 2009
Verfasst von michael@jugsaar unter Devoxx am 5. November 2009
Auch die JUGSaar wird dieses Jahr bei der Devoxx Konferenz in Antwerpen vertreten sein und per Twitter berichten.
Wir sind vom 17.-20.11.2009 dabei und hoffen auf spannende und informative Vorträge.
he will entertain you
Verfasst von michael@jugsaar unter Java am 23. September 2009
Scala Code dynamisch von Java aus aufrufen.
Verfasst von Thomas Darimont unter Hacks, Java, Scala, Spass am 26. März 2009
Hier mal ein kleines Beispiel wie man von Java aus Scala “scripts” dynamisch kompiliert und mit Argumenten ausführt. (Testumgebung ist Ubuntu Linux 8.10 / Eclipse IDE mit Scala Plugin). Das “Script” wird hierbei von dem in dem Scala Interpreter integrierten Compiler kompiliert und nicht etwa über eine IDE Erweiterung wie das Scala Eclipse Plugin.
Das wird u.a. dadurch forciert, dass die scala Files in einem separaten Ordner src-scripts liegen, der sich nicht im Build-Path befindet. Dadurch vermeiden wir, dass das .scala File vom
Scala Builder kompiliert wird.
Um das Beispiel ausführen zu können braucht man die aktuelle Scala Version 2.7.3
Sinn der Übung ist zu zeigen, wie man scala als Scriptsprache in eine Java Anwendung einbetten kann. Die nächste Aufgabe ist nun, den über diesen Weg aufgerufenen Scala Code auch debuggen zu können. Stay tuned
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | package de.tutorials; package de.tutorials; import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; import java.util.HashMap; import scala.List; import scala.tools.nsc.Interpreter; import scala.tools.nsc.Settings; import scala.tools.nsc.util.SourceFile; public class Main { public static void main(String[] args) throws Exception { executeScript(new File("src-script/scripts/Script.scala"),new HashMap<String, String>(){{put("a","1"); put("b","2");put("c","3");}},"scripts.Script.run(args)"); } private static void executeScript(File scriptFile,Object args,String command) throws Exception { Settings settings = new Settings(); File classFileCacheDirectory = new File("/tmp/scala/"); if (!classFileCacheDirectory.exists()) { classFileCacheDirectory.mkdir(); } Interpreter interpreter = new ExtendedInterpreter(settings, classFileCacheDirectory); addToClassPath((URLClassLoader) Thread.currentThread().getContextClassLoader(), classFileCacheDirectory); Object[] context = { scriptFile, null }; interpreter.bind("context", "Array[Object]", context); interpreter.interpret("context(1)=List(new scala.tools.nsc.util.BatchSourceFile(new scala.tools.nsc.io.PlainFile(context(0).asInstanceOf[java.io.File])))"); interpreter.compileSources((List<SourceFile>) context[1]); interpreter.setContextClassLoader(); interpreter.bind("args", "Object", args); interpreter.interpret(command); } private static Method addURLMethod; static { try { addURLMethod = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); addURLMethod.setAccessible(true); } catch (Exception e) { e.printStackTrace(); } } private static void addToClassPath(URLClassLoader classLoader, File classFileCacheDirectory) { try { addURLMethod.invoke(classLoader, classFileCacheDirectory.toURI().toURL()); } catch (Exception e) { e.printStackTrace(); } } } |
Unser erweiterter Scala Interpreter, der die on-the-fly generierten .class Files auf dem Filesystem ablegt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package de.tutorials import scala.tools.nsc._ import scala.tools.nsc.reporters._ import io.PlainFile import java.io.File class ExtendedInterpreter(override val settings: Settings, val classFileCacheDirectory: File) extends Interpreter(settings) { override protected def newCompiler(settings: Settings, reporter: Reporter) = { val comp = new scala.tools.nsc.Global(settings, reporter) comp.genJVM.outputDir = new PlainFile(classFileCacheDirectory); comp } } |
Hier unser Beispiel-Script
1 2 3 4 5 6 7 8 9 | package scripts object Script{ def run(args:Object){ println("Hello World!") println("got args: " + args) println("Bye Bye") } } |
Ausgabe:
context: Array[java.lang.Object] = Array(src-script/scripts/Script.scala, null)
args: java.lang.Object = {b=2, c=3, a=1}
Hello World!
got args: {b=2, c=3, a=1}
Bye Bye
Dabei werden von Scala eine ganze Menge von "zwischen-Klassen" erzeugt:
tom@ubuntu:/tmp/scala$ tree
.
|-- RequestResult$line0$object$.class
|-- RequestResult$line0$object.class
|-- RequestResult$line1$object$.class
|-- RequestResult$line1$object.class
|-- RequestResult$line2$object$.class
|-- RequestResult$line2$object.class
|-- RequestResult$line3$object$.class
|-- RequestResult$line3$object.class
|-- binder0$.class
|-- binder0.class
|-- binder1$.class
|-- binder1.class
|-- line0$object$$iw$$iw$.class
|-- line0$object$$iw$.class
|-- line0$object$.class
|-- line0$object.class
|-- line1$object$$iw$$iw$.class
|-- line1$object$$iw$.class
|-- line1$object$.class
|-- line1$object.class
|-- line2$object$$iw$$iw$.class
|-- line2$object$$iw$.class
|-- line2$object$.class
|-- line2$object.class
|-- line3$object$$iw$$iw$.class
|-- line3$object$$iw$.class
|-- line3$object$.class
|-- line3$object.class
`-- scripts
|-- Script$.class
`-- Script.class
1 directory, 30 files
Beispielcode: detutorialsscalainterpreter
Screencast Demonstriert VisualVM
Verfasst von Thomas Darimont unter Debug, Java, Tools am 18. März 2009
Verschiedene Talks der Devoxx Conference Online verfügbar
Verfasst von Thomas Darimont unter Lernen am 17. März 2009
Viele werden das schon kennen, aber ich denke es sollte an dieser Stelle doch nochmal erwähnt werden
Auf Parleys.com: http://parleys.com/display/PARLEYS/Home findet man eine ganze Reihe aufgezeichneter Konferenz-Talks der Devoxx Conference. Hier kann man sich rundum über Best Practices und neue Java Technologien informieren.
Java 7 – Verzeichnisse auf Änderungen überwachen mit dem WatchService
Verfasst von Thomas Darimont unter Allgemein, Java, Java 7, OpenJDK am 17. März 2009
Hier mal ein Beispiel zur Überwachung eines Verzeichnisses mit dem neuen WatchService des Filesystem APIs unter Java 7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package de.tutorials.training; import static java.nio.file.StandardWatchEventKind.ENTRY_CREATE; import static java.nio.file.StandardWatchEventKind.ENTRY_DELETE; import static java.nio.file.StandardWatchEventKind.ENTRY_MODIFY; import java.nio.file.FileSystems; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.WatchEvent; import java.nio.file.WatchKey; import java.nio.file.WatchService; import java.nio.file.WatchEvent.Kind; public class FileSystemWatcherExample { /** * @param args */ public static void main(String[] args) throws Exception { WatchService watchService = FileSystems.getDefault().newWatchService(); System.out.println(watchService); WatchKey watchKey = Paths.get("/tmp").register(watchService,new Kind[] { ENTRY_CREATE, ENTRY_MODIFY, ENTRY_DELETE }); while (true) { watchKey = watchService.take(); for (WatchEvent watchEvent : watchKey.pollEvents()) { System.out.println(watchEvent.kind() + " " + ((Path) watchEvent.context())); } watchKey.reset(); } } } |
Wenn ich nun in der shell in /tmp/ ein
echo xxx>test1.data
absetze bekomme ich die Ausgabe:
Code:
ENTRY_CREATE test1.data
ENTRY_MODIFY test1.data
Mehr dazu gibts hier:
http://openjdk.java.net/projects/nio…chService.html
http://openjdk.java.net/projects/nio…ns/TS-5686.pdf
Ich weis aber noch nicht wie man den absoluten Pfad der geänderten Datei herausbekommt…
Struktureller Vergleich der rt.jar’s zwischen Java 6 und Java 7 aus dem OpenJDK
Verfasst von Thomas Darimont unter Allgemein am 17. März 2009
hier mal eine Übersicht zu den (public/private) API Änderungen zwischen dem rt.jar von Java 6 und der aktuellen Version von Java 7 (beide aus dem Open JDK).
Hier sieht man welche Klassen, Interfaces, Annoations, Methoden und Felder entfernt, hinzugefügt oder geändert wurden. Den Report gibts in einem sehr übersichtlichen HTML Format.
Damit sieht man sehr schnell, welche API Neuerungen sich im Detail ergeben
Erstellt mit:
http://depfind.sourceforge.net/
…unter 64-Bit Ubuntu Linux.
Das Diff im HTML Format findet man hier: http://www.jugsaar.de/?attachment_id=112
Die Zukunft des Ubiquitous Computing
Verfasst von Thomas Darimont unter Allgemein am 12. März 2009
http://www.ted.com/talks/pattie_maes_demos_the_sixth_sense.html
Wahnsinn… da bekommt man glatt lust das Teil nachzubauen
Parallax Scrolling Effekt mit Javascript und JQuery
Verfasst von Thomas Darimont unter JavaScript, jquery, Spass am 6. März 2009
Schicker Parallax Scrolling Effekt mit JavaScript und JQuery ![]()
http://webdev.stephband.info/parallax.html


Letzte Kommentare