<<HOME <TechDocs

Alexander von Boguszewski

TIBCO BW5 Appmanage


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

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>