<<HOME <TechDocs

Alexander von Boguszewski

TIBCO BW5 Hawk Alerts verarbeiten


Leider gibt es keine vorkonfigurierte Palette mit denen Hawk Alerts und Notifications in einem Tibco BW Prozess eingelesen werden können. Mit einem Java Process Starter und der Hawk Console API kann man die Alerts trotzdem recht leicht abgreifen. Für eine HAWK Domain mit EMS als Data Transport habe ich ein kleines Beispiel erstellt. Wichtig ist es die HAWK, EMS und RV Bibliotheken im Classpath vorhanden sind. Ich habe das JAR tibrvj.jar noch in der TRA Konfiguration manuell aufnehmen müssen.

Der wichtigste Code Teil ist in der INIT Methode des Java Process Starters

public void init() throws Exception {


		Properties prop = new Properties();
		prop.setProperty(HawkConstants.HAWK_DOMAIN, “myDomain”);
		prop.setProperty(HawkConstants.HAWK_TRANSPORT, HawkConstants.HAWK_TRANSPORT_TIBEMS);
		prop.setProperty(HawkConstants.HAWK_EMS_URL, "tcp://localhost:7222");
		prop.setProperty(HawkConstants.HAWK_EMS_USERNAME, "admin");
		prop.setProperty(HawkConstants.HAWK_EMS_PWD, “xxx”);

		hawkConsole = TIBHawkConsoleFactory.getInstance().createHawkConsole(prop);
		hawkMonitor = hawkConsole.getAgentMonitor();

		hawkMonitor.addAlertMonitorListener(new AlertMonitorListener() {

			@Override
			public void onRetransmittedAlert(AlertMonitorEvent e) {
				Map<String, Object> messageMap = new HashMap<String, Object>();
				messageMap.put("AlertID", e.getAlertID());
				messageMap.put("TimeGenerated", e.getTimeGenerated());
				messageMap.put("RuleBaseName", e.getRuleBaseStatus().getName());
			
				if (e instanceof PostAlertEvent) {
					PostAlertEvent ae = (PostAlertEvent) e;
					messageMap.put("AlertText", ae.getAlertText());						

				} else if (e instanceof ClearAlertEvent) {
					ClearAlertEvent ce = (ClearAlertEvent) e;
					messageMap.put("AlertText", ce.getReasonClearedText());
				}
				onEvent(message);

			}

			@Override
			public void onAlertMonitorEvent(AlertMonitorEvent e) {
				if (e instanceof PostAlertEvent) {
					PostAlertEvent ae = (PostAlertEvent) e;
					messageMap.put("AlertText", ae.getAlertText());						

				} else if (e instanceof ClearAlertEvent) {
					ClearAlertEvent ce = (ClearAlertEvent) e;
					messageMap.put("AlertText", ce.getReasonClearedText());
				}
				onEvent(message);
			}
		});

	}

	@Override
	public void onStart() throws Exception {
		hawkMonitor.initialize();
	}


	@Override
	public void onStop() throws Exception {
		hawkMonitor.shutdown();
	}

Hier wird die Verbindung zur Hawk Domain aufgebaut und die Listener auf die Alerts definiert. Um den Alert Meldung im BW Prozess zu verwenden muss ein Mapping durchgeführt werden. Der Einfachheit halber speichere ich die Daten des Alerts, wie Text und Level in einer Map. In einem zweiten Schritt, einer Java Code Activity, lese ich die Map aus und kopiere die Werte in die Ausgabe der Activity. Wenn man den Java Code in eine eigene JAR auslagert kann man ein eigenes DTO verwenden und dies nach XML parsen.