Schlagwort-Archive: Oracle

javaappletGerade kürzlich dachte ich so bei mir: Warum eigentlich nicht mal wieder einen Java-Artikel schreiben? Die Zeit ist reif dafür. Oracle bringt es mit seiner Intransparenz und seiner faulen Update-Politik offenbar noch fertig, Java komplett in den Ruin zu reiten. In der Öffentlichkeit hatte Java nie einen schlechteren Stand. Dass inzwischen selbst JavaScript ein sehr viel besseres Ansehen als Java genießt, das ist wirklich ein großes Armutszeugnis, das ich Oracle ausstellen muss. Wir erinnern uns an das Jahr 1997: JavaScript war ursprünglich diese nervige Browserspielerei, mit der man den Rechtsklick unterbinden und die Statusleiste im Internet Explorer für blöde Laufschriften missbrauchen konnte.

Java hat bestimmt so einige kleine Problemchen, aber im Moment wird zu Unrecht geschimpft. Das miese Browser-Plugin ist es, das ständig mit neuen Sicherheitslücken negativ in die Schlagzeilen gerät. Dennoch hagelt es jetzt Kommentare in der Art wie: „Java gehört in den Sondermüll und ich kann nur jedem raten, es zu deinstallieren!“. Die Probleme waren kürzlich scheinbar sogar so gravierend, dass das Bundesamt für Sicherheit in der Informationstechnik (BSI) in diesem Drama unbedingt mitspielen wollte und fortan ebenfalls jedem empfiehlt, bloß schnell Java loszuwerden. In meinen Augen allerdings eine ziemlich peinliche Äußerung, die mir beweist, dass der Laden dort auch nur von den üblichen Internetausdruckern geführt wird, die keine Fachkompetenz besitzen. Das ist wie als würde man ständig empfehlen, Windows zu deinstallieren, wenn im Internet Explorer mal wieder eine Sicherheitslücke offengelegt wurde. Das ist mit Kanonen auf Spatzen schießen.

Natürlich würde dort NIE jemand empfehlen, Windows zu deinstallieren. Warum eigentlich nicht? Und wenn wir schon bei Sicherheitslücken sind, wieso empfiehlt das BSI nicht ausnahmsweise was Sinnvolles, z.B. solchen fahrlässigen Mist wie WhatsApp zu deinstallieren, wegen der ganzen Sicherheitslücken, wegen dem komplett unverschlüsselten Traffic, und wegen dem fragwürdigen Datenschutz beim Versenden des kompletten Adressbuches? Aber das ist wohl eine andere Geschichte.

Nichtsdestotrotz hat Java dadurch wieder einen spürbaren Imageschaden abbekommen. Witzigerweise wird Java immer nur dann verteidigt, wenn jemand Minecraft erwähnt. DAS ist so ziemlich der ultimative Beweis dafür, dass es Java schlecht geht: Wenn ein mäßiges aber weitverbreitetes Indie-Spiel so ziemlich das Einzige ist, womit man noch zeigen kann, dass Java manchmal auch ein bisschen toll sein kann. Mich als Java-Entwickler stört das natürlich schon ein wenig, weil Java eigentlich sehr vielseitig und extrem nützlich ist, wenn man platformunabhängig entwickeln möchte. Programmieren in Java macht einfach Spaß und Probleme habe ich damit auch keine.

Nun wollte ich eigentlich einen Beitrag über einen winzig kleinen Fehler in Java schreiben, der mir kürzlich aufgefallen ist, aber ich glaube wenn Java im Moment etwas am wenigsten gebrauchen kann, dann sind das noch mehr Nörgler. Stattdessen werde ich mich mit diesem Beitrag einfach öffentlich solidarisch zu Java bekennen. Ich bin gerne Java-Programmierer und ich würde es am liebsten noch eine Weile bleiben. Es gibt nichts zu bereuen.

Ich weiß nicht ob das typisch für mich ist, dass ich das neue Jahr mit einem Rant einleite, aber zeitlich ist es jedenfalls nicht beabsichtigt. Ich wasche meine Hände in Unschuld. Zunächst also ein frohes neues Jahr. Die tollen, freundlichen Beiträge kommen alle noch die Tage. Wieder einmal habe ich die Hoffnung, dass dieser Artikel all jenen hilft, die mit einem ähnlichen Problem konfrontiert werden. Das Programmiererleben ist sicherlich vieles, aber gewiss nicht einfach.

Vergangene Woche war ich in der Situation eine portable Version einer Solaris JVM (Java Virtual Machine) aktualisieren zu dürfen. Die bisherige Version des JDK6 war leider veraltet und brachte regelmäßig Segmentation Faults im Dauerbetrieb zustande. Ein neueres Update (1.6.0 Update 38) sollte hoffentlich stabiler laufen. Mit einer portablen Version ist eine Java-Installation gemeint, die man einfach auf dem Zielsystem in ein Verzeichnis seiner Wahl entpackt und die sofort (und vor allem ohne betriebssystemabhängige Installation) lauffähig ist. Aus diesem Grund wollte ich mir eine solche Version von Oracle herunterladen. Das war aber schon das erste Problem: Oracle ist nämlich ziemlich scheiße.

Oracle bietet (jedenfalls für Java 6) keine portablen JDKs zum Entpacken an – nur Installer. Da ich auf dem Zielsystem aber keine Installationsprogramme ausführen kann/darf/will, ist das selbstverständlich keine Alternative, zumal ich ja wusste, dass Java problemlos portabel ausführbar ist. Eine Installation ist daher gar nicht nötig. Kurzerhand musste ich also kreativ werden und basteln. Ich wollte den doofen Installer umgehen und die Dateien von Hand extrahieren. Das war gar nicht so schwierig wie ich dachte. Mein Werk wollte ich im Vorbeigehen kurz an einer Client-Anwendung testen, als beim Starten der JVM eine wilde Fehlermeldung erschien:

Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object

Soso, sehr interessant. Die JVM kann die Klasse java.lang.Object nicht finden. Wenn diese Klasse fehlt, dann fehlt praktisch alles. Ein freundliches Google teilte mir mit, dass es vermutlich mit einer fehlenden Datei rt.jar im Verzeichnis /jre/lib/ zusammenhängt. Tatsächlich, diese Datei gab es dort nicht. Ist Oracle wirklich so bescheuert und liefert ein unvollständiges, nicht lauffähiges JDK aus? Ist das die Strafe dafür, dass ich den Installer übergangen habe?

Ist es. Denn der Installer hat zudem die Aufgabe, die rt.jar aus einer gepackten Datei namens rt.pack auszupacken, und diverse weitere Dateien:

./lib/tools.pack
./jre/lib/charsets.pack
./jre/lib/jsse.pack
./jre/lib/deploy.pack
./jre/lib/javaws.pack
./jre/lib/plugin.pack
./jre/lib/rt.pack
./jre/lib/ext/localedata.pack

Warum das so ist, weiß nur der Teufel. Platzersparnis bringt es gegenüber dem umliegenden Archiv keine. Es ist wahrscheinlich reine Schikane. Manche behaupten auch, das wäre ein Mechanismus, um sicherzustellen, dass niemand den Installer umgeht, da dieser ja zum Akzeptieren der AGB auffordert. Zum Glück gibt es die mitgelieferten Java-Tools pack200 und unpack200. Mit deren Hilfe kann man die JAR-Dateien aus den PACK-Dateien befreien – sogar über verschiedene Betriebssysteme hinweg. Und dann klappt das auch wieder mit der JVM.

Seit diesem Tag hasse ich Oracle wieder ein bisschen mehr, und ich bin ein bisschen weiser geworden. In meinen Augen eine echte Schweinerei. Portable Versionen sind super und hinterlassen weniger Spuren. Wenn man weiß was man tut, und wenn man in der Lage ist, sich selbst um die richtigen Pfadangaben zu kümmern, dann hat ein portables Java viele Vorteile, vor allem wenn man viele homogene Systeme unter seiner Obhut hat.

Quellen:
http://www.cynosurex.com/Forums/DisplayComments.php?file=Java/Finding_rt.jar_in_JRE_5.0_Update_9
http://tntit.blogspot.de/2012/04/linux-jdk-6-installation-hard-way.html
http://turbolinux.org/2011/05/error-occurred-during-initialization-of-vm-javalangnoclassdeffounderror-javalangobject/
http://stackoverflow.com/questions/1619662/where-can-i-get-the-latest-jre-jdk-as-a-zip-file-i-mean-no-exe-installer

Schon seit Beginn meines Studiums bin ich großer Fan von OpenOffice.org (und neuerdings entsprechend LibreOffice). Ich finde den Gedanken toll, dass man ein vollständiges Office-Paket, das praktisch den gleichen Leistungsumfang wie Microsoft Office hat, kostenlos im Internet bekommen kann. Manches mag MS Office etwas besser können, anderes kann dafür nur OOo. Aber wer das bessere Preis-Leistungs-Verhältnis hat, muss ich hier wohl nicht extra betonen. Da ein Student sowieso an jeder Ecke sparen muss, war es nur naheliegend, dass ich umgestiegen bin.

In den letzten fünf Jahren hat sich bei mir einiges an Erfahrung im Umgang mit dem freien Office-Paket angesammelt, allem voran deshalb, weil ich sämtliche Ausarbeitungen, Dokumentationen, Diagramme, Präsentationen und meine Diplomarbeit damit verfasst habe. Ich weiß daher, dass sich die Bedienung der Programme gerade für Neulinge, wenn es um komplexere Dinge wie Dokumentenstrukturierung geht, zuerst schwierig gestalten kann. Man hat zwar einen großen Vorteil, wenn man schon mit MS Office umgehen kann, aber es bleibt einem nicht erspart, sich viele Dinge neu anzueignen.

Ich bin ganz gewiss kein Profi im Umgang mit OOo und LibreOffice, eher eine Art fortgeschrittener Anfänger, aber inzwischen kann ich auch anspruchsvollere und längere Dokumente flüssig anfertigen, ohne nach Tutorials zu suchen. Gerade was Dinge wie doppelte Seitennummerierung, aufwändige Kapitelnummerierung, verschiedene Seitenlayouts etc. angeht, habe ich oft Stunden damit zugebracht, mir aus dem Internet herauszusuchen, wie ich das bewerkstelligen kann.

Als sich LibreOffice kürzlich von OpenOffice.org abgespalten hat, war ich zunächst ratlos, welche Office-Lösung ich künftig weiterverwenden sollte. Inzwischen habe ich mich für LibreOffice entschieden. Im Moment macht diese Entscheidung noch keinen merklichen Unterschied, da die Pakete beinahe identisch sind, aber das wird sich rasch ändern. Meine Artikel über LibreOffice werden sich daher fast immer 1:1 auf OOo anwenden lassen. Persönlich ziehe ich die Lösung der Document Foundation vor, da Oracle offenbar nicht unbedingt den besten Ruf in Entwicklerkreisen hat. Ich glaube, dass es sich positiv auswirkt, dass man nicht unter der Fuchtel eines Softwaregiganten steht. Die neugewonnene Freiheit der Entwickler wird LibreOffice dauerhaft zugute kommen, so wie das einst bei der Entstehung von OOo der Fall war.

Da ich mein Wissen in irgendeiner Form mit Neulingen teilen möchte, werde ich voraussichtlich in Zukunft mehrere kleine Tutorials schreiben, die sich mit alltäglichen Problemen im Umgang mit LibreOffice befassen. Am wichtigsten ist mir dabei der LibreOffice Writer, da dieser erfahrungsgemäß am häufigsten gebraucht wird.

Die freie Virtualisierungslösung VirtualBox von Oracle (vormals Sun) liegt seit dem 22. Dezember in der Version 4.0 vor. Erstmals unterstützt diese Version das sogenannte Guest-Scaling. Darunter versteht man nicht etwa das Anpassen der Gast-Auflösung an die Host-Auflösung, sondern das nachträgliche Hoch- oder Runterskalieren von kleineren oder größeren Gast-Auflösungen. Bislang gab es stattdessen nur dicke schwarze Balken zu sehen, wenn die Host-Auflösung sehr viel größer war als die des Gastes.

Seit nicht weniger als drei Jahren warte ich auf diese Funktion, daher auch dieser Beitrag dazu. Von Nutzen kann diese Funktion z.B. dann sein, wenn Anwendungen in der Gastmaschine in einer fixen Auflösung laufen (z.B. Spiele wie Starcraft) und man diese aber trotzdem über die gesamte Monitorgröße nutzen will. Auch kann man nun Gäste schrumpfen lassen um so mehrere gleichzeitig laufende virtuelle Maschinen simultan auf einem Monitor überwachen zu können, ohne deren interne Auflösung zu ändern.

VirtualBox ist so ziemlich die spielefreundlichste und -kompatibelste verfügbare Virtualisierungssoftware und zudem noch frei. Microsofts Virtual PC und VMwares Workstation kommen da nicht ganz ran. VirtualBox ist vielleicht nicht ganz so komfortabel wie VMware Workstation mit seiner automatisierten „unattended“ Windows-Installation, und rein offiziell unterstützt VirtualBox keine Windows 9x-Gäste, aber wenn es um Windows NT geht, ist es meines Erachtens die beste Wahl.