Mit AppManage können BW Applikationen in einer TIBCO BW Domain verwaltet werden.
Mit AppManage kann unter Anderen ein Deployment über die Kommandozeile vorbereitet und durchgeführt werden,
Applikationen gestartet und gestoppt werden.
Das Tool findet sich unter /<TIBCO_HOME>/tra/<VERSION>/bin, bei mir unter /opt/tibco/soa/tra/5.9/bin/AppManage
Als Beispiel möchte ich hier eine BW Applikation deployen und starten. Hierfür habe ich im Designer einen einfachen Prozess entwickelt, der Nachrichten von einer Queue in ein Logfile schreibt. Also ziemlich einfach. Im Designer habe ich anschließend das EAR File erzeugt. Bevor wir aber mit dem Deployment starten erzeuge ich zunächst verschlüsselte Login Credentials. Der Username und das Passwort kann zwar auch über Argumente an AppManage übergeben werden, doch dann werden die Credentials in Klartext auch in der History gespeichert. Mit der Credentials Datei kann das Deployment durch Skripte auch einfach automatisiert werden.
Der Befehl hierfür ist
./obfuscate -password CREDENTIALS.TXT
Über die Option wird angegeben, dass das Password nach Aufruf des Programms einmalig angegeben werden muss. In der Credentials Datei muss die Zeile mit dem Password mit pw=!# beginnen. Anschließend folgt dass Password.
obfuscate password
Wie erwähnt kann AppManage die Deployment Konfiguration, Globals etc., aus dem EAR extrahieren. Um AppManage zu starten muss zunächst
in den Bin Ordner (TIBCO_HOME/tra/5.x/bin/) gewechselt werden. Dann über
./AppManage -export -ear /home/tibco/sampleProj.ear -out /home/tibco/sampleProj.xml
eine XML Datei mit den Konfigurationen anlegen. Wie Werte in der Datei können natürlich auch an die Umgebung angepasst werden.
Export Ear
Wenn noch eine Hawk Rulebase zum Deployment hinzugefügt werden soll, muss ein monitor Tag in die sampleProj.xml eingefügt werden.
<monitor>
<rulebases>
<rulebase>
<uri>MyApp.hrb</uri>
<data>base64 encoded rulebase
</data>
</rulebase>
</rulebases>
</monitor>
Unter Linux kann die .hrb Datei mit der Rulebase via
base64 MyApp.hrb > MyApp.base64
kodiert werden. Der Inhalt der MyApp.base64 Datei wird dann in den <data> Tag kopiert.
Anschließend kann die Applikation in die Tibco Domain deployed werden.
Deploy EAR
./AppManage -deploy -ear /home/tibco/sampleProj.ear -deployConfig /home/tibco/sampleProj.xml -domain test_avb -cred credentials
Die Argumente die AppManage für das Deployment benötigt sind
- -ear : Pfad und Name des Applications Archives
- -deployConfig : Pfad und Name der Konfiguration
- -app : Name der Applikation in der Tibco Domain
- -domain : Name der Tibco Domain in die die Applikation deployed werden soll
- -cred : die Datei mit den Credentials. Wenn die Datei nicht verwendet werden soll können die Login Daten mit -user und -pw auch direkt übergeben werden
Mit ./AppManage -config -ear /home/tibco/sampleProj.ear -deployConfig /home/tibco/sampleProj.xml -domain test_avb -cred credentials
kann nur die Konfiguration ausgerollt werden.
Nach dem Deployment kann mit
./AppManage -start -app sampleProj -domain test_avb -cred credentials
die Applikation gestartet werden. Mit
./AppManage -stop -app sampleProj -domain test_avb -cred credentials
kann die Applikation wieder gestoppt werden
Start and Stop EAR
Im Tibco Administrator können wir überprüfen ob das Deployment auch erfolgreich war
TIBCO Adminstrator
Befehlsfolge
vi credentials
./obfuscate -password credentials
cat credentials
./AppManage -export -ear /home/tibco/sampleProj.ear -out /home/tibco/sampleProj.xml
./AppManage -config -ear /home/tibco/sampleProj.ear -deployConfig /home/tibco/sampleProj.xml -domain test_avb -cred credentials
./AppManage -deploy -ear /home/tibco/sampleProj.ear -deployConfig /home/tibco/sampleProj.xml -domain test_avb -cred credentials
./AppManage -start -app sampleProj -domain test_avb -cred credentials
./AppManage -stop -app sampleProj -domain test_avb -cred credentials
Config-XML
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://www.tibco.com/xmlns/ApplicationManagement" name="sampleProj">
<repoInstanceName>%%DOMAIN%%-sampleProj</repoInstanceName>
<description></description>
<contact></contact>
<NVPairs name="Global Variables">
<NameValuePair>
<name>DirLedger</name>
<value>.</value>
</NameValuePair>
<NameValuePair>
<name>DirTrace</name>
<value>.</value>
</NameValuePair>
<NameValuePair>
<name>HawkEnabled</name>
<value>false</value>
</NameValuePair>
<NameValuePair>
<name>JmsProviderUrl</name>
<value>tcp://localhost:7222</value>
</NameValuePair>
<NameValuePair>
<name>JmsSslProviderUrl</name>
<value>ssl://localhost:7243</value>
</NameValuePair>
<NameValuePair>
<name>RemoteRvDaemon</name>
<value></value>
</NameValuePair>
<NameValuePair>
<name>RvDaemon</name>
<value>tcp:7500</value>
</NameValuePair>
<NameValuePair>
<name>RvNetwork</name>
<value></value>
</NameValuePair>
<NameValuePair>
<name>RvService</name>
<value>7500</value>
</NameValuePair>
<NameValuePair>
<name>RvaHost</name>
<value>localhost</value>
</NameValuePair>
<NameValuePair>
<name>RvaPort</name>
<value>7600</value>
</NameValuePair>
<NameValuePair>
<name>TIBHawkDaemon</name>
<value>tcp:7474</value>
</NameValuePair>
<NameValuePair>
<name>TIBHawkNetwork</name>
<value></value>
</NameValuePair>
<NameValuePair>
<name>TIBHawkService</name>
<value>7474</value>
</NameValuePair>
</NVPairs>
<repoInstances selected="local">
<localRepoInstance>
<encoding>ISO8859-1</encoding>
</localRepoInstance>
</repoInstances>
<services>
<bw name="Process Archive.par">
<enabled>true</enabled>
<bindings>
<binding name="Process Archive">
<machine>eai2</machine>
<product>
<type>BW</type>
<version>5.12</version>
<location>/opt/tibco/soa/bw/5.12</location>
</product>
<setting>
<startOnBoot>false</startOnBoot>
<enableVerbose>false</enableVerbose>
<maxLogFileSize>20000</maxLogFileSize>
<maxLogFileCount>5</maxLogFileCount>
<threadCount>8</threadCount>
<java>
<initHeapSize>32</initHeapSize>
<maxHeapSize>256</maxHeapSize>
<threadStackSize>256</threadStackSize>
</java>
</setting>
<ftWeight>200</ftWeight>
<shutdown>
<checkpoint>false</checkpoint>
<timeout>0</timeout>
</shutdown>
</binding>
<binding name="Process Archive-2">
<machine>localhost</machine>
<product>
<type>BW</type>
<version>5.12</version>
<location>/opt/tibco/soa/bw/5.12</location>
</product>
<setting>
<startOnBoot>false</startOnBoot>
<enableVerbose>false</enableVerbose>
<maxLogFileSize>20000</maxLogFileSize>
<maxLogFileCount>5</maxLogFileCount>
<threadCount>8</threadCount>
<java>
<initHeapSize>32</initHeapSize>
<maxHeapSize>256</maxHeapSize>
<threadStackSize>256</threadStackSize>
</java>
</setting>
<ftWeight>200</ftWeight>
<shutdown>
<checkpoint>false</checkpoint>
<timeout>0</timeout>
</shutdown>
</binding>
</bindings>
<NVPairs name="Adapter SDK Properties">
<NameValuePair>
<name>Trace.Task.*</name>
<value>false</value>
</NameValuePair>
<NameValuePair>
<name>EnableMemorySavingMode</name>
<value>false</value>
</NameValuePair>
<NameValuePair>
<name>bw.engine.enableJobRecovery</name>
<value>false</value>
</NameValuePair>
<NameValuePair>
<name>bw.engine.autoCheckpointRestart</name>
<value>true</value>
</NameValuePair>
<NameValuePair>
<name>bw.engine.jobstats.enable</name>
<value>false</value>
</NameValuePair>
<NameValuePair>
<name>log.file.encoding</name>
<value></value>
</NameValuePair>
<NameValuePair>
<name>bw.engine.emaEnabled</name>
<value>false</value>
</NameValuePair>
<NameValuePair>
<name>bw.container.service</name>
<value></value>
</NameValuePair>
<NameValuePair>
<name>bw.container.service.rmi.port</name>
<value>9995</value>
</NameValuePair>
<NameValuePair>
<name>bw.platform.services.retreiveresources.Enabled</name>
<value>false</value>
</NameValuePair>
<NameValuePair>
<name>bw.platform.services.retreiveresources.Hostname</name>
<value>localhost</value>
</NameValuePair>
<NameValuePair>
<name>bw.platform.services.retreiveresources.Httpport</name>
<value>8010</value>
</NameValuePair>
<NameValuePair>
<name>bw.platform.services.retreiveresources.defaultEncoding</name>
<value>ISO8859_1</value>
</NameValuePair>
<NameValuePair>
<name>bw.platform.services.retreiveresources.enableLookups</name>
<value>false</value>
</NameValuePair>
<NameValuePair>
<name>bw.platform.services.retreiveresources.isSecure</name>
<value>false</value>
</NameValuePair>
<NameValuePair>
<name>bw.platform.services.retreiveresources.identity</name>
<value>/Identity_HTTPConnection.id</value>
</NameValuePair>
<NameValuePair>
<name>bw.log4j.configuration</name>
<value></value>
</NameValuePair>
</NVPairs>
<failureCount>0</failureCount>
<failureInterval>0</failureInterval>
<rulebases>
<rulebase>
<uri>MyApp.hrb</uri>
<data>
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CjxydWxlQmFzZT4KCTx2ZXJz
aW9uPjUuMS4wPC92ZXJzaW9uPgoJPG5hbWU+PCFbQ0RBVEFbTXlBcHBdXT48L25hbWU+Cgk8c2No
ZWR1bGU+PC9zY2hlZHVsZT4KCTxhdXRob3I+dGliY28gb24gaG9zdCBsb2NhbGhvc3QoMTI3LjAu
MC4xKSBhdCAyMjowNiBUdWUsIE1hciAxNSwgMjAxNjwvYXV0aG9yPgoJPGxhc3RNb2RpZmljYXRp
b24+dGliY28gb24gaG9zdCBsb2NhbGhvc3QoMTI3LjAuMC4xKSBhdCAyMjowOCBUdWUsIE1hciAx
NSwgMjAxNjwvbGFzdE1vZGlmaWNhdGlvbj4KCTxjb21tZW50PjwhW0NEQVRBW11dPjwvY29tbWVu
dD4KCTxydWxlPgoJCTxuYW1lPjwhW0NEQVRBW0NPTS5USUJDTy5BREFQVEVSLmJ3ZW5naW5lLnRl
c3RfYXZiLk15QXBwMS5Qcm9jZXNzIEFyY2hpdmUtMTpnZXRTdGF0dXMoKTo2MF1dPjwvbmFtZT4K
CQk8c2NoZWR1bGU+PC9zY2hlZHVsZT4KCQk8b3ZlclJ1bGluZz4wPC9vdmVyUnVsaW5nPgoJCTxk
YXRhU291cmNlPgoJCQk8bWljcm9BZ2VudE5hbWU+PCFbQ0RBVEFbQ09NLlRJQkNPLkFEQVBURVIu
YndlbmdpbmUudGVzdF9hdmIuTXlBcHAxLlByb2Nlc3MgQXJjaGl2ZS0xXV0+PC9taWNyb0FnZW50
TmFtZT4KCQkJPG1ldGhvZE5hbWU+Z2V0U3RhdHVzPC9tZXRob2ROYW1lPgoJCQk8aW50ZXJ2YWw+
NjAwMDA8L2ludGVydmFsPgoJCTwvZGF0YVNvdXJjZT4KCQk8dGVzdD4KCQkJPG5hbWU+PCFbQ0RB
VEFbKE5ldyBFcnJvcnMgPiAxKV1dPjwvbmFtZT4KCQkJPHNjaGVkdWxlPjwvc2NoZWR1bGU+CgkJ
CTxvcGVyYXRvciBjbGFzcz0iQ09NLlRJQkNPLmhhd2suY29uZmlnLnJiZW5naW5lLnJ1bGViYXNl
Lm9wZXJhdG9ycy5HcmVhdGVyVGhhbiIgPgoJCQkJPG9wZXJhdG9yIGNsYXNzPSJDT00uVElCQ08u
aGF3ay5jb25maWcucmJlbmdpbmUucnVsZWJhc2Uub3BlcmF0b3JzLlJ1bGVEYXRhIiA+CgkJCQkJ
PGRhdGFPYmplY3QgY2xhc3M9ImphdmEubGFuZy5TdHJpbmciID48IVtDREFUQVtOZXcgRXJyb3Jz
XV0+PC9kYXRhT2JqZWN0PgoJCQkJPC9vcGVyYXRvcj4KCQkJCTxkYXRhT2JqZWN0IGNsYXNzPSJq
YXZhLmxhbmcuSW50ZWdlciIgIHZhbHVlPSIxIiAvPgoJCQk8L29wZXJhdG9yPgoJCQk8Y29uc2Vx
dWVuY2VBY3Rpb24+CgkJCQk8bmFtZT48IVtDREFUQVtzZW5kQWxlcnRIaWdoKGFsZXJ0TXNnPU5l
dyBFcnJvcnMgZm9yIE15QXBwKV1dPjwvbmFtZT4KCQkJCTxzY2hlZHVsZT48L3NjaGVkdWxlPgoJ
CQkJPG1pY3JvQWdlbnROYW1lPkNPTS5USUJDTy5oYXdrLm1pY3JvYWdlbnQuUnVsZUJhc2VFbmdp
bmU8L21pY3JvQWdlbnROYW1lPgoJCQkJPG1ldGhvZE5hbWU+c2VuZEFsZXJ0TWVzc2FnZTwvbWV0
aG9kTmFtZT4KCQkJCTxkYXRhRWxlbWVudCBuYW1lPSJtZXNzYWdlIj4KCQkJCQk8ZGF0YU9iamVj
dCBjbGFzcz0iQ09NLlRJQkNPLmhhd2suY29uZmlnLnJiZW5naW5lLnJ1bGViYXNlLnV0aWwuQWxl
cnRIaWdoIiA+PCFbQ0RBVEFbTmV3IEVycm9ycyBmb3IgTXlBcHBdXT48L2RhdGFPYmplY3Q+CgkJ
CQk8L2RhdGFFbGVtZW50PgoJCQkJPHByb3BlcnRpZXM+CgkJCQk8L3Byb3BlcnRpZXM+CgkJCQk8
cGVyZm9ybU9uY2VPbmx5Lz4KCQkJCTxlc2NhbGF0aW9uVGltZT4wPC9lc2NhbGF0aW9uVGltZT4K
CQkJPC9jb25zZXF1ZW5jZUFjdGlvbj4KCQkJPHRydWVDb25kaXRpb25Qb2xpY3k+CgkJCQk8dHJ1
ZUNvdW50VGhyZXNob2xkPjE8L3RydWVDb3VudFRocmVzaG9sZD4KCQkJPC90cnVlQ29uZGl0aW9u
UG9saWN5PgoJCQk8Y2xlYXJPbj4KCQkJCTxvcGVyYXRvciBjbGFzcz0iQ09NLlRJQkNPLmhhd2su
Y29uZmlnLnJiZW5naW5lLnJ1bGViYXNlLm9wZXJhdG9ycy5FcXVhbHNOdW1iZXIiID4KCQkJCQk8
b3BlcmF0b3IgY2xhc3M9IkNPTS5USUJDTy5oYXdrLmNvbmZpZy5yYmVuZ2luZS5ydWxlYmFzZS5v
cGVyYXRvcnMuUnVsZURhdGEiID4KCQkJCQkJPGRhdGFPYmplY3QgY2xhc3M9ImphdmEubGFuZy5T
dHJpbmciID48IVtDREFUQVtOZXcgRXJyb3JzXV0+PC9kYXRhT2JqZWN0PgoJCQkJCTwvb3BlcmF0
b3I+CgkJCQkJPGRhdGFPYmplY3QgY2xhc3M9ImphdmEubGFuZy5JbnRlZ2VyIiAgdmFsdWU9IjAi
IC8+CgkJCQk8L29wZXJhdG9yPgoJCQk8L2NsZWFyT24+CgkJPC90ZXN0PgoJPC9ydWxlPgo8L3J1
bGVCYXNlPgo=
</data>
</rulebase>
</rulebases>
</monitor>
<bwprocesses>
<bwprocess name="jmsReader.process">
<starter>JMS Queue Receiver</starter>
<enabled>true</enabled>
<maxJob>0</maxJob>
<activation>true</activation>
<flowLimit>0</flowLimit>
</bwprocess>
</bwprocesses>
<isFt>true</isFt>
<faultTolerant>
<hbInterval>10000</hbInterval>
<activationInterval>35000</activationInterval>
<preparationDelay>0</preparationDelay>
</faultTolerant>
</bw>
</services>
</application>