Polecenie twiddle.sh
udostępnia polecenia, które umożliwiają uzyskanie informacji o istniejących ziarnach, ich metodach oraz parametrach.
List wszystkich wpisów z tej serii:
- Polecenie twiddle: jak połączyć się z serwerem aplikacji JBoss AS
- Polecenie twiddle: jak znaleźć informacje o ziarnach i metodach
- Polecenie twiddle: operacje na na zasobach serwera
Lista dostępnych poleceń
Aby uzyskać listę dostępnych poleceń należy wywołać polecenie twiddle.sh
z przełącznikiem --help-commands
:
twiddle.sh commands:
jsr77 Print out JSR77 related information
xmbean Print out mbean metadata as an xmbean descriptor
info Get the metadata for an MBean
get Get the values of one or more MBean attributes
invoke Invoke an operation on an MBean
create Create an MBean
setattrs Set the values of one or more MBean attributes
unregister Unregister one or more MBeans
queryMethod Query the server for a list of matching methods of MBeans
listDomains Query the server for a list of available domains
query Query the server for a list of matching MBeans
set Set the value of one MBean attribute
serverinfo Get information about the MBean server
Polecenie to także udostępnia krótką pomoc do każdej z tych komend:
Help for command: 'query'
Query the server for a list of matching MBeans
usage: query [options] <query>
options:
-c, --count Display the matching MBean count
-- Stop processing options
Examples:
query all mbeans: query '*:*'
query all mbeans in the jboss.j2ee domain: query 'jboss.j2ee:*'
Zerknijmy na jedno z częściej wywoływanych poleceń pobranie danych z drzewa JNDII:
<h1> Other components with java:comp namespace</h1>
<h1>java: Namespace</h1>
<pre>
+- securityManagement (class: org.jboss.security.integration.JNDIBasedSecurityManagement)
+- comp (class: javax.namingMain.Context)
+- XAConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
+- JmsXA (class: org.jboss.resource.adapter.jms.JmsConnectionFactoryImpl)
+- TransactionPropagationContextImporter (class: com.arjuna.ats.internal.jbossatx.jta.PropagationContextManager)
+- policyRegistration (class: org.jboss.security.plugins.JBossPolicyRegistration)
+- ClusteredConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
....
Polecenie to składa się z kilku części:
- twiddle.sh – wywołanie polecenia
twiddle
- invoke – komenda, jak ma zostać wykonana (w tym przypadku wywołanie metody na wybranym ziarnie)
- jboss – domena, w której znajduje się wybrane ziarno
- service=JNDIView – nazwa ziarna, jakie ma zostać wywołane
- list – akcja na wybranym ziarnie
- true – parametr przekazany do ziarna
Jak widać, trzeba podać sporo rożnych danych, aby wywołać dowolne zarządzane ziarno. Odpowiednie parametry można poznać używając np. aplikacji WWW JMX Console, ale także można je uzyskać przy użyciu polecenia twiddle.sh
.
Lista dostępnych domen: listDomains
Polecenie listDomains
pozwala na wyświetlnie listy wszystkich grup, na jakie podzielone są ziarna zarządzane:
Help for command: 'listDomains'
Query the server for a list of available domains
usage: listDomains [options]
options:
-c, --count Display the domain count
-- Stop processing options
Przykładowe użycie:
jboss.security
jboss.jdbc
jboss.remoting
jboss.mq
jboss.classloader
jboss.admin
jboss.j2ee
jboss
...
Jak widać zostały wyświetlone tylko grupy. Ale jest to jednocześnie pierwsza część nazwy ziarna.
Lista dostępnych ziaren: query
Aby uzyskać informacje zarejestrowanych ziarnach należy użyć polecenia query
:
Help for command: 'query'
Query the server for a list of matching MBeans
usage: query [options] <query>
options:
-c, --count Display the matching MBean count
-- Stop processing options
Examples:
query all mbeans: query '*:*'
query all mbeans in the jboss.j2ee domain: query 'jboss.j2ee:*'
Aby poznać jakie ziarna należą do domeny jboss
należy użyć takiego polecenia:
...
jboss:type=Service,name=SystemProperties
jboss:service=KeyGeneratorFactory,type=UUID
jboss:service=proxyFactory,target=ClientUserTransactionFactory
jboss:service=invoker,type=http,target=Naming
jboss:service=JNDIView
jboss:service=invoker,type=pooled
...
Jak widać, na liście znalazło się ziarno JNDIView
.
Można łatwo także uzyskać informacje o wszystkich ziarnach, jakie znajdują się na serwerze JBoss wstawiając znak *
w miejsce domeny:
Lista dostępnych metod dla wybranego ziarna: info
Posiadamy już nazwę ziarna, należałoby teraz uzyskać informacje o tym jaki akcje możemy na nim wykonać, czyli poznań metody oraz ich argumenty. Służy do tego polecenie info
.
Help for command: 'info'
Get the metadata for an MBean
usage: info <mbean -name>
Use '*' to query for all attributes
Oto co wyświetli pytanie o ziarno JNDIView:
Description: JNDIView Service. List deployed application java:comp namespaces,
the java: namespace as well as the global InitialContext JNDI namespace. Also
list HA-JNDI namespace in a cluster environment.
+++ Attributes:
Name: Name
Type: java.lang.String
Access: r-
Name: State
Type: int
Access: r-
Name: StateString
Type: java.lang.String
Access: r-
Name: HANamingService
Type: java.lang.String
Access: rw
+++ Operations:
java.lang.String list(boolean verbose)
java.lang.String listXML()
void create()
void start()
void stop()
void destroy()
void jbossInternalLifecycle(java.lang.String method)
Jak widać poza informacjami o samym ziarnie można zobaczyć listę metod jakie ono udostępnia. Jedną z nich jest list
przyjmująca jeden argument typu boolean
.
Tym sposobem właśnie udało się uzyskać informacje o wszystkich składowych, które były użyte w wywołaniu polecenia invoke
.
Lista dostępnych metod: queryMethod
Istnieje jeszcze jeden sposób na odszukanie ziarna oraz metody. Komenda queryMethod
pozwala na odszukanie wszystkich ziaren oraz metod, które zawierają w sobie podany ciąg znaków.
Help for command: 'queryMethod'
Query the server for a list of matching methods of MBeans
usage: queryMethod [options] <query>
options:
-c, --count Display the matching method count
-f, --filter Filter by domain
-- Stop processing options
Examples:
query methods of all MBeans: queryMethod list
query all methods of all MBeans in the jboss domain: queryMethod -f "jboss:*" list
Aby odszukać metodę list
w ziarnie JNDIView
możemy użyć nastepujących poleceń:
- nie wiemy do jakiej domeny należy ziarno z szukaną metodą
$ twiddle.sh queryMethod list
jboss.deployment:id="SecurityConfig",type=Component listAttachments boolean
jboss.deployment:id="WebInfLibFilter",type=Component listAttachments boolean
jboss.deployment:id="TopicTemplateInfo",type=Component listAttachments boolean
...W moim przypadku polecenie to znalazło ponad 1400 metod zwierających słowo
list
w swojej nazwie. Nie jest to do końca użyteczna informacja, ale zawsze jakaś :). - wiemy w jakiej domenie znajduje się interesujące nas ziarno
$ twiddle.sh queryMethod -f "jboss:*" list
jboss:type=Service,name=SystemProperties removeListener org.jboss.util.property.PropertyListener
jboss:type=Service,name=SystemProperties addListeners [Lorg.jboss.util.property.PropertyListener;
jboss:type=Service,name=SystemProperties addListener org.jboss.util.property.PropertyListener
jboss:type=Service,name=SystemProperties addListener java.lang.String
jboss:service=JNDIView list boolean
jboss:service=JNDIView listXML
jboss:service=AttributePersistenceService apmListAll
jboss:service=AttributePersistenceService apmListAllAsString
jboss:service=invoker,type=unified addListener org.jboss.remoting.callback.InvokerCallbackHandler
jboss:service=invoker,type=unified removeListener org.jboss.remoting.callback.InvokerCallbackHandlerTym raza lista jest krótsza i od razu widać jak nazywa się szukane ziarno łącznie z definicją metody potrzebną do wywołania akcji.
Polecenie queryMethod
jako wynik podaje zarówno pełną nazwę ziarna, jak pełną definicję metody (łącznie z parametrami używanymi do jej wywołania).
Źródła