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.util; 018 019import java.util.EventObject; 020import java.util.List; 021 022import org.apache.camel.CamelContext; 023import org.apache.camel.Endpoint; 024import org.apache.camel.Exchange; 025import org.apache.camel.Processor; 026import org.apache.camel.Route; 027import org.apache.camel.StatefulService; 028import org.apache.camel.spi.EventFactory; 029import org.apache.camel.spi.EventNotifier; 030import org.apache.camel.spi.ManagementStrategy; 031import org.slf4j.Logger; 032import org.slf4j.LoggerFactory; 033 034/** 035 * Helper for easily sending event notifications in a single line of code 036 * 037 * @version 038 */ 039public final class EventHelper { 040 041 private static final Logger LOG = LoggerFactory.getLogger(EventHelper.class); 042 043 private EventHelper() { 044 } 045 046 public static boolean notifyCamelContextStarting(CamelContext context) { 047 ManagementStrategy management = context.getManagementStrategy(); 048 if (management == null) { 049 return false; 050 } 051 052 EventFactory factory = management.getEventFactory(); 053 if (factory == null) { 054 return false; 055 } 056 057 List<EventNotifier> notifiers = management.getEventNotifiers(); 058 if (notifiers == null || notifiers.isEmpty()) { 059 return false; 060 } 061 062 boolean answer = false; 063 EventObject event = null; 064 for (EventNotifier notifier : notifiers) { 065 if (notifier.isDisabled()) { 066 continue; 067 } 068 if (notifier.isIgnoreCamelContextEvents()) { 069 continue; 070 } 071 072 if (event == null) { 073 // only create event once 074 event = factory.createCamelContextStartingEvent(context); 075 if (event == null) { 076 // factory could not create event so exit 077 return false; 078 } 079 } 080 answer |= doNotifyEvent(notifier, event); 081 } 082 return answer; 083 } 084 085 public static boolean notifyCamelContextStarted(CamelContext context) { 086 ManagementStrategy management = context.getManagementStrategy(); 087 if (management == null) { 088 return false; 089 } 090 091 EventFactory factory = management.getEventFactory(); 092 if (factory == null) { 093 return false; 094 } 095 096 List<EventNotifier> notifiers = management.getEventNotifiers(); 097 if (notifiers == null || notifiers.isEmpty()) { 098 return false; 099 } 100 101 boolean answer = false; 102 EventObject event = null; 103 for (EventNotifier notifier : notifiers) { 104 if (notifier.isDisabled()) { 105 continue; 106 } 107 if (notifier.isIgnoreCamelContextEvents()) { 108 continue; 109 } 110 111 if (event == null) { 112 // only create event once 113 event = factory.createCamelContextStartedEvent(context); 114 if (event == null) { 115 // factory could not create event so exit 116 return false; 117 } 118 } 119 answer |= doNotifyEvent(notifier, event); 120 } 121 return answer; 122 } 123 124 public static boolean notifyCamelContextStartupFailed(CamelContext context, Throwable cause) { 125 ManagementStrategy management = context.getManagementStrategy(); 126 if (management == null) { 127 return false; 128 } 129 130 EventFactory factory = management.getEventFactory(); 131 if (factory == null) { 132 return false; 133 } 134 135 List<EventNotifier> notifiers = management.getEventNotifiers(); 136 if (notifiers == null || notifiers.isEmpty()) { 137 return false; 138 } 139 140 boolean answer = false; 141 EventObject event = null; 142 for (EventNotifier notifier : notifiers) { 143 if (notifier.isDisabled()) { 144 continue; 145 } 146 if (notifier.isIgnoreCamelContextEvents()) { 147 continue; 148 } 149 150 if (event == null) { 151 // only create event once 152 event = factory.createCamelContextStartupFailureEvent(context, cause); 153 if (event == null) { 154 // factory could not create event so exit 155 return false; 156 } 157 } 158 answer |= doNotifyEvent(notifier, event); 159 } 160 return answer; 161 } 162 163 public static boolean notifyCamelContextStopping(CamelContext context) { 164 ManagementStrategy management = context.getManagementStrategy(); 165 if (management == null) { 166 return false; 167 } 168 169 EventFactory factory = management.getEventFactory(); 170 if (factory == null) { 171 return false; 172 } 173 174 List<EventNotifier> notifiers = management.getEventNotifiers(); 175 if (notifiers == null || notifiers.isEmpty()) { 176 return false; 177 } 178 179 boolean answer = false; 180 EventObject event = null; 181 for (EventNotifier notifier : notifiers) { 182 if (notifier.isDisabled()) { 183 continue; 184 } 185 if (notifier.isIgnoreCamelContextEvents()) { 186 continue; 187 } 188 189 if (event == null) { 190 // only create event once 191 event = factory.createCamelContextStoppingEvent(context); 192 if (event == null) { 193 // factory could not create event so exit 194 return false; 195 } 196 } 197 answer |= doNotifyEvent(notifier, event); 198 } 199 return answer; 200 } 201 202 public static boolean notifyCamelContextStopped(CamelContext context) { 203 ManagementStrategy management = context.getManagementStrategy(); 204 if (management == null) { 205 return false; 206 } 207 208 EventFactory factory = management.getEventFactory(); 209 if (factory == null) { 210 return false; 211 } 212 213 List<EventNotifier> notifiers = management.getEventNotifiers(); 214 if (notifiers == null || notifiers.isEmpty()) { 215 return false; 216 } 217 218 boolean answer = false; 219 EventObject event = null; 220 for (EventNotifier notifier : notifiers) { 221 if (notifier.isDisabled()) { 222 continue; 223 } 224 if (notifier.isIgnoreCamelContextEvents()) { 225 continue; 226 } 227 228 if (event == null) { 229 // only create event once 230 event = factory.createCamelContextStoppedEvent(context); 231 if (event == null) { 232 // factory could not create event so exit 233 return false; 234 } 235 } 236 answer |= doNotifyEvent(notifier, event); 237 } 238 return answer; 239 } 240 241 public static boolean notifyCamelContextStopFailed(CamelContext context, Throwable cause) { 242 ManagementStrategy management = context.getManagementStrategy(); 243 if (management == null) { 244 return false; 245 } 246 247 EventFactory factory = management.getEventFactory(); 248 if (factory == null) { 249 return false; 250 } 251 252 List<EventNotifier> notifiers = management.getEventNotifiers(); 253 if (notifiers == null || notifiers.isEmpty()) { 254 return false; 255 } 256 257 boolean answer = false; 258 EventObject event = null; 259 for (EventNotifier notifier : notifiers) { 260 if (notifier.isDisabled()) { 261 continue; 262 } 263 if (notifier.isIgnoreCamelContextEvents()) { 264 continue; 265 } 266 267 if (event == null) { 268 // only create event once 269 event = factory.createCamelContextStopFailureEvent(context, cause); 270 if (event == null) { 271 // factory could not create event so exit 272 return false; 273 } 274 } 275 answer |= doNotifyEvent(notifier, event); 276 } 277 return answer; 278 } 279 280 public static boolean notifyServiceStopFailure(CamelContext context, Object service, Throwable cause) { 281 ManagementStrategy management = context.getManagementStrategy(); 282 if (management == null) { 283 return false; 284 } 285 286 EventFactory factory = management.getEventFactory(); 287 if (factory == null) { 288 return false; 289 } 290 291 List<EventNotifier> notifiers = management.getEventNotifiers(); 292 if (notifiers == null || notifiers.isEmpty()) { 293 return false; 294 } 295 296 boolean answer = false; 297 EventObject event = null; 298 for (EventNotifier notifier : notifiers) { 299 if (notifier.isDisabled()) { 300 continue; 301 } 302 if (notifier.isIgnoreServiceEvents()) { 303 continue; 304 } 305 306 if (event == null) { 307 // only create event once 308 event = factory.createServiceStopFailureEvent(context, service, cause); 309 if (event == null) { 310 // factory could not create event so exit 311 return false; 312 } 313 } 314 answer |= doNotifyEvent(notifier, event); 315 } 316 return answer; 317 } 318 319 public static boolean notifyServiceStartupFailure(CamelContext context, Object service, Throwable cause) { 320 ManagementStrategy management = context.getManagementStrategy(); 321 if (management == null) { 322 return false; 323 } 324 325 EventFactory factory = management.getEventFactory(); 326 if (factory == null) { 327 return false; 328 } 329 330 List<EventNotifier> notifiers = management.getEventNotifiers(); 331 if (notifiers == null || notifiers.isEmpty()) { 332 return false; 333 } 334 335 boolean answer = false; 336 EventObject event = null; 337 for (EventNotifier notifier : notifiers) { 338 if (notifier.isDisabled()) { 339 continue; 340 } 341 if (notifier.isIgnoreServiceEvents()) { 342 continue; 343 } 344 345 if (event == null) { 346 // only create event once 347 event = factory.createServiceStartupFailureEvent(context, service, cause); 348 if (event == null) { 349 // factory could not create event so exit 350 return false; 351 } 352 } 353 answer |= doNotifyEvent(notifier, event); 354 } 355 return answer; 356 } 357 358 public static boolean notifyRouteStarted(CamelContext context, Route route) { 359 ManagementStrategy management = context.getManagementStrategy(); 360 if (management == null) { 361 return false; 362 } 363 364 EventFactory factory = management.getEventFactory(); 365 if (factory == null) { 366 return false; 367 } 368 369 List<EventNotifier> notifiers = management.getEventNotifiers(); 370 if (notifiers == null || notifiers.isEmpty()) { 371 return false; 372 } 373 374 boolean answer = false; 375 EventObject event = null; 376 for (EventNotifier notifier : notifiers) { 377 if (notifier.isDisabled()) { 378 continue; 379 } 380 if (notifier.isIgnoreRouteEvents()) { 381 continue; 382 } 383 384 if (event == null) { 385 // only create event once 386 event = factory.createRouteStartedEvent(route); 387 if (event == null) { 388 // factory could not create event so exit 389 return false; 390 } 391 } 392 answer |= doNotifyEvent(notifier, event); 393 } 394 return answer; 395 } 396 397 public static boolean notifyRouteStopped(CamelContext context, Route route) { 398 ManagementStrategy management = context.getManagementStrategy(); 399 if (management == null) { 400 return false; 401 } 402 403 EventFactory factory = management.getEventFactory(); 404 if (factory == null) { 405 return false; 406 } 407 408 List<EventNotifier> notifiers = management.getEventNotifiers(); 409 if (notifiers == null || notifiers.isEmpty()) { 410 return false; 411 } 412 413 boolean answer = false; 414 EventObject event = null; 415 for (EventNotifier notifier : notifiers) { 416 if (notifier.isDisabled()) { 417 continue; 418 } 419 if (notifier.isIgnoreRouteEvents()) { 420 continue; 421 } 422 423 if (event == null) { 424 // only create event once 425 event = factory.createRouteStoppedEvent(route); 426 if (event == null) { 427 // factory could not create event so exit 428 return false; 429 } 430 } 431 answer |= doNotifyEvent(notifier, event); 432 } 433 return answer; 434 } 435 436 public static boolean notifyRouteAdded(CamelContext context, Route route) { 437 ManagementStrategy management = context.getManagementStrategy(); 438 if (management == null) { 439 return false; 440 } 441 442 EventFactory factory = management.getEventFactory(); 443 if (factory == null) { 444 return false; 445 } 446 447 List<EventNotifier> notifiers = management.getEventNotifiers(); 448 if (notifiers == null || notifiers.isEmpty()) { 449 return false; 450 } 451 452 boolean answer = false; 453 EventObject event = null; 454 for (EventNotifier notifier : notifiers) { 455 if (notifier.isDisabled()) { 456 continue; 457 } 458 if (notifier.isIgnoreRouteEvents()) { 459 continue; 460 } 461 462 if (event == null) { 463 // only create event once 464 event = factory.createRouteAddedEvent(route); 465 if (event == null) { 466 // factory could not create event so exit 467 return false; 468 } 469 } 470 answer |= doNotifyEvent(notifier, event); 471 } 472 return answer; 473 } 474 475 public static boolean notifyRouteRemoved(CamelContext context, Route route) { 476 ManagementStrategy management = context.getManagementStrategy(); 477 if (management == null) { 478 return false; 479 } 480 481 EventFactory factory = management.getEventFactory(); 482 if (factory == null) { 483 return false; 484 } 485 486 List<EventNotifier> notifiers = management.getEventNotifiers(); 487 if (notifiers == null || notifiers.isEmpty()) { 488 return false; 489 } 490 491 boolean answer = false; 492 EventObject event = null; 493 for (EventNotifier notifier : notifiers) { 494 if (notifier.isDisabled()) { 495 continue; 496 } 497 if (notifier.isIgnoreRouteEvents()) { 498 continue; 499 } 500 501 if (event == null) { 502 // only create event once 503 event = factory.createRouteRemovedEvent(route); 504 if (event == null) { 505 // factory could not create event so exit 506 return false; 507 } 508 } 509 answer |= doNotifyEvent(notifier, event); 510 } 511 return answer; 512 } 513 514 public static boolean notifyExchangeCreated(CamelContext context, Exchange exchange) { 515 if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) { 516 // do not generate events for an notify event 517 return false; 518 } 519 520 ManagementStrategy management = context.getManagementStrategy(); 521 if (management == null) { 522 return false; 523 } 524 525 EventFactory factory = management.getEventFactory(); 526 if (factory == null) { 527 return false; 528 } 529 530 List<EventNotifier> notifiers = management.getEventNotifiers(); 531 if (notifiers == null || notifiers.isEmpty()) { 532 return false; 533 } 534 535 boolean answer = false; 536 EventObject event = null; 537 // optimise for loop using index access to avoid creating iterator object 538 for (int i = 0; i < notifiers.size(); i++) { 539 EventNotifier notifier = notifiers.get(i); 540 if (notifier.isDisabled()) { 541 continue; 542 } 543 if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeCreatedEvent()) { 544 continue; 545 } 546 547 if (event == null) { 548 // only create event once 549 event = factory.createExchangeCreatedEvent(exchange); 550 if (event == null) { 551 // factory could not create event so exit 552 return false; 553 } 554 } 555 answer |= doNotifyEvent(notifier, event); 556 } 557 return answer; 558 } 559 560 public static boolean notifyExchangeDone(CamelContext context, Exchange exchange) { 561 if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) { 562 // do not generate events for an notify event 563 return false; 564 } 565 566 ManagementStrategy management = context.getManagementStrategy(); 567 if (management == null) { 568 return false; 569 } 570 571 EventFactory factory = management.getEventFactory(); 572 if (factory == null) { 573 return false; 574 } 575 576 List<EventNotifier> notifiers = management.getEventNotifiers(); 577 if (notifiers == null || notifiers.isEmpty()) { 578 return false; 579 } 580 581 boolean answer = false; 582 EventObject event = null; 583 // optimise for loop using index access to avoid creating iterator object 584 for (int i = 0; i < notifiers.size(); i++) { 585 EventNotifier notifier = notifiers.get(i); 586 if (notifier.isDisabled()) { 587 continue; 588 } 589 if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeCompletedEvent()) { 590 continue; 591 } 592 593 if (event == null) { 594 // only create event once 595 event = factory.createExchangeCompletedEvent(exchange); 596 if (event == null) { 597 // factory could not create event so exit 598 return false; 599 } 600 } 601 answer |= doNotifyEvent(notifier, event); 602 } 603 return answer; 604 } 605 606 public static boolean notifyExchangeFailed(CamelContext context, Exchange exchange) { 607 if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) { 608 // do not generate events for an notify event 609 return false; 610 } 611 612 ManagementStrategy management = context.getManagementStrategy(); 613 if (management == null) { 614 return false; 615 } 616 617 EventFactory factory = management.getEventFactory(); 618 if (factory == null) { 619 return false; 620 } 621 622 List<EventNotifier> notifiers = management.getEventNotifiers(); 623 if (notifiers == null || notifiers.isEmpty()) { 624 return false; 625 } 626 627 boolean answer = false; 628 EventObject event = null; 629 // optimise for loop using index access to avoid creating iterator object 630 for (int i = 0; i < notifiers.size(); i++) { 631 EventNotifier notifier = notifiers.get(i); 632 if (notifier.isDisabled()) { 633 continue; 634 } 635 if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeFailedEvents()) { 636 continue; 637 } 638 639 if (event == null) { 640 // only create event once 641 event = factory.createExchangeFailedEvent(exchange); 642 if (event == null) { 643 // factory could not create event so exit 644 return false; 645 } 646 } 647 answer |= doNotifyEvent(notifier, event); 648 } 649 return answer; 650 } 651 652 public static boolean notifyExchangeFailureHandling(CamelContext context, Exchange exchange, Processor failureHandler, 653 boolean deadLetterChannel, String deadLetterUri) { 654 if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) { 655 // do not generate events for an notify event 656 return false; 657 } 658 659 ManagementStrategy management = context.getManagementStrategy(); 660 if (management == null) { 661 return false; 662 } 663 664 EventFactory factory = management.getEventFactory(); 665 if (factory == null) { 666 return false; 667 } 668 669 List<EventNotifier> notifiers = management.getEventNotifiers(); 670 if (notifiers == null || notifiers.isEmpty()) { 671 return false; 672 } 673 674 boolean answer = false; 675 EventObject event = null; 676 // optimise for loop using index access to avoid creating iterator object 677 for (int i = 0; i < notifiers.size(); i++) { 678 EventNotifier notifier = notifiers.get(i); 679 if (notifier.isDisabled()) { 680 continue; 681 } 682 if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeFailedEvents()) { 683 continue; 684 } 685 686 if (event == null) { 687 // only create event once 688 event = factory.createExchangeFailureHandlingEvent(exchange, failureHandler, deadLetterChannel, deadLetterUri); 689 if (event == null) { 690 // factory could not create event so exit 691 return false; 692 } 693 } 694 answer |= doNotifyEvent(notifier, event); 695 } 696 return answer; 697 } 698 699 public static boolean notifyExchangeFailureHandled(CamelContext context, Exchange exchange, Processor failureHandler, 700 boolean deadLetterChannel, String deadLetterUri) { 701 if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) { 702 // do not generate events for an notify event 703 return false; 704 } 705 706 ManagementStrategy management = context.getManagementStrategy(); 707 if (management == null) { 708 return false; 709 } 710 711 EventFactory factory = management.getEventFactory(); 712 if (factory == null) { 713 return false; 714 } 715 716 List<EventNotifier> notifiers = management.getEventNotifiers(); 717 if (notifiers == null || notifiers.isEmpty()) { 718 return false; 719 } 720 721 boolean answer = false; 722 EventObject event = null; 723 // optimise for loop using index access to avoid creating iterator object 724 for (int i = 0; i < notifiers.size(); i++) { 725 EventNotifier notifier = notifiers.get(i); 726 if (notifier.isDisabled()) { 727 continue; 728 } 729 if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeFailedEvents()) { 730 continue; 731 } 732 733 if (event == null) { 734 // only create event once 735 event = factory.createExchangeFailureHandledEvent(exchange, failureHandler, deadLetterChannel, deadLetterUri); 736 if (event == null) { 737 // factory could not create event so exit 738 return false; 739 } 740 } 741 answer |= doNotifyEvent(notifier, event); 742 } 743 return answer; 744 } 745 746 public static boolean notifyExchangeRedelivery(CamelContext context, Exchange exchange, int attempt) { 747 if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) { 748 // do not generate events for an notify event 749 return false; 750 } 751 752 ManagementStrategy management = context.getManagementStrategy(); 753 if (management == null) { 754 return false; 755 } 756 757 EventFactory factory = management.getEventFactory(); 758 if (factory == null) { 759 return false; 760 } 761 762 List<EventNotifier> notifiers = management.getEventNotifiers(); 763 if (notifiers == null || notifiers.isEmpty()) { 764 return false; 765 } 766 767 boolean answer = false; 768 EventObject event = null; 769 // optimise for loop using index access to avoid creating iterator object 770 for (int i = 0; i < notifiers.size(); i++) { 771 EventNotifier notifier = notifiers.get(i); 772 if (notifier.isDisabled()) { 773 continue; 774 } 775 if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeFailedEvents()) { 776 continue; 777 } 778 779 if (event == null) { 780 // only create event once 781 event = factory.createExchangeRedeliveryEvent(exchange, attempt); 782 if (event == null) { 783 // factory could not create event so exit 784 return false; 785 } 786 } 787 answer |= doNotifyEvent(notifier, event); 788 } 789 return answer; 790 } 791 792 public static boolean notifyExchangeSending(CamelContext context, Exchange exchange, Endpoint endpoint) { 793 if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) { 794 // do not generate events for an notify event 795 return false; 796 } 797 798 ManagementStrategy management = context.getManagementStrategy(); 799 if (management == null) { 800 return false; 801 } 802 803 EventFactory factory = management.getEventFactory(); 804 if (factory == null) { 805 return false; 806 } 807 808 List<EventNotifier> notifiers = management.getEventNotifiers(); 809 if (notifiers == null || notifiers.isEmpty()) { 810 return false; 811 } 812 813 boolean answer = false; 814 EventObject event = null; 815 // optimise for loop using index access to avoid creating iterator object 816 for (int i = 0; i < notifiers.size(); i++) { 817 EventNotifier notifier = notifiers.get(i); 818 if (notifier.isDisabled()) { 819 continue; 820 } 821 if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeSendingEvents()) { 822 continue; 823 } 824 825 if (event == null) { 826 // only create event once 827 event = factory.createExchangeSendingEvent(exchange, endpoint); 828 if (event == null) { 829 // factory could not create event so exit 830 return false; 831 } 832 } 833 answer |= doNotifyEvent(notifier, event); 834 } 835 return answer; 836 } 837 838 public static boolean notifyExchangeSent(CamelContext context, Exchange exchange, Endpoint endpoint, long timeTaken) { 839 if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) { 840 // do not generate events for an notify event 841 return false; 842 } 843 844 ManagementStrategy management = context.getManagementStrategy(); 845 if (management == null) { 846 return false; 847 } 848 849 EventFactory factory = management.getEventFactory(); 850 if (factory == null) { 851 return false; 852 } 853 854 List<EventNotifier> notifiers = management.getEventNotifiers(); 855 if (notifiers == null || notifiers.isEmpty()) { 856 return false; 857 } 858 859 boolean answer = false; 860 EventObject event = null; 861 // optimise for loop using index access to avoid creating iterator object 862 for (int i = 0; i < notifiers.size(); i++) { 863 EventNotifier notifier = notifiers.get(i); 864 if (notifier.isDisabled()) { 865 continue; 866 } 867 if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeSentEvents()) { 868 continue; 869 } 870 871 if (event == null) { 872 // only create event once 873 event = factory.createExchangeSentEvent(exchange, endpoint, timeTaken); 874 if (event == null) { 875 // factory could not create event so exit 876 return false; 877 } 878 } 879 answer |= doNotifyEvent(notifier, event); 880 } 881 return answer; 882 } 883 884 public static boolean notifyCamelContextSuspending(CamelContext context) { 885 ManagementStrategy management = context.getManagementStrategy(); 886 if (management == null) { 887 return false; 888 } 889 890 EventFactory factory = management.getEventFactory(); 891 if (factory == null) { 892 return false; 893 } 894 895 List<EventNotifier> notifiers = management.getEventNotifiers(); 896 if (notifiers == null || notifiers.isEmpty()) { 897 return false; 898 } 899 900 boolean answer = false; 901 EventObject event = null; 902 for (EventNotifier notifier : notifiers) { 903 if (notifier.isDisabled()) { 904 continue; 905 } 906 if (notifier.isIgnoreCamelContextEvents()) { 907 continue; 908 } 909 910 if (event == null) { 911 // only create event once 912 event = factory.createCamelContextSuspendingEvent(context); 913 if (event == null) { 914 // factory could not create event so exit 915 return false; 916 } 917 } 918 answer |= doNotifyEvent(notifier, event); 919 } 920 return answer; 921 } 922 923 public static boolean notifyCamelContextSuspended(CamelContext context) { 924 ManagementStrategy management = context.getManagementStrategy(); 925 if (management == null) { 926 return false; 927 } 928 929 EventFactory factory = management.getEventFactory(); 930 if (factory == null) { 931 return false; 932 } 933 934 List<EventNotifier> notifiers = management.getEventNotifiers(); 935 if (notifiers == null || notifiers.isEmpty()) { 936 return false; 937 } 938 939 boolean answer = false; 940 EventObject event = null; 941 for (EventNotifier notifier : notifiers) { 942 if (notifier.isDisabled()) { 943 continue; 944 } 945 if (notifier.isIgnoreCamelContextEvents()) { 946 continue; 947 } 948 949 if (event == null) { 950 // only create event once 951 event = factory.createCamelContextSuspendedEvent(context); 952 if (event == null) { 953 // factory could not create event so exit 954 return false; 955 } 956 } 957 answer |= doNotifyEvent(notifier, event); 958 } 959 return answer; 960 } 961 962 public static boolean notifyCamelContextResuming(CamelContext context) { 963 ManagementStrategy management = context.getManagementStrategy(); 964 if (management == null) { 965 return false; 966 } 967 968 EventFactory factory = management.getEventFactory(); 969 if (factory == null) { 970 return false; 971 } 972 973 List<EventNotifier> notifiers = management.getEventNotifiers(); 974 if (notifiers == null || notifiers.isEmpty()) { 975 return false; 976 } 977 978 boolean answer = false; 979 EventObject event = null; 980 for (EventNotifier notifier : notifiers) { 981 if (notifier.isDisabled()) { 982 continue; 983 } 984 if (notifier.isIgnoreCamelContextEvents()) { 985 continue; 986 } 987 988 if (event == null) { 989 // only create event once 990 event = factory.createCamelContextResumingEvent(context); 991 if (event == null) { 992 // factory could not create event so exit 993 return false; 994 } 995 } 996 answer |= doNotifyEvent(notifier, event); 997 } 998 return answer; 999 } 1000 1001 public static boolean notifyCamelContextResumed(CamelContext context) { 1002 ManagementStrategy management = context.getManagementStrategy(); 1003 if (management == null) { 1004 return false; 1005 } 1006 1007 EventFactory factory = management.getEventFactory(); 1008 if (factory == null) { 1009 return false; 1010 } 1011 1012 List<EventNotifier> notifiers = management.getEventNotifiers(); 1013 if (notifiers == null || notifiers.isEmpty()) { 1014 return false; 1015 } 1016 1017 boolean answer = false; 1018 EventObject event = null; 1019 for (EventNotifier notifier : notifiers) { 1020 if (notifier.isDisabled()) { 1021 continue; 1022 } 1023 if (notifier.isIgnoreCamelContextEvents()) { 1024 continue; 1025 } 1026 1027 if (event == null) { 1028 // only create event once 1029 event = factory.createCamelContextResumedEvent(context); 1030 if (event == null) { 1031 // factory could not create event so exit 1032 return false; 1033 } 1034 } 1035 answer |= doNotifyEvent(notifier, event); 1036 } 1037 return answer; 1038 } 1039 1040 public static boolean notifyCamelContextResumeFailed(CamelContext context, Throwable cause) { 1041 ManagementStrategy management = context.getManagementStrategy(); 1042 if (management == null) { 1043 return false; 1044 } 1045 1046 EventFactory factory = management.getEventFactory(); 1047 if (factory == null) { 1048 return false; 1049 } 1050 1051 List<EventNotifier> notifiers = management.getEventNotifiers(); 1052 if (notifiers == null || notifiers.isEmpty()) { 1053 return false; 1054 } 1055 1056 boolean answer = false; 1057 EventObject event = null; 1058 for (EventNotifier notifier : notifiers) { 1059 if (notifier.isDisabled()) { 1060 continue; 1061 } 1062 if (notifier.isIgnoreCamelContextEvents()) { 1063 continue; 1064 } 1065 1066 if (event == null) { 1067 // only create event once 1068 event = factory.createCamelContextResumeFailureEvent(context, cause); 1069 if (event == null) { 1070 // factory could not create event so exit 1071 return false; 1072 } 1073 } 1074 answer |= doNotifyEvent(notifier, event); 1075 } 1076 return answer; 1077 } 1078 1079 private static boolean doNotifyEvent(EventNotifier notifier, EventObject event) { 1080 // only notify if notifier is started 1081 boolean started = true; 1082 if (notifier instanceof StatefulService) { 1083 started = ((StatefulService) notifier).isStarted(); 1084 } 1085 if (!started) { 1086 LOG.debug("Ignoring notifying event {}. The EventNotifier has not been started yet: {}", event, notifier); 1087 return false; 1088 } 1089 1090 if (!notifier.isEnabled(event)) { 1091 LOG.trace("Notifier: {} is not enabled for the event: {}", notifier, event); 1092 return false; 1093 } 1094 1095 try { 1096 notifier.notify(event); 1097 } catch (Throwable e) { 1098 LOG.warn("Error notifying event " + event + ". This exception will be ignored. ", e); 1099 } 1100 1101 return true; 1102 } 1103 1104}