Deleting Failed events in IBM BPM Advanced
The Failed Event Manager can get filled up with thousands of failed events, especially in a development or test environment. Using the admin console you can delete these events, however you are limited to delete a maximum of 500 per occurrence. This limitation is to prevent the JVM from crashing by attempting to delete too many failed events at a time. If you have thousands of events to delete- this can be difficult task to perform in the admin console.
wsadmin provides an API to determine the number of failed events and remove a configurable number of failed events in a single instance. To automate the deletion of failed events I wrote a script which loops through the failed events and removes 100 events with each looping iteration. This mitigates the risk of crashing the JVM and also allows you to run the script and multi-task while the script is running. The script is pasted below for your use.
######################################################################################
# Description: Script used to remove failed events
# Author: Mahesh Dondeti mdondetimss@gmail.com
# Date: 2015-11-24
# Version Info: 1.0
######################################################################################
######################################################################################
#
# Important Usage information:
#
# To run the script- run the following command"
# [WAS_PROFILE_HOME]/bin/wsadmin.sh -lang jython -f FailedEventsDelete.py
#
# (ensure you include the fully qualified path of the FailedEventsDelete.py script)
#
#
######################################################################################
# lookup the failed event manager
objstr = AdminControl.completeObjectName('WebSphere:*,type=FailedEventManager')
obj = AdminControl.makeObjectName(objstr)
# count the overall number of failed events
fecount = AdminControl.invoke(objstr,"getFailedEventCount")
print "Failed event number before discarding: ", fecount
delnum = 100
fecount = int(fecount)
while (fecount > 0):
if fecount < 100:
delnum = fecount
fecount = 0
else:
delnum = 100
fecount = fecount - 100
# get 100 failed events
msglist = AdminControl.invoke_jmx(obj,'getAllFailedEvents',[delnum],['int'])
# discard 100 events in single batch run
print "Discarding ", delnum, " failed events"
AdminControl.invoke_jmx(obj,'discardFailedEvents', [msglist],['java.util.List'])
# count the overall number of failed events
fecount2 = AdminControl.invoke(objstr,"getFailedEventCount")
print "Failed event number after discarding: ", fecount2
######################################################################################
Command Console:-
Note: Check SOAP port
number on your server .
Resubmit:-
# lookup the failed event manager
objstr = AdminControl.completeObjectName('WebSphere:*,type=FailedEventManager')
obj = AdminControl.makeObjectName(objstr)
# count the overall number of failed events
fecount = AdminControl.invoke(objstr,"getFailedEventCount")
print "Failed event number before resubmit: ", fecount
delnum = 100
fecount = int(fecount)
while (fecount > 0):
if fecount < 100:
delnum = fecount
fecount = 0
else:
delnum = 100
fecount = fecount - 100
# get 100 failed events
msglist = AdminControl.invoke_jmx(obj,'getAllFailedEvents',[delnum],['int'])
# discard 100 events in single batch run
print "Resubmiting ", delnum, " failed events"
AdminControl.invoke_jmx(obj,'resubmitFailedEvents', [msglist],['java.util.List'])
# count the overall number of failed events
fecount2 = AdminControl.invoke(objstr,"getFailedEventCount")
print "Failed event number after Resubmiting: ", fecount2
# lookup the failed event manager
objstr = AdminControl.completeObjectName('WebSphere:*,type=FailedEventManager')
obj = AdminControl.makeObjectName(objstr)
# count the overall number of failed events
fecount = AdminControl.invoke(objstr,"getFailedEventCount")
print "Failed event number before resubmit: ", fecount
delnum = 100
fecount = int(fecount)
while (fecount > 0):
if fecount < 100:
delnum = fecount
fecount = 0
else:
delnum = 100
fecount = fecount - 100
# get 100 failed events
msglist = AdminControl.invoke_jmx(obj,'getAllFailedEvents',[delnum],['int'])
# discard 100 events in single batch run
print "Resubmiting ", delnum, " failed events"
AdminControl.invoke_jmx(obj,'resubmitFailedEvents', [msglist],['java.util.List'])
# count the overall number of failed events
fecount2 = AdminControl.invoke(objstr,"getFailedEventCount")
print "Failed event number after Resubmiting: ", fecount2
I hope this post helps you. So far this is my best effort to explain.
Please correct me if I do anything wrong.
Please share your valuable suggestions and feedback to my mail
id"mdondetisbit@gmail.com"
to improve myself.
No comments:
Post a Comment