001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.camel.management.mbean; 018 019import java.util.Set; 020 021import org.apache.camel.CamelContext; 022import org.apache.camel.NoTypeConversionAvailableException; 023import org.apache.camel.RuntimeCamelException; 024import org.apache.camel.api.management.ManagedResource; 025import org.apache.camel.api.management.mbean.ManagedBacklogDebuggerMBean; 026import org.apache.camel.impl.debugger.BacklogDebugger; 027import org.apache.camel.spi.Language; 028import org.apache.camel.spi.ManagementStrategy; 029 030@ManagedResource(description = "Managed BacklogDebugger") 031public class ManagedBacklogDebugger implements ManagedBacklogDebuggerMBean { 032 033 private final CamelContext camelContext; 034 private final BacklogDebugger backlogDebugger; 035 036 public ManagedBacklogDebugger(CamelContext camelContext, BacklogDebugger backlogDebugger) { 037 this.camelContext = camelContext; 038 this.backlogDebugger = backlogDebugger; 039 } 040 041 public void init(ManagementStrategy strategy) { 042 // do nothing 043 } 044 045 public CamelContext getContext() { 046 return camelContext; 047 } 048 049 public BacklogDebugger getBacklogDebugger() { 050 return backlogDebugger; 051 } 052 053 @Override 054 public String getCamelId() { 055 return camelContext.getName(); 056 } 057 058 @Override 059 public String getCamelManagementName() { 060 return camelContext.getManagementName(); 061 } 062 063 @Override 064 public String getLoggingLevel() { 065 return backlogDebugger.getLoggingLevel(); 066 } 067 068 @Override 069 public void setLoggingLevel(String level) { 070 backlogDebugger.setLoggingLevel(level); 071 } 072 073 @Override 074 public boolean isEnabled() { 075 return backlogDebugger.isEnabled(); 076 } 077 078 @Override 079 public void enableDebugger() { 080 backlogDebugger.enableDebugger(); 081 } 082 083 @Override 084 public void disableDebugger() { 085 backlogDebugger.disableDebugger(); 086 } 087 088 @Override 089 public void addBreakpoint(String nodeId) { 090 backlogDebugger.addBreakpoint(nodeId); 091 } 092 093 @Override 094 public void addConditionalBreakpoint(String nodeId, String language, String predicate) { 095 backlogDebugger.addConditionalBreakpoint(nodeId, language, predicate); 096 } 097 098 @Override 099 public void removeBreakpoint(String nodeId) { 100 backlogDebugger.removeBreakpoint(nodeId); 101 } 102 103 @Override 104 public void removeAllBreakpoints() { 105 backlogDebugger.removeAllBreakpoints(); 106 } 107 108 @Override 109 public Set<String> getBreakpoints() { 110 return breakpoints(); 111 } 112 113 @Override 114 public Set<String> breakpoints() { 115 return backlogDebugger.getBreakpoints(); 116 } 117 118 @Override 119 public void resumeBreakpoint(String nodeId) { 120 backlogDebugger.resumeBreakpoint(nodeId); 121 } 122 123 @Override 124 public void setMessageBodyOnBreakpoint(String nodeId, Object body) { 125 backlogDebugger.setMessageBodyOnBreakpoint(nodeId, body); 126 } 127 128 @Override 129 public void setMessageBodyOnBreakpoint(String nodeId, Object body, String type) { 130 try { 131 Class<?> classType = camelContext.getClassResolver().resolveMandatoryClass(type); 132 backlogDebugger.setMessageBodyOnBreakpoint(nodeId, body, classType); 133 } catch (ClassNotFoundException e) { 134 throw RuntimeCamelException.wrapRuntimeCamelException(e); 135 } 136 } 137 138 @Override 139 public void removeMessageBodyOnBreakpoint(String nodeId) { 140 backlogDebugger.removeMessageBodyOnBreakpoint(nodeId); 141 } 142 143 @Override 144 public void setMessageHeaderOnBreakpoint(String nodeId, String headerName, Object value) { 145 try { 146 backlogDebugger.setMessageHeaderOnBreakpoint(nodeId, headerName, value); 147 } catch (NoTypeConversionAvailableException e) { 148 throw RuntimeCamelException.wrapRuntimeCamelException(e); 149 } 150 } 151 152 @Override 153 public void setMessageHeaderOnBreakpoint(String nodeId, String headerName, Object value, String type) { 154 try { 155 Class<?> classType = camelContext.getClassResolver().resolveMandatoryClass(type); 156 backlogDebugger.setMessageHeaderOnBreakpoint(nodeId, headerName, value, classType); 157 } catch (Exception e) { 158 throw RuntimeCamelException.wrapRuntimeCamelException(e); 159 } 160 } 161 162 @Override 163 public void removeMessageHeaderOnBreakpoint(String nodeId, String headerName) { 164 backlogDebugger.removeMessageHeaderOnBreakpoint(nodeId, headerName); 165 } 166 167 @Override 168 public void resumeAll() { 169 backlogDebugger.resumeAll(); 170 } 171 172 @Override 173 public void stepBreakpoint(String nodeId) { 174 backlogDebugger.stepBreakpoint(nodeId); 175 } 176 177 @Override 178 public boolean isSingleStepMode() { 179 return backlogDebugger.isSingleStepMode(); 180 } 181 182 @Override 183 public void step() { 184 backlogDebugger.step(); 185 } 186 187 @Override 188 public Set<String> getSuspendedBreakpointNodeIds() { 189 return suspendedBreakpointNodeIds(); 190 } 191 192 @Override 193 public Set<String> suspendedBreakpointNodeIds() { 194 return backlogDebugger.getSuspendedBreakpointNodeIds(); 195 } 196 197 @Override 198 public void disableBreakpoint(String nodeId) { 199 backlogDebugger.disableBreakpoint(nodeId); 200 } 201 202 @Override 203 public void enableBreakpoint(String nodeId) { 204 backlogDebugger.enableBreakpoint(nodeId); 205 } 206 207 @Override 208 public int getBodyMaxChars() { 209 return backlogDebugger.getBodyMaxChars(); 210 } 211 212 @Override 213 public void setBodyMaxChars(int bodyMaxChars) { 214 backlogDebugger.setBodyMaxChars(bodyMaxChars); 215 } 216 217 @Override 218 public boolean isBodyIncludeStreams() { 219 return backlogDebugger.isBodyIncludeStreams(); 220 } 221 222 @Override 223 public void setBodyIncludeStreams(boolean bodyIncludeStreams) { 224 backlogDebugger.setBodyIncludeStreams(bodyIncludeStreams); 225 } 226 227 @Override 228 public boolean isBodyIncludeFiles() { 229 return backlogDebugger.isBodyIncludeFiles(); 230 } 231 232 @Override 233 public void setBodyIncludeFiles(boolean bodyIncludeFiles) { 234 backlogDebugger.setBodyIncludeFiles(bodyIncludeFiles); 235 } 236 237 @Override 238 public String dumpTracedMessagesAsXml(String nodeId) { 239 return backlogDebugger.dumpTracedMessagesAsXml(nodeId); 240 } 241 242 @Override 243 public long getDebugCounter() { 244 return backlogDebugger.getDebugCounter(); 245 } 246 247 @Override 248 public void resetDebugCounter() { 249 backlogDebugger.resetDebugCounter(); 250 } 251 252 @Override 253 public String validateConditionalBreakpoint(String language, String predicate) { 254 Language lan = null; 255 try { 256 lan = camelContext.resolveLanguage(language); 257 lan.createPredicate(predicate); 258 return null; 259 } catch (Exception e) { 260 if (lan == null) { 261 return e.getMessage(); 262 } else { 263 return "Invalid syntax " + predicate + " due: " + e.getMessage(); 264 } 265 } 266 } 267 268 @Override 269 public long getFallbackTimeout() { 270 return backlogDebugger.getFallbackTimeout(); 271 } 272 273 @Override 274 public void setFallbackTimeout(long fallbackTimeout) { 275 backlogDebugger.setFallbackTimeout(fallbackTimeout); 276 } 277}