asadmin - Hilfestellungen
asadmin ist in GlassFish das zentrale Kommandozeilentool zur Administration, das verschiedene Kommandos verarbeiten kann. In dieser Serie von Blogeinträgen zum Thema werden jeweils einzelne dieser Kommandos vorgestellt. Dabei will ich nicht die Dokumentation ersetzen, sondern hier v.a. das Zusammenspiel von Kommandos sowie deren Besonderheiten und versteckte Möglichkeiten behandeln.
Bisherige Einträge:
asadmin - Einführung
asadmin - list/get/set
Bereits in der Einführung zu asadmin habe ich geschrieben, dass asadmin eine Vielzahl von Kommandos versteht. Um nicht alle Kommandos auswendig lernen zu müssen, bietet asadmin geeignete Hilfestellungen an.
Bspw. verwendet GlassFish IIOP- und HTTP-Listener. Will man nun einen neuen anlegen, so kann man einfach
asadmin listenereingeben und bekommt alle Befehle, die den Text "listener" enthalten, aufgelistet:
Closest matching command(s):
create-http-listener
create-iiop-listener
delete-http-listener
delete-iiop-listener
list-http-listeners
list-iiop-listeners
CLI001 Ungültiger Befehl listener. Listen Sie die gültigen Befehle mithilfe von "asadmin help" auf.
Bei der Suche kann man zudem den Asterisk als Platzhalter für beliebige Zeichenfolgen verwenden. Will man alle Befehle anzeigen, die einen Listener erzeugen, gibt man anstelle des Obigen den folgenden Befehl ein:
asadmin create.*listenerDas Ergebnis sieht dann wie folgt aus:
Closest matching command(s):
create-http-listener
create-iiop-listener
CLI001 Ungültiger Befehl create.*listener. Listen Sie die gültigen Befehle mithilfe von "asadmin help" auf.
Zu beachten ist, dass wie bei regulären Ausdrücken ".*" und nicht einfach "*" zu verwenden ist. Leider funktionieren aber nicht alle reguläre Ausdrücke. Das Dollarzeichen für ein Zeilenende wird verwendet, das Caret (^) für den Zeilenanfang hingegen wird nicht ausgewertet.
Vergleichbare Hilfestellungen bekommt man, wenn man das Kommando falsch geschrieben hat. Auch dann werden die Kommandos gelistet, die dem eingegebenen am Ähnlichsten sind.
Gibt man ein Kommando ohne Argumente ein oder lässt man ein Pflichtattribut aus, so werden die benötigten Argumente angezeigt. Auch hierzu wieder ein Beispiel. Gibt man
asadmin create-http-listenerein, so erhält man die folgende Ausgabe, die alle benötigten Attribute anzeigt, zusammen mit der Angabe, welche davon Pflichtattribute sind und welche nur optionale (anhand der []-Klammerung zu erkennen).
Verwendung: create-http-listener --listeneraddress address --listenerport listener_port --defaultvs virtual_server [--terse=false] [--echo=false] [--interactive=true] [--host localhost] [--port 4848|4849] [--secure | -s] [--user admin_user] [--passwordfile file_name] [--servername server_name] [--acceptorthreads acceptor_threads] [--xpowered=true] [--redirectport redirect_port] [--securityenabled=false] [--enabled=true] [--target target(Default server)] listener_id
CLI014 listenerport ist eine erforderliche Option.
Weitaus weniger komfortabel ist die direkte Hilfefunktion:
asadmin helplistet einem alle Befehle in einer rasch über den Bildschirm laufenden Liste auf. Glücklicherweise sollte diese Hilfe aufgrund der obigen Hilfestellungen nur selten notwendig sein. Weitaus nützlicher ist die Hilfe zu den einzelnen Kommandos, die man mit
asadmin help kommandoangezeigt bekommt. Auch hier wird die gesamte Hilfe auf einmal angezeigt. Ein geeigneter Pager (less oder more) bieten sich hier an. Die Hilfe bietet einem stets genaue Angaben zu den möglichen Attributen und einige allgemeine Hinweise zu dem Kommando. Sie ist letztlich eine im Ascii-Format abgelegte man-Page. Auf Solaris steht diese auch als reguläre man-Page zur Verfügung, bei den Linux- oder Mac OS X-Downloads ist dies derzeit aber leider noch nicht der Fall.
Gepostet am 03.06.2008 um 09:03 | Kommentare[0]
GlassFish setzt auf OSGi
Überraschend habe ich heute auf der Aquarium-Seite den Link zu Jerome's Blogeintrag gefunden. Demnach wird GlassFishs kommende Version v3 auf OSGi basieren. Das ist insofern überraschend, als SUN einen eigenen Standardisierungs-Request (JSR-277) gestartet hat, der ein Modulsystem schaffen sollte. Dieser Java Specification Request war von Anfang an umstritten. Die Notwendigkeit für ein Modulsystem selbst war und ist dabei in der Java-Community unstrittig. Allerdings wurde dieser JSR stets als ein Gegenentwurf zu OSGi betrachtet.
Ob die Entscheidung, für GlassFish einen OSGi-Kern zu nutzen und nicht mehr auf HK2 zu setzen, einen generellen Richtungswechsel SUNs und möglicherweise das Aus für JSR-277 bedeutet, bleibt abzuwarten. Für GlassFish bedeutet diese Entscheidung jedenfalls, dass Entwickler, die für GlassFish Module entwickeln wollen, keine eigene Technologie lernen müssen, sondern vorhandenes Wissen nutzen können. Und anders rum können sie dadurch ihr bei GlassFish erworbenes Wissen bruchlos in anderen Projekten nutzen.
Da SUN auch angekündigt hat, die OSGi-Implementierung, die die Basis von GlassFish bilden wird, aktiv zu unterstützen, wird auch das Open Source-Projekt, das hier zum Zuge kommt, von diesem Schritt SUNs profitieren.
Kurzum ein zwar überraschender dafür aber umso willkommenerer Schritt von SUN.
Gepostet am 15.04.2008 um 04:22 | Kommentare[0]
asadmin - list/get/set
asadmin ist in GlassFish das zentrale Kommandozeilentool zur Administration, das verschiedene Kommandos verarbeiten kann. In dieser Serie von Blogeinträgen zum Thema werden jeweils einzelne dieser Kommandos vorgestellt. Dabei will ich nicht die Dokumentation ersetzen, sondern hier v.a. das Zusammenspiel von Kommandos sowie deren Besonderheiten und versteckte Möglichkeiten behandeln.
Bisherige Einträge:
asadmin - Einführung
Nachdem ich im letzen Blogeintrag zu asadmin die Grundzüge des Befehls vorgestellt habe, werde ich diesmal die drei eng verwandten Kommandos list, get und set vorstellen.
Alle drei Kommandos behandeln konfigurierbare Elemente in GlassFish. Diese Elemente bilden einen hierarchischen Baum, in dem jeder Vaterknoten beliebig viele Kindknoten haben kann. Die einzelnen Elemente sind dabei per Punkt voneinander getrennt.
Am besten sehen wir dies an einem Beispiel:
asadmin list server.applications.web-moduleDieser Befehl listet alle Webmodule, die für die Domain konfiguriert sind, auf. Das Wurzelelement hier ist "server", dessen Kindknoten "applications" und dessen Kindknoten wiederum "web-module". "server.applications.web-module" ist der sogenannte dotted name dieses Konfigurationselements.
Das "list"-Kommando dient dazu, herauszufinden, welche konfigurierbaren Elemente es unterhalb eines Knotens gibt. Im Zweifelsfall kann man sich mit
asadmin list server.*alle Elemente holen.
Knoten, deren Namen man nicht oder nur teilweise kennt, kann man mittels des Asterisks (*) auslassen. Auch hierfür wieder ein Beispiel:
asadmin list server.*listener.*Dieser Befehl zeigt einem alle konfigurierten HTTP- und IIOP-Listener an. Bspw. für eine frisch aufgesetzte Entwickler-Domain:
server.http-service.http-listener.admin-listener
server.http-service.http-listener.http-listener-1
server.http-service.http-listener.http-listener-2
server.http-service.http-listener.http-listener-2.ssl
server.iiop-service.iiop-listener.SSL
server.iiop-service.iiop-listener.SSL.ssl
server.iiop-service.iiop-listener.SSL_MUTUALAUTH
server.iiop-service.iiop-listener.SSL_MUTUALAUTH.ssl
server.iiop-service.iiop-listener.orb-listener-1
Das "list"-Kommando kann nur Elemente selber anzeigen. Will ich hingegen die Attribute eines Elements sehen oder setzen, so muss ich die "get"- bzw. "set"-Kommandos nutzen. Bspw. kann ich mir den Listener "http-listener-1" im Detail mit dem folgenden Kommando ansehen:
asadmin get server.http-service.http-listener.http-listener-1.*Und als Ergebnis bekomme ich die folgende Liste:
server.http-service.http-listener.http-listener-1.acceptor-threads = 1
server.http-service.http-listener.http-listener-1.address = 0.0.0.0
server.http-service.http-listener.http-listener-1.blocking-enabled = false
server.http-service.http-listener.http-listener-1.default-virtual-server = server
server.http-service.http-listener.http-listener-1.enabled = true
server.http-service.http-listener.http-listener-1.external-port =
server.http-service.http-listener.http-listener-1.family = inet
server.http-service.http-listener.http-listener-1.id = http-listener-1
server.http-service.http-listener.http-listener-1.port = 8080
server.http-service.http-listener.http-listener-1.property.proxiedProtocols = ws/tcp
server.http-service.http-listener.http-listener-1.redirect-port =
server.http-service.http-listener.http-listener-1.security-enabled = false
server.http-service.http-listener.http-listener-1.server-name =
server.http-service.http-listener.http-listener-1.xpowered-by = true
Nun will ich gerne auf 8080 einen Tomcat nutzen, also ändere ich den Port des Listeners wie folgt:
asadmin set server.http-service.http-listener.http-listener-1.port=8888Bei "set"-Kommandos sind Wildcards (*) nicht erlaubt, bei get-Kommandos hingegen schon. Bspw. nutze ich folgenden Befehl, um alle Infos über die Anwendung jsptut (die Anwendung, die für das JSP-Tutorial zuständig ist) zu erhalten:
asadmin get server.*.jsptut.*Wie man im Ergebnis sieht, erhalte ich dabei gleich Infos zu zwei anwendungsrelevanten Knoten sowie zu dem gleich benannten virtuellen Server, der der Anwendung zugeordnet ist:
server.application-ref.jsptut.disable-timeout-in-minutes = 30
server.application-ref.jsptut.enabled = true
server.application-ref.jsptut.lb-enabled = false
server.application-ref.jsptut.ref = jsptut
server.application-ref.jsptut.virtual-servers = jsptut
server.applications.web-module.jsptut.availability-enabled = false
server.applications.web-module.jsptut.context-root = /
server.applications.web-module.jsptut.description =
server.applications.web-module.jsptut.directory-deployed = true
server.applications.web-module.jsptut.enabled = true
server.applications.web-module.jsptut.libraries =
server.applications.web-module.jsptut.location = /some/path/to/exploded/dir
server.applications.web-module.jsptut.name = jsptut
server.applications.web-module.jsptut.object-type = user
server.http-service.virtual-server.jsptut.default-web-module =
server.http-service.virtual-server.jsptut.docroot =
server.http-service.virtual-server.jsptut.hosts = jsptutorial.org,www.jsptutorial.org
server.http-service.virtual-server.jsptut.http-listeners = http-listener-1,http-listener-2
server.http-service.virtual-server.jsptut.id = jsptut
server.http-service.virtual-server.jsptut.log-file = ${com.sun.aas.instanceRoot}/logs/server.log
server.http-service.virtual-server.jsptut.property.docroot = ${com.sun.aas.instanceRoot}/docroot
server.http-service.virtual-server.jsptut.state = on
Ein abschließendes Beispiel für eine schöne Nutzung des "get"-Kommandos, mit dem man schnell einen Überblick über alle von GlassFish belegten Ports bekommt:
asadmin get *.portDas Ergebnis listet einem alle genutzten Ports auf. Der dotted name lässt zudem auf den Zweck des jeweiligen Ports schließen:
server.admin-service.jmx-connector.system.port = 8186
server.http-service.http-listener.admin-listener.port = 4848
server.http-service.http-listener.http-listener-1.port = 8888
server.http-service.http-listener.http-listener-2.port = 8181
server.iiop-service.iiop-listener.SSL.port = 8038
server.iiop-service.iiop-listener.SSL_MUTUALAUTH.port = 8039
server.iiop-service.iiop-listener.orb-listener-1.port = 8037
server.jms-service.jms-host.default_JMS_host.port = 8076
Eine Anmerkung noch: "port" ist in diesem Beispiel ein Attribut, das von mehreren Elementen genutzt wird. Daher musste ich "port" als letzten Teil des dotted names angeben. Kenne ich hingegen das Element und will alle Attribute zu diesem Element wie im vorletzten Beispiel, so muss ich den dotted name mit ".*" abschließen.
Hat man sich mit list/get/set vertraut gemacht, ist dies ein sehr nützliches Kommando-Trio. In meinem englischen Blog habe ich beschrieben, wie ich ausschließlich mit asadmin meine GlassFish-Instanz für vier virtuelle Domains konfiguriert habe. Die hier beschriebenen Kommandos waren dabei ein wichtiger Teil.
Und wer die Kommandos besser verstehen will, kann sich mal mit "asadmin list server.*" alle Elemente ansehen. Oder sich mit dem Unterschied zwischen "asadmin get server.*" und "asadmin get server.*.*" vertraut machen ;-)
In dem Sinne: Happy Coding!
Gepostet am 13.04.2008 um 04:02 | Kommentare[0]
asadmin - Einführung
asadmin ist in GlassFish das zentrale Kommandozeilentool zur Administration, das verschiedene Kommandos verarbeiten kann. In dieser Serie von Blogeinträgen zum Thema werden jeweils einzelne dieser Kommandos vorgestellt. Dabei will ich nicht die Dokumentation ersetzen, sondern hier v.a. das Zusammenspiel von Kommandos sowie deren Besonderheiten und versteckte Möglichkeiten behandeln.
Für den Administrator gibt es drei Möglichkeiten, GlassFish zu verwalten. Die zunächst bequemste ist die webbasierte Administrationskonsole. Allerdings ist deren Einsatz mit Problemen verbunden. Vielfach müssen Administrationsaufgaben per Skript erledigt oder Informationen textbasiert ausgewertet werden. Dazu ist eine Weboberfläche nicht geeignet.
Die zweite Möglichkeit ist die Nutzung der Java Management Extensions (JMX) bzw. deren spezielle GlassFish-Erweiterung AMX. JMX wird tatsächlich sowohl von der webbasierten Adminkonsole als auch von asadmin genutzt. Aber auch JMX ist nur bedingt Skript-geeignet, auch wenn Groovy hier die Möglichkeiten von JMX leichter zugänglich macht. Letztlich ist JMX am besten mittels spezieller Tools (bspw. jconsole) nutzbar.
Die dritte Möglichkeit ist das Kommandozeilentool asadmin. Dieses Tool ist in meinen Augen eine besondere Stärke von GlassFish und mit der Zeit zu meinem Lieblingsadministrationstool geworden. In weiteren Blog-Einträgen werde ich einzelne Kommandos vorstellen, in diesem beschreibe ich kurz den generellen Umgang mit asadmin.
Zunächst einmal muss man wissen, dass asadmin ein Skript ist. Unter Unix-artigen Betriebssystemen (m.W. werden Linux, Solaris, Mac OS X und AIX unterstützt) ist asadmin ein Shellskript, unter Windows heißt das Skript asadmin.bat und ist ein Batchskript. asadmin startet letzlich immer einen Java-Prozess.
asadmin kann man im interaktiven Modus nutzen oder im Skriptmodus. Im ersten Fall ruft man die asadmin-Konsole einfach mit "asadmin" auf. Diese kann man mit "exit" jederzeit wieder verlassen. "help" listet alle verfügbaren Kommandos auf, die asadmin verarbeiten kann (wie bei "more" kann man Return blättern). Die interaktive asadmin-Konsole verfügt aber nicht über den Komfort einer Shell und wird von mir daher nicht genutzt.
Im Skriptmodus ruft man asadmin direkt mit einem Kommando aus, das ausgeführt werden soll, plus all der Parameter, die das auszuführende Kommando benötigt. Ein asadmin-Kommando ist also nicht "asadmin" selbst sondern bspw. "list", ein Kommando, das von asadmin verstanden wird.
Der allgemeine Aufbau sieht dabei wie folgt aus:
asadmin Kommando [--param1 paramValue(s)] [--param2 paramValue(s)] [target|name|path|...]Ein Beispiel wäre
asadmin list "server.*"In dieser Blogeintrags-Serie werde ich nach und nach asadmin-Kommandos vorstellen. Allerdings nicht so sehr die Parameter im Detail - dazu gibt es eine sehr gute Übersicht bei SUN - sondern vielmehr die Besonderheiten der Kommandos, deren Zusammenspiel und evtl. auch mal Nickeligkeiten.
Alle Kommandos nehmen zudem immer folgende Parameter an, die bei Entwicklerprofilen allerdings nur in Ausnahmefällen angegeben werden müssen:
| Parameter | Bedeutung |
|---|---|
| --host | Die Maschine, auf der der Domain Administration Server läuft. |
| --port | Der Port, auf dem der Domain Administration Server lauscht. |
| --user | Der Adminnutzer. |
| --passwordfile | Der Pfad auf die Datei, die die Passworthashes enthält. |
Die einzelnen Kommandos stelle ich demnächst in weiteren Blogeinträgen vor.
Gepostet am 27.03.2008 um 10:20 | Kommentare[0]
FOSDEM 2008
Dieses Jahr war bereits meine vierte FOSDEM. Wie jedes Jahr fand das Free and Open Source Developers European Meeting auf dem Gelände der Université Libre de Bruxelles statt - und endlich einmal hat das Wetter mitgespielt, und man konnte sich auch außerhalb des Uni-Gebäudes aufhalten und mitunter sogar in der Sonne sitzen.
Wie immer fingen die Keynotes mit erheblicher Verspätung an, dafür folgten sie dann unterbrechungsfrei aufeinander. Das war nicht so ganz nach meinem Geschmack. Die erste Keynote über die Nutzung von Linux bei der Filmproduktion war zwar interessant, aber schwer anzuhören. Die zweite über das FreeBSD-Projekt war beeindruckend. Auch wenn ich Linux vorziehe, bin ich doch froh, dass mit den BSDs freie Alternativen existieren und diese offensichtlich auch weiterhin gut gedeihen.
Trotz dem gelungenen Vortrag brauchte ich danach einfach eine Pause und einen Kaffee. Außerdem gab es draußen belgische Pommes! Somit habe ich den Vortrag zum aktuellen Stand der Patent-Debatte verpasst, obwohl er mich von den Keynotes eigentlich am meisten interessiert hätte.
Das Wichtigste an der FOSDEM sind allerdings die Developer-Tracks. Bei meinen vorherigen FOSDEM-Besuchen hatte ich hauptsächlich die Tracks zu den freien Java-Implementierungen (2007 war dann auch SUN mit Vertretern des OpenJDK-Teams erstmalig mit dabei) besucht, doch diesmal standen für mich andere Themen an. Meine Themenschwerpunkte lagen auf den PostgreSQL- und OpenOffice-Vorträgen. PostgreSQL entwickelt sich in einem erfreulichen Tempo und in eine gute Richtung und wird sicher weiter an Bedeutung gewinnen.
Beim Vergleich der Vorträge des PostgreSQL- und des OpenOffice-Teams hatte ich den Eindruck, dass es den Postgres-Vortragenden eher gelang, neue Leute anzusprechen, als dem OpenOffice-Team. Aber letztere haben es mit ihrer Code-Basis auch sicher schwerer. Deutlich ist das Bemühen erkennbar, OpenOffice stärker zu modularisieren und die Einstiegshürde für Neue abzusenken. Die Extensions sind hier ein wichtiger Schritt in die richtige Richtung. Bis auch die Entwicklung am OO.o-Kern oder den einzelnen Anwendungen attraktiv wird, bleibt jedoch noch viel zu tun. Das OO.o-Team jedenfalls wirbt intensiv um neue Entwickler oder andere Projektbeteiligte und ist dabei, die derzeit existierenden Hürden für den Einstieg ins Projekt abzusenken. OpenOffice 3.0 wird hierbei ein weiterer wichtiger Meilenstein sein.
Fast schon eine Tradition ist mein Besuch von Robert Kaisers (a.k.a. KaiRo) Vortrag über den jeweils aktuellen Stand der Seamonkey-Entwicklung. Seamonkey ist der aus der Mozilla-Suite hervorgegangene Browser in seiner aktuellen Version. Er wird fleißig weiter entwickelt, und die Neuerungen für die Version sehen vielversprechend aus.
Für mich als schwerpunktmäßiger Webentwickler war Rogan Dawes' Vortrag über WebScarab NG besonders interessant. WebScarab ist etwas vereinfacht ein Tool zum Abfangen von Browser-Requests und Server-Antworten, um diese manipulieren zu können. Damit ist es somit zur Durchführung von Penetration-Tests geeignet. Diverse Plugins unterstützen einen dabei. Ein Tool, über das ich hier im Blog sicher noch ausführlicher schreiben werde.
Wie immer gibt es zwischendrin Lücken und dann wieder mehrere interessante Vorträge auf einmal. So habe ich leider den Globulation-Vortrag und den Beitrag "Hacking OpenOffice.org" nicht hören können.
Die FOSDEM war auch 2008 wieder den Besuch wert, und so werde ich nächstes Jahr sicher wieder dabei sein. Und das belgische Bier und die kulinarische Vielfalt Brüssels bilden zudem eine gute Grundlage für den abendlichen Ausgleich ;-)
Gepostet am 05.03.2008 um 11:12 | Kommentare[0]
