OpenJDK, Java 7 und Oracle

Geschrieben von everflux am Juni 3rd, 2010

Die Java Usergroup Muenster hatte Dalibor Topic zu Gast, der ueber OpenJDK und Java 7 referierte. (Ankündigung: http://www.jug-muenster.de/)

Interessant dabei: Seit OpenJDK in Debian und Ubuntu verfügbar ist, wird dies auch genutzt – ohne dabei jedoch zu Lasten der Nutzerzahlen des „Sun Java“ zu gehen. Es gibt hier also unterschiedliche Nutzer, und offenbar auch solche, die sich ganz bewusst für OpenJDK entscheiden.

Was bietet OpenJDK? Einen nie dagewesenen Einblick in die Entwicklung der am weitesten verbreiteten Sprache der Welt – Java. Dank OpenJDK kann man sich einen Einblick über Entwicklung, Verwaltung und Buildsystem verschaffen, und auch selber an der aktuellen Entwicklung teilhaben.

Und was kommt mit Java 7? Viele kleine Dinge (Projekt Coin), evtl. auch Closures, der Diamond Operator. Und natuerlich wird auch JavaFX durch Oracle massiv weiterentwickelt. (JavaFX ist eine RIA Platfform, die ueber Scene-Graph und Databinding die Entwicklung reichhaltiger grafischer Anwendungen stark erleichtert.) Webseite zu JDK7: https://jdk7.dev.java.net/

Einen Grossteil der Neuerungen betreffen Pruning (alte APIs sollen entfernt werden), Modularisierung der Laufzeitumgebung (Jigsaw) und das Fork-Join-Framework für verbesserte Concurrency. Da Java 7 durch Oracle gegen Ende des Jahres erwartet wird, ist nun der richtige Moment sich damit zu befassen!

Hibernate, JPA 2 und orphanRemoval=true

Geschrieben von everflux am Mai 30th, 2010

Seit JPA 2 gibt es endlich die Moeglichkeit verweiste Objekte einer Collection loeschen zu lassen, so dass keine Hibernate spezifischen Annotationen mehr erforderlich sind.

Hier am Beispiel einer unidirektionalen Assoziation mit JPA 2:

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private Set<PhoneNumber> resultSet = new ArrayList<PhoneNumber>();

Seit Hibernate 3.5.0-Final wird dies auch unterstützt. Offenbar gibt es da aber noch (irgendwo) einen kleinen Bug. Auch kleine Bugs kann man sehr lange suchen. Wenn man weiß, dass ein Update auf Hibernate 3.5.2 Abhilfe schafft, kann man sich das Suchen auch sparen.
Man muss es eben nur wissen. Weiterlesen »

Münster: Vortrag zu OpenJDK / Java 7

Geschrieben von everflux am Mai 19th, 2010

Am kommenden Mittwoch, dem 26.5., findet ein Vortrag zum Thema OpenJDK / Java 7 in Muenster statt. Der Referent ist Dalibor Topic arbeitet als Java F/OSS Ambassador bei Sun Microsystems in Hamburg mit der OpenJDK Community daran, Java in GNU/Linux-Distributionen fest zu verankern und Portierungen auf neue Platformen in das OpenJDK-Projekt einzubinden. Desweiteren ist er bekannt als Mitbetreiber der kaffe.org-Virtual-Machine sowie des GNU-Classpath-Projekts.

Der Vortrag ist kostenlos für jeden Teilnehmer und wird folgende Themen behandeln:

Wie ist der Zwischenstand bei JDK 7? Welche Features sind drin? Was hat es mit Closures auf sich? Wie weit ist die Modularisierung des JDK fortgeschritten? Was bringt invokedynamic in der Praxis? Wie breit ist die OpenJDK-Community aufgestellt? Diese Session ist ein Report aus dem Maschinenraum von JDK 7 und der OpenJDK-Community. 

Weitere Informationen, Anfahrt etc. gibt es auf der Homepage der Java Usergroup Münster: http://www.jug-muenster.de/

Sun Java6 in Ubuntu Lucid

Geschrieben von everflux am April 28th, 2010

In Ubuntu Lucid 10.04 wird OpenJDK das standardmäßig installierte Java. Für den einen oder anderen Anwender oder Java Entwickler stellt sich OpenJDK (derzeit) nicht als sinnvolle Option dar. Neben der Möglichkeit Java – wie jede andere Drittsoftware – von Hand zu installieren und zu pflegen (was häufig vergessen wird), stellt Canonical die Sun Java Version (sun-java6-jdk etc.) über das „Partner“ Repository zur Verfügung.

Wer das Repository nicht in den Paketquellen hat, kann dies einfach hinzufügen:

  1. Synaptic Paketmanager aufrufen (oder ueber Systemverwaltung Softwarequellen)
  2. deb http://archive.canonical.com/ubuntu  lucid partner eintragen
  3. Pakete neu laden
  4. sun-java6-jdk und restliche passende Pakete installieren

Es ist davon auszugehen, dass die Sun Java Pakete auch zukünftig vernünftig gepflegt und auf relativ aktuellem Stand bleiben.

Skipfish und Ubuntu

Geschrieben von everflux am März 21st, 2010

Google hat mit dem Skipfish Projekt ein Sicherheitstool veröffentlicht, mit dem Webanwendungen auf ihre Sicherheit – oder auch Sicherheitslücken untersucht werden können.

Das in C++ Programm unterstützt Windows, Apple Mac OS X und Ubuntu als Betriebssysteme und – wie für Google üblich – wird die besonderes hohe Performanz als Feature genannt. Im folgenden gehe ich kurz die Schritte durch, Skipfish unter Ubuntu Linux zu betreiben. Weiterlesen »

Hudson + Maven: java.net.SocketTimeoutException: Accept timed out

Geschrieben von everflux am März 17th, 2010

Hudson und Maven sind an und für sich ein gutes Gespann… außer es funktioniert mal nicht.

Ausser der Meldung „Socket Timeout“ kamen nicht so viele  Hinweise:

[application] $ /usr/lib/jvm/java-6-sun/bin/java -Dmaven.repo.local=/home/hudson/maven-repository/ -Xms512m
-Xmx1024m -cp /home/hudson/hudson/plugins/maven-plugin/WEB-INF/lib/maven-agent-1.351.jar:
/home/hudson/maven/boot/classworlds-1.1.jar hudson.maven.agent.Main
/home/hudson/maven /home/hudson/hudson/war/WEB-INF/lib/remoting-1.351.jar
/home/hudson/hudson/plugins/maven-plugin/WEB-INF/lib/maven-interceptor-1.351.jar 57590
/home/hudson/hudson/plugins/maven-plugin/WEB-INF/lib/maven2.1-interceptor-1.2.jar
ERROR: Aborted Maven execution for InterruptedIOException
java.net.SocketTimeoutException: Accept timed out
	at java.net.PlainSocketImpl.socketAccept(Native Method)
	at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
	at java.net.ServerSocket.implAccept(ServerSocket.java:453)
	at java.net.ServerSocket.accept(ServerSocket.java:421)
	at hudson.maven.MavenProcessFactory$SocketHandler$AcceptorImpl.accept(MavenProcessFactory.java:167)
	at hudson.maven.MavenProcessFactory.newProcess(MavenProcessFactory.java:202)
	at hudson.maven.ProcessCache.get(ProcessCache.java:231)
	at hudson.maven.MavenModuleSetBuild$RunnerImpl.doRun(MavenModuleSetBuild.java:455)
	at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:416)
	at hudson.model.Run.run(Run.java:1240)
	at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:304)
	at hudson.model.ResourceController.execute(ResourceController.java:88)
	at hudson.model.Executor.run(Executor.java:122)
Finished: ABORTED

Aber auch eine Lösung konnte ich für das Hudson/Maven Problem finden: Deaktivieren von ipv6 brachte die Lösung. Ob es wirklich am ipv6 liegt, oder was dann der tatsächliche Grund war, habe ich nicht weiter untersucht.

Das sonst bei Java Anwendungen gerne verwendete -Djava.net.preferIPv4Stack=true
half in meinem Fall jedenfalls nicht.

Google Exception Handling

Geschrieben von everflux am Februar 5th, 2010

Google schafft es immer wieder cool, um nicht zu sagen charmant zu sein. Diese Exception kam beim duplizieren einer Präsentation unter Google Docs:

Wer kann da böse sein? Besonders angenehm finde ich:

  • Google bedankt sich dafür, dass man mitgeholfen hat, einen Bug zu finden
  • Eine Entschuldigung gibt es auch
  • Aus der Meldung wird klar, dass es sich jemand ansehen wird, ohne dass man einen Fehler melden muss o.ä.
  • Und ganz besonders für technisch interessierte gibt es einen Ausschnitt aus dem Stacktrace, so dass nicht das Gefühl aufkommt, man würde irgendwie lediglich abgespeist

Nicht zu vergessen sind die Google Docs und Writely Entwickler auch nur Menschen – irgendwie beruhigend, dass auch bei denen NullpointerException auftreten können….

Java Networking Probleme mit Debian (testing)

Geschrieben von everflux am Februar 2nd, 2010

Wer unter besonders schwer zu diagnostizierenden Fehlern unter Debian testing leidet, die im Zusammenhang mit Java  oder Java Applikationen auftauchen, könnte von dem Bug 560056 erwischt worden sein, den das netbase Paket eingeführt hat.

Dabei wird das sysctl Setting
net.ipv6.bindv6only=1 in /etc/sysctl.d/bindv6only.conf
gesetzt, welches dann z.B. Socket Exceptions (invalid argument) nach sich zieht.

Eine schnelle Lösung des Problems:
Die Datei /etc/sysctl.d/bindv6only.conf editieren und das Setting auf „0“ umstellen. Danach:
sudo invoke-rc.d procps restart

Der Fehler könnte auch Ubuntu Systeme betreffen, die eine enstprechende Kerneleinstellung haben. Weiterlesen »

Netbeans: Maven Source und JavaDoc

Geschrieben von everflux am Januar 14th, 2010

Netbeans hat einen sehr guten Support für Maven, Maven Projekte werden genauso gut behandelt, wie die ant basierten nativen Netbeans Projekte.

Doch an einer Stelle hakt es etwas: Moechte von Maven dependencies auch den Source Code bzw. JavaDoc zur Verfuegung haben, reicht es nicht, wenn man (wie üblich) ueber die Maven Properties
<downloadSources>true</downloadSources> und <downloadJavadocs>true</downloadJavadocs> den Download aktiviert. Weiterlesen »

Java auf Ubuntu beschleunigen…

Geschrieben von everflux am Januar 7th, 2010

Java benoetigt eine ganze Menge an verschiedenen Klassen, selbst um einfache Programme auszuführen. Ich habe mich mit den verschiedenne JVM Optionen der Sun Java virtual machine beschäftigt. Seit Java 5, bzw. dem JDK 5, gibt es Classdata sharing. Nicht nur, dass die Daten geshared werden können, sie koennen sogar fuer die Plattform aufbereitet werden, und können dann per memory map einer einzelnen Datei eingeblendet werden.
Das reduziert die Startzeit natürlich enorm – bei groesseren Programmen wie z.B. Eclipse fällt das jedoch geringer ins Gewicht, da es sich um Fixkosten handelt.
Diese Cache Datei lässt sich mittels
sudo java -client -Xshare:dump (bzw. -server )
generieren. Der Effekt zeigt sich bei einem kleinen Programm am deutlichsten:
Um sicher zu stellen, dass der Systemcache nicht die Ergebnisse zu sehr beeinfluss, habe ich vor jedem Testlauf
echo 3 > /proc/sys/vm/drop_caches
durchgeführt. Hier die niedrigsten Werte von fünf Läufen ohne und mit Classdata sharing dump.

time java -client Demo
Demo for Fibonacci numbers:
Fibonacci 3: 5

real 0m3.050s
user 0m0.112s
sys 0m0.092s

Mit classdata sharing

time java -client Demo
Demo for Fibonacci numbers:
Fibonacci 3: 5

real 0m1.614s
user 0m0.056s
sys 0m0.052s

Man sieht deutlich, dass sich die Ersparniss bei einem kleinen Programm deutlich bemerkbar macht, jedoch lediglich bei kalten Cache. Sobald das Betriebssystem die nötigen Daten im eigenen Cache hat, fällt die Ausführungszeit auf deutlich unter 100ms. Bei der Server JVM ist von dem Cache aufgrund des initialen Compilevorgangs und der Optimierung auf hohe Ausführungsgeschwindigkeit im Gegensatz zur Startgeschwindigkeit bei der Client VM sowieso kaum noch etwas zu spüren. In so fern dürfte das auf der Devoxx 2009 angekündigte Update des JAR Formats erheblich mehr bringen.


http://everflux.de/
Copyright © 2007, 2008 everflux. Alle Rechte vorbehalten. All rights reserved.