コンソールはアドホックに対応する場合にはいいのですが、自動化したい場合にはどうでしょうか。実は、管理コンソールというのは、JMX管理インターフェースに乗っかっているWebLogic ServerのApplicationの一つです。MBeanリファレンスには、JMSDestinationRuntimeMBeanというMBeanが掲載されています。このMBeanには、引数としてJMS Message SelectorをとるdeleteMessagesオペレーションが含まれています。この引数に空文字を入れると、すべてのメッセージを対象にするワイルドカードとして機能します。
JMSDestinationRuntimeMBean
http://download.oracle.com/docs/cd/E17904_01/apirefs.1111/e13951/mbeans/JMSDestinationRuntimeMBean.html#deleteMessages
JMS Message Selector
http://download.oracle.com/javaee/5/api/javax/jms/Message.html
このためにスタンドアロン JMXクライアントをコーディングするのはあまりエレガントではないので、よりスクリプトに適した方法で実現しましょう。
コンソール以外に、MBeansを参照、起動する別の方法として、JythonベースのWebLogic Scripting Tool (WLST)があります。送信先からメッセージを削除する対話型シェルセッションはこんな感じになります。
D:\Oracle\fmw11gr1ps3\user_projects\domains\hotspot_domain\bin>setDomainEnv.cmdここで、
D:\Oracle\fmw11gr1ps3\user_projects\domains\hotspot_domain>java weblogic.WLST
Initializing WebLogic Scripting Tool (WLST) ...
Welcome to WebLogic Server Administration Scripting Shell
Type help() for help on available commands
wls:/offline> connect('weblogic','welcome1','t3://localhost:7001')
Connecting to t3://localhost:7001 with userid weblogic ...
Successfully connected to Admin Server 'AdminServer' that belongs to domain 'hotspot_domain'.
Warning: An insecure protocol was used to connect to the server. To ensure on-the-wire security, the SSL port or Admin port should be used instead.
wls:/hotspot_domain/serverConfig> serverRuntime()
Location changed to serverRuntime tree. This is a read-only tree with ServerRuntimeMBean as the root.
For more help, use help(serverRuntime)
wls:/hotspot_domain/serverRuntime> cd('JMSRuntime/AdminServer.jms/JMSServers/JMSServer-0/Destinations/SystemModule-0!Queue-0')
wls:/hotspot_domain/serverRuntime/JMSRuntime/AdminServer.jms/JMSServers/JMSServer-0/Destinations/SystemModule-0!Queue-0> ls()
dr-- DurableSubscribers
-r-- BytesCurrentCount 0
-r-- BytesHighCount 174620
-r-- BytesPendingCount 0
-r-- BytesReceivedCount 253548
-r-- BytesThresholdTime 0
-r-- ConsumersCurrentCount 0
-r-- ConsumersHighCount 0
-r-- ConsumersTotalCount 0
-r-- ConsumptionPaused false
-r-- ConsumptionPausedState Consumption-Enabled
-r-- DestinationInfo javax.management.openmbean.CompositeDataSupport(compositeType=javax.management.openmbean.CompositeType(name=DestinationInfo,items=((itemName=ApplicationName,itemType=javax.management.openmbean.SimpleType(name=java.lang.String)),(itemName=ModuleName,itemType=javax.management.openmbean.SimpleType(name=java.lang.String)),(itemNameopenmbean.SimpleType(name=java.lang.Boolean)),(itemName=SerializedDestination,itemType=javax.management.openmbean.SimpleType(name=java.lang.String)),(itemName=ServerName,itemType=javax.management.openmbean.SimpleType(name=java.lang.String)),(itemName=Topic,itemType=javax.management.openmbean.SimpleType(name=java.lang.Boolean)),(itemName=VersionNumber,itemType=javax.management.opule-0!Queue-0, Queue=true, SerializedDestination=rO0ABXNyACN3ZWJsb2dpYy5qbXMuY29tbW9uLkRlc3RpbmF0aW9uSW1wbFSmyJ1qZfv8DAAAeHB3kLZBABZTeXN0ZW1Nb2R1bGUtMCFRdWV1ZS0wAAtKTVNTZXJ2ZXItMAAOU3lzdGVtTW9kdWxlLTABAANBbGwCAlb6IS6T5qL/AAAACgEAC0FkbWluU2VydmVyAC2EGgJW+iEuk+ai/wAAAAsBAAtBZG1pblNlcnZlcgAthBoAAQAQX1dMU19BZG1pblNlcnZlcng=, ServerName=JMSServer-0, Topic=false, VersionNumber=1})
-r-- DestinationType Queue
-r-- DurableSubscribers null
-r-- InsertionPaused false
-r-- InsertionPausedState Insertion-Enabled
-r-- MessagesCurrentCount 0
-r-- MessagesDeletedCurrentCount 3
-r-- MessagesHighCount 2
-r-- MessagesMovedCurrentCount 0
-r-- MessagesPendingCount 0
-r-- MessagesReceivedCount 3
-r-- MessagesThresholdTime 0
-r-- Name SystemModule-0!Queue-0
-r-- Paused false
-r-- ProductionPaused false
-r-- ProductionPausedState Production-Enabled
-r-- State advertised_in_cluster_jndi
-r-- Type JMSDestinationRuntime
-r-x closeCursor Void : String(cursorHandle)
-r-x deleteMessages Integer : String(selector)
-r-x getCursorEndPosition Long : String(cursorHandle)
-r-x getCursorSize Long : String(cursorHandle)
-r-x getCursorStartPosition Long : String(cursorHandle)
-r-x getItems javax.management.openmbean.CompositeData[] : String(cursorHandle),Long(start),Integer(count)
-r-x getMessage javax.management.openmbean.CompositeData : String(cursorHandle),Long(messageHandle)
-r-x getMessage javax.management.openmbean.CompositeData : String(cursorHandle),String(messageID)
-r-x getMessage javax.management.openmbean.CompositeData : String(messageID)
-r-x getMessages String : String(selector),Integer(timeout)
-r-x getMessages String : String(selector),Integer(timeout),Integer(state)
-r-x getNext javax.management.openmbean.CompositeData[] : String(cursorHandle),Integer(count)
-r-x getPrevious javax.management.openmbean.CompositeData[] : String(cursorHandle),Integer(count)
-r-x importMessages Void : javax.management.openmbean.CompositeData[],Boolean(replaceOnly)
-r-x moveMessages Integer : String(java.lang.String),javax.management.openmbean.CompositeData,Integer(java.lang.Integer)
-r-x moveMessages Integer : String(selector),javax.management.openmbean.CompositeData
-r-x pause Void :
-r-x pauseConsumption Void :
-r-x pauseInsertion Void :
-r-x pauseProduction Void :
-r-x preDeregister Void :
-r-x resume Void :
-r-x resumeConsumption Void :
-r-x resumeInsertion Void :
-r-x resumeProduction Void :
-r-x sort Long : String(cursorHandle),Long(start),String[](fields),Boolean[](ascending)
wls:/hotspot_domain/serverRuntime/JMSRuntime/AdminServer.jms/JMSServers/JMSServer-0/Destinations/SystemModule-0!Queue-0> cmo.deleteMessages('')
2
- ドメイン名:hotspot_domain
- JMSサーバ名:JMSServer-0
- キュー名:Queue-0
- システムモジュール名:SystemModule-0
このWLSTコードと、最近同僚のSteveが書いたエントリにある、暗号化されたファイルを使って認証資格情報を格納する方法を組み合わせれば、簡単にセキュアな自動スクリプトにすることができるでしょう。もしこの手順でわからないことがあれば、WLSTの基礎に関するかなり前のエントリを参考にしてください。
参考URL
Steveのエントリ
Using Secure Config Files with the WebLogic Maven Plugin
http://buttso.blogspot.com/2011/02/using-secure-config-files-with-weblogic.html
過去のエントリ
Automate WLS Console Tasks with WLST
http://blogs.oracle.com/jamesbayer/2007/10/automate_wls_console_tasks_wit.html
原文はこちら。
http://blogs.oracle.com/jamesbayer/2011/03/use_wlst_to_delete_all_jms_mes.html
0 件のコメント:
コメントを投稿