OpenJDK – Java 7 – mit Ubuntu kompilieren

Geschrieben von everflux am Juli 24th, 2011

Ich habe ein merkwuerdiges SSL Problem mit Java 7 (Build 147, dem Release Candidate) im Zusammenhang mit Online-Banking und Jameica/Hibiskus:

Caused by: java.security.cert.CertificateException: Certificates does not conform to algorithm constraints
 at sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(SSLContextImpl.java:873)
 at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:804)
 at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1319)
 ... 19 more

Schaut man sich dazu den Source Code an, sieht man schnell, dass leider die verursachende Exception verschluckt wird. (Das kommt davon, wenn Committer und Reviewer identisch sind…)
Meine Idee war also, OpenJDK selber zu bauen und da ggf. besseres Logging einzubauen. Die im Internet veröffentlichten Anleitungen sind alle ein paar Jahre alt und nicht mehr ganz korrekt, daher hier meine Ergebnisse zum Nachmachen.
Ich habe Ubuntu als System verwendet, dort ist eine Übersetzung von OpenJDK / Java 7 sehr einfach.
OpenJDK wird mittels Mercurial verwaltet, zur Hierarchiebildung wird die Mercurial Forest extension benötigt (und Mercurial). Ist das „mercurial“ Paket bereits installiert so kann man die Forest extension einfach herunterladen:

hg clone http://bitbucket.org/pmezard/hgforest-crew hgforest

Diese muss nun in die .hgrc eingetragen werden: (das „….“ durch den Pfad zum Download ersetzen)

[extensions]
forest=......hgforest/forest.py
fetch=

Danach installiert man die Build Abhängigkeiten:

sudo apt-get install build-essential gawk libasound2-dev libfreetype6-dev libcups2-dev libxt-dev libx11-dev libxtst-dev libxrender-dev

Und checkt per mercurial-forest die Sourcen fuer OpenJDK aus:

hg fclone http://hg.openjdk.java.net/jdk7/jdk7 jdk7

Da beim späteren Build noch Java Abhängigkeiten heruntergeladen werden müssen, hab ich noch folgendens in die Ant Konfiguration eingesetzt: ~/.antrc

ANT_OPTS=”$ANT_OPTS -Dallow.downloads=true”

Für den build benötigt man ein existierendes Java, und setzt folgenden Umgebungsvariablen:

export ALT_BOOTDIR=/usr/lib/jvm/java-6-sun
unset JAVA_HOME
export LANG="C"
make sanity

Da sollten keine Fehler zu sehen sein und gibt dann den „make“ Befehl (dauert bei mir rund 40 Minuten):

make

Und kann es dann aus dem aktuellen Verzeichnis testen ob „java“ vorhanden ist:

build/linux-amd64/bin/java -version

Bei mir sieht das dann folgendermassen aus:

openjdk version "1.7.0-internal"
OpenJDK Runtime Environment (build 1.7.0-internal-tkruse-b00)
OpenJDK 64-Bit Server VM (build 21.0-b17, mixed mode)

Fertig.
(Ja man benötigt wirklich keine „binary plugs“ o.a“. mehr!)

Update: Für Ubuntu 12.04 benötigt man folgende Pakete:

libcups2-dev, libfreetype6-dev, liboss4-salsa-dev

Und muss (Stand Mai 2012) auch wegen der neueren Kernelversion als die bei OpenJDK bekannten eine Environment Variable setzen:
export DISABLE_HOTSPOT_OS_VERSION_CHECK=ok

Glassfish 3.1 und httpOnly Session Cookie

Geschrieben von everflux am März 4th, 2011

Wie bereits in meinem anderen Eintrag zu Glassfish 3.1 beschrieben, ist seit der Implementierung der Servlet 3.0 Spezifikation in Glassfish 3.1 der Session Cookie standardmäßig auf „httpOnly“ gesetzt – dies kann Probleme mit einigen JavaScript Frameworks verursachen.

In dem web.xml Deploymentdescriptor kann dies umkonfiguriert werden, im glassfish-web.xml Descriptor ist dafür leider keine Möglichkeit vorgesehen. Weblogic, auch von Oracle mit BEA zugekauft, verhält sich dabei genauso, auch hier ist der Session Cookie auf httpOnly gesetzt – kann jedoch über den Weblogic spezifischen Deployment Descriptor unabhängig von der web.xml umkonfiguriert werden.

Und Glassfish 3.1 unterstützt nun auch ein Subset des Weblogic Deployment Descriptors um Weblogic kompatibel zu sein. (Vermutlich ist dies auch ein Grund, aus dem die Cookies httpOnly sind, um mit Weblogic konform zu sein.) Auch wenn es komisch ist, dass Glassfish selber keine Möglichkeit vorsieht das Verhalten im eigenen Deployment Deskriptor zu konfigurieren – über den Umweg des Weblogic spezifischen Descriptors geht es dann:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
<session-descriptor>
<cookie-http-only>false</cookie-http-only>
</session-descriptor>
</weblogic-web-app>

Glassfish 3.1: Probleme mit DWR 2 (und mehr)

Geschrieben von everflux am Februar 28th, 2011

Oracle hat heute den Glassfish 3.1 freigegeben – gleichzeitig als Open Source und als Oracle Glassfish Edition. Es gibt eine Menge neues, und dazu gehören auch neue Probleme.

Ich verwende Glassfish schon seit geraumer Zeit um mittels „Continuous Deployment“ für aktuell entwickelte Anwendungen eine separate Umgebung zu haben, in der ich und Kollegen testen können. Das ganze funktioniert mittels eine CI-Servers (Hudson Jenkins in diesem Fall), Maven und einem Deploy Plugin.

Auch mit Glassfish 3.1 funktionierte das Deployment prima – also hier war kein Update von Jenkins oder dem Deploy Plugin erforderlich. Auch die Anwendung startete – jedoch funktionierte nichts. Exceptions über ungültige Sessions gab es, auch Log-Einträge vom hier für Ajax eingesetzten DWR (Direct Web Remoting)

2011-02-28 18:57:13,037 [http-thread-pool-8090(2)] ERROR o.d.dwrp.Batch - A request has been denied as a potential CSRF attack.
2011-02-28 19:03:02,105 [http-thread-pool-8090(5)] ERROR o.d.dwrp.Batch - A request has been denied as a potential CSRF attack.

Dank Firebug etwas schlauem Rumraten und Probieren fand ich dann heraus: Glassfish 3.1 setzt Session Cookies per Default auf „HTTP Only“. Dazu gibt es bereits ein Ticket im Glassfish Tracker: GLASSFISH-15730

Es gibt nun mehrere Möglichkeiten für die nötige Kompatibilität mit Bestandsanwendungen zu sorgen:

Wird man die Anwendung zukünftig immer in einem Servlet 3.0 kompatiblen Container deployen, so kann man in der web.xml das Verhalten umkonfigurieren:

<web-app>
  <session-config>
    <cookie-config>
      <http-only>true</http-only>
    </cookie-config>
  </session-config>
</web-app>

Alternativ kann man bei DWR den CSRF Check deaktivieren, wovon ich jedoch abraten würde:

<servlet>
  <servlet-name>dwr-invoker</servlet-name>
  <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
  <init-param>
    <param-name>crossDomainSessionSecurity</param-name>
    <param-value>false</param-value>
  </init-param>
</servlet>

Die letzte Möglichkeit ist – in diesem Fall – auf DWR 3 umzustellen, hier wurde das Problem grundsätzlich gelöst, so dass nicht mehr per JavaScript auf den Session Cookie zugegriffen werden muss. (Siehe DWR-26) Leider gibt es von DWR 3 bisher noch kein Release, sondern lediglich vorab-Versionen.

Das Problem tritt übrigens auch mit Tomcat 7 auf, und nicht nur mit Glassfish 3.1 – ich frage mich, ob dies Verhalten am Ende sogar in der Servlet 3 Spezifikation vorgegeben ist.
Natürlich betrifft dies nicht ausschließlich DWR, sondern auch andere Anwendungen, die per JavaScript auf den Session Cookie zugreifen wollen/müssen.

Sun considered patent-peace encouraging

Geschrieben von everflux am August 20th, 2010

I was shocked by the law suit Oracle is performing. As far as I understand Oracle sues Google because of patents Oracle acquired with buying Sun Microsystems. This is in a Java related context, but it is not about the Java language itself.

A few days later I told a friend about „elliptic curve cryptography“, which uses smaller key length and is considered to solve the problem of the fast growing key sized required with RSA to provide reasonable security.

I was very surprised to find that Sun contributed to the OpenSSL project elliptic curve cryptography code. Along with that came the explicit granting of usage of related patents in the context of OpenSSL. (Well I knew that Sun was a really big OpenSource contributer with Gnome, OpenOffice and other projects, but I am pleasently surprised whenever I stumble upon something new.)

I will cite one sentence of the OpenSSL-FAQ which clearly underlines the statement of James Gosling that patent suits are „not in the DNA of Sun“. Even more, it shows that Sun considered patent-peace as an important part of innovation:

This „patent peace provision“ is a positive trend for the overall open source community.

A cross industry „patent peace arrangement“ will encourage more technology contribution to the open source community and will help accelerate the standardization of key technologies such as Elliptic Curve Cryptography.

The open source community users can only benefit from this movement.

It makes me sad – over and over again – to remember that Sun in this incarnation seems to be gone.
I wonder which company will follow the Oracle suit. I guess in the end there will be no winners after all.

Oracle ThinkQuest Wettbewerb

Geschrieben von everflux am Juli 16th, 2010

Oracle veranstaltet einen internationalen Wettbewerb, der sich an Studenten richtet: ThinkQuest. Bei dem Wettbewerb koennen in verschiedenen Kategorien (Digital Media, Application Development, ThinkQuest Projects) Beitraege von Studenten eingereicht werden – im Gegenzug gibt es attraktive Preise zu gewinnen. (Laptop, USA Reise zur ThinkQuest Competition, Preise fuer die Schule/Institut der Teilnehmer) Weiterlesen »

Oracle Coherence/Fusion Middleware Wettbewerb

Geschrieben von everflux am Juni 23rd, 2010

Oracle Coherence ist eine Datagrid Lösung, mit der sich auf relativ einfache Weise Application-Clustering für gesteigerte Verfügbarkeit oder Lastskalierung realisieren lässt. (Oracle Coherence ist zum kostenlosen Download auf oracle.com/../coherence verfügbar, für den produktiven Einsatz sind ggf. kostenpflichtige Lizensierungen erforderlich.)
Mit einer Datagrid Lösung lassen sich Rechenaufgaben verteilen, um ein Computing-Grid aufzubauen, hauptsächlich findet Coherence jedoch seinen Einsatz beim Clustering von Anwendungen wie z.B. dem Confluence Wiki von Atlassian, oder auch wenn es um verteiltes Caching von Daten geht. (Ähnlich wie memcached, dass im PHP Umfeld besonders populär ist.) Weiterlesen »

Oracle veröffentlicht Netbeans 6.9

Geschrieben von everflux am Juni 16th, 2010

Netbeans ist nun in der Version 6.9 von Oracle freigegeben worden. Die Entwicklungsumgebung für Java, PHP, JavaScript, Groovy, Scala, … wird von Oracle zusammen mit der OpenSource Community entwickelt. Das nun veröffentlichte Netbeans 6.9 enthält viele Neuerungen. Für PHP Entwickler besonders interessant ist die Unterstützung des Zend Framework in der aktuellen Version. Weiterlesen »

Oracle VirtualBox 3.2.4!

Geschrieben von everflux am Juni 14th, 2010

Oracle VirtualBox 3.2.4 ist verfügbar. Dabei handelt es sich um ein sogenanntes Maintenance Relase, es wurden Geschwindikeits- und Qualitätsverbesserungen vorgenommen.
Das offizielle Changelog ist hier verfügbar, der Download von www.virtualbox.org.

VirtualBox eignet sich weiterhin als eine schnelle und kostenfreie Virtualisierungs-Lösung, um Software gefahrlos auszuprobieren, oder andere Betriebssysteme als auf dem Host zu verwenden. So kann man z.B. einen Blick auf OpenSolaris oder Nexenta werfen, und darauf seine Anwendungen testen oder Erfahrung sammeln.

Für OpenSolaris gab es vor ca. einer Woche wieder Aktualisierungen im dev Repository, so dass ich davon ausgehe, dass auch hier Oracle die Weiterentwicklung voran treibt.

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!

Java 6u15: Oracle Branding

Geschrieben von everflux am August 18th, 2009

Langsam wird es sichtbar – der Kauf von Sun Microsystems durch Oracle. „Etwas mehr rot“ – das ist zumindest was optisch auffällt.

sun-oracle-java

Hier noch das bekannte orange aus einem Dialog:

sun-java


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