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-module

Dieser 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=8888

Bei "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 *.port

Das 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!



Kommentare:

Senden Sie einen Kommentar:
  • HTML Syntax: Eingeschaltet


RWE will Satire verbieten animiert