Wiki-Quellcode von JMX plugin
Zeige letzte Bearbeiter
author | version | line-number | content |
---|---|---|---|
1 | {{content/}} | ||
2 | |||
3 | == IPluginMonitor == | ||
4 | |||
5 | === Verwendungsmöglichkeiten === | ||
6 | |||
7 | Das Plugin dient zum Zustands-Monitoring bei selbst erstellten Plugins oder prüfen von Verfügbarkeiten angebundener Drittsysteme per JMX-Schnittstelle. | ||
8 | |||
9 | === Methodesignaturen === | ||
10 | |||
11 | {{panel title="{{code language='java'~}~}String check(){{/code~}~}" triggerable="true" fullwidth="true"}} | ||
12 | Diese Methode wird bei jedem Aktualisieren der Anzeige des Monitors aufgerufen. | ||
13 | Im Fall einer erfolgreichen Prüfung ist die Konstante //IPluginMonitor.CHECK_SUCCESS// zurückzuliefern.<br> | ||
14 | Für den Fehlerfall bestehen folgende Möglichkeiten: | ||
15 | * Es kann eine Java-Exception geworfen werden. | ||
16 | * Es kann eine Fehlernachricht zurückgegeben werden. Diese wird in der Monitoring-MBean dargestellt. Die | ||
17 | Zeichenkette kann selbst definiert sein, oder es kann die Konstante //IPluginMonitor.CHECK_ERROR// | ||
18 | verwendet werden. In jeden Fall muss der Wert der zurückgelieferten Zeichenkette ungleich dem Wert der Konstante | ||
19 | //IPluginMonitor.CHECK_SUCCESS// sein. | ||
20 | {{/panel}} | ||
21 | |||
22 | === Beispiel-Implementierungen === | ||
23 | |||
24 | Beispiel 1: Der nachfolgende Quellcode zeigt ein Beispiel, wo auf die Verfügbarkeit eines Drittsystems geprüft wird. | ||
25 | |||
26 | {{code language="java"}} | ||
27 | |||
28 | import java.net.HttpURLConnection; | ||
29 | import java.net.URL; | ||
30 | |||
31 | import de.xima.fc.plugin.interfaces.monitoring.IPluginMonitor; | ||
32 | |||
33 | public class MyMonitor implements IPluginMonitor { | ||
34 | |||
35 | @Override | ||
36 | public String check() { | ||
37 | try { | ||
38 | URL url = new URL("http://example.com"); | ||
39 | HttpURLConnection urlConnection = null; | ||
40 | urlConnection = (HttpURLConnection)url.openConnection(); | ||
41 | urlConnection.setConnectTimeout(1000); | ||
42 | urlConnection.setReadTimeout(1000); | ||
43 | urlConnection.connect(); | ||
44 | if (HttpURLConnection.HTTP_OK != urlConnection.getResponseCode()) { | ||
45 | return urlConnection.getResponseMessage(); | ||
46 | } | ||
47 | return IPluginMonitor.CHECK_SUCCESS; | ||
48 | } | ||
49 | catch (Exception e) { | ||
50 | return IPluginMonitor.CHECK_ERROR; | ||
51 | } | ||
52 | } | ||
53 | } | ||
54 | {{/code}} | ||
55 | |||
56 | Beispiel 2: Abfrage Fehlerstatus eines Statusverarbeitungs-Plugins | ||
57 | |||
58 | {{code language="java"}} | ||
59 | import org.apache.commons.lang3.StringUtils; | ||
60 | |||
61 | import de.xima.fc.plugin.interfaces.monitoring.IPluginMonitor; | ||
62 | import de.xima.foobar.plugin.MyTestPlugin; | ||
63 | |||
64 | public class MyMonitor implements IPluginMonitor { | ||
65 | |||
66 | @Override | ||
67 | public String check() throws Exception { | ||
68 | String state = MyTestPlugin.getMonitoringState(); | ||
69 | if (StringUtils.isBlank(state) || StringUtils.equalsIgnoreCase(IPluginMonitor.CHECK_SUCCESS, state)) { | ||
70 | return IPluginMonitor.CHECK_SUCCESS; | ||
71 | } else { | ||
72 | return state; | ||
73 | } | ||
74 | } | ||
75 | } | ||
76 | {{/code}} | ||
77 | |||
78 | {{code language="java"}} | ||
79 | import java.util.ArrayList; | ||
80 | import java.util.HashMap; | ||
81 | import java.util.LinkedHashMap; | ||
82 | import java.util.List; | ||
83 | import java.util.Map; | ||
84 | |||
85 | import org.apache.commons.lang3.StringUtils; | ||
86 | |||
87 | import de.xima.fc.bl.fdv.processing.result.ProcessingResultMultiValue; | ||
88 | import de.xima.fc.interfaces.plugin.param.workflow.IPluginProcessingParams; | ||
89 | import de.xima.fc.interfaces.plugin.retval.workflow.IPluginProcessingRetVal; | ||
90 | import de.xima.fc.plugin.config.IPluginConfigParam; | ||
91 | import de.xima.fc.plugin.config.IPluginConfigParam.EPluginParamBehavior; | ||
92 | import de.xima.fc.plugin.config.IPluginConfigParamList; | ||
93 | import de.xima.fc.plugin.exception.FCPluginException; | ||
94 | import de.xima.fc.plugin.interfaces.monitoring.IPluginMonitor; | ||
95 | import de.xima.fc.plugin.interfaces.workflow.IPluginProcessing; | ||
96 | import de.xima.fc.plugin.models.config.PluginConfigGroupItem; | ||
97 | import de.xima.fc.plugin.models.config.PluginConfigParam; | ||
98 | |||
99 | |||
100 | @SuppressWarnings("serial") | ||
101 | public class MyTestPlugin implements IPluginProcessing, IPluginConfigParamList { | ||
102 | |||
103 | private static final String PARAM_IN_1 = "InputParameter_1"; | ||
104 | private static final String PARAM_OUT = "OutputParameter"; | ||
105 | |||
106 | private static String monitoringState; | ||
107 | |||
108 | public String getName() { | ||
109 | return "MyPlugin"; | ||
110 | } | ||
111 | |||
112 | public void initPlugin() throws FCPluginException { } | ||
113 | |||
114 | public static String getMonitoringState() { | ||
115 | return monitoringState; | ||
116 | } | ||
117 | |||
118 | @Override | ||
119 | public IPluginProcessingRetVal execute(IPluginProcessingParams processingParams) throws FCPluginException { | ||
120 | // read input values | ||
121 | Map<String, String> pluginParams = processingParams.getParams(); | ||
122 | String param1 = pluginParams.get(PARAM_IN_1); | ||
123 | |||
124 | // check and write state for monitoring | ||
125 | if (StringUtils.isBlank(param1)) { | ||
126 | monitoringState = "Param1 is empty!"; | ||
127 | } else { | ||
128 | monitoringState = IPluginMonitor.CHECK_SUCCESS; | ||
129 | } | ||
130 | // plugin processing | ||
131 | // .... do something | ||
132 | |||
133 | // write return values | ||
134 | String resultValue = "AnyResultValue"; | ||
135 | return new ProcessingResultMultiValue(createResult(resultValue), true); | ||
136 | } | ||
137 | |||
138 | @Override | ||
139 | public String getDescription() { | ||
140 | return "The plugin makes something important..."; | ||
141 | } | ||
142 | |||
143 | @Override | ||
144 | public Map<String, IPluginConfigParam> getConfigParameter() { | ||
145 | Map<String, IPluginConfigParam> map = new LinkedHashMap<>(); | ||
146 | map.put("input", new PluginConfigGroupItem("base data:")); | ||
147 | map.put(PARAM_IN_1, new PluginConfigParam(PARAM_IN_1, "This is a mandatory parameter!", true, EPluginParamBehavior.IN)); | ||
148 | map.put("output", new PluginConfigGroupItem("output data:")); | ||
149 | map.put(PARAM_OUT, new PluginConfigParam(PARAM_OUT, null, false, EPluginParamBehavior.OUT)); | ||
150 | return map; | ||
151 | } | ||
152 | |||
153 | private List<Map<String, String>> createResult(String result) { | ||
154 | List<Map<String, String>> resultList = new ArrayList<Map<String, String>>(); | ||
155 | Map<String, String> resultMap = new HashMap<String, String>(); | ||
156 | resultMap.put(PARAM_OUT, result); | ||
157 | resultList.add(resultMap); | ||
158 | return resultList; | ||
159 | } | ||
160 | } | ||
161 | {{/code}} |