Author: asankha
Date: Fri Oct 12 13:50:16 2007
New Revision: 584267
URL: http://svn.apache.org/viewvc?rev=584267&view=rev
Log:
review and fix throttle mediator - indika pls verify
Modified:
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediator.java
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorFactory.java
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorSerializer.java
Modified:
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediator.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediator.java?rev=584267&r1=584266&r2=584267&view=diff
==============================================================================
---
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediator.java
(original)
+++
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediator.java
Fri Oct 12 13:50:16 2007
@@ -22,7 +22,6 @@
import org.apache.neethi.PolicyEngine;
import org.apache.synapse.Mediator;
import org.apache.synapse.MessageContext;
-import org.apache.synapse.SynapseException;
import org.apache.synapse.config.Entry;
import org.apache.synapse.core.axis2.Axis2MessageContext;
import org.apache.synapse.mediators.AbstractMediator;
@@ -44,67 +43,67 @@
/** static map to share all concurrent access controllers */
public final static Map CONCURRENT_ACCESS_CONTROLLERS =
Collections.synchronizedMap(new HashMap());
-
- /** The key for getting policy value - key refer to registry entry */
+ /** The key for getting the throttling policy - key refers to a/an
[registry] entry */
private String policyKey = null;
-
- /** InLine policy object - XML */
+ /** InLine policy object - XML */
private OMElement inLinePolicy = null;
-
- /** The throttle - hold runtime + configuration data of throttle */
+ /** The throttle - hold runtime + configuration data of throttle */
private Throttle throttle = null;
-
- /** The reference to the sequence which will execute when access deny*/
- private String onReject = null;
-
- /** The in-line sequence which will execute when access deny*/
+ /** The reference to the sequence which will execute when access is denied
*/
+ private String onRejectSeqKey = null;
+ /** The in-line sequence which will execute when access is denied */
private Mediator onRejectMediator = null;
-
- /** The reference to the sequence which will execute when access accept */
- private String onAccept = null;
-
- /** The in-line sequence which will execute when access accept */
+ /** The reference to the sequence which will execute when access is
allowed */
+ private String onAcceptSeqKey = null;
+ /** The in-line sequence which will execute when access is allowed */
private Mediator onAcceptMediator = null;
-
/** The concurrect access control group id */
- private String ID ;
+ private String id;
+ /** The ConcurrentAccessController for this mediator instance */
+ private ConcurrentAccessController concurrentAccessController;
+ /** Does my configuration state an IP based throttling policy segment */
+ private boolean includesIPThrottling = false;
+ /** The concurrent connection limit */
+ private int concurrentLimit;
- /** is this initiator of the concurrent access controller*/
- private boolean isInitiator = false;
+ public boolean mediate(MessageContext synCtx) {
- /** Lock used to ensure thread-safe creation and use of the above
Transformer */
- private final Object throttleLock = new Object();
+ boolean traceOn = isTraceOn(synCtx);
+ boolean traceOrDebugOn = isTraceOrDebugOn(traceOn);
- /** The ConcurrentAccessController cache */
- private ConcurrentAccessController concurrentAccessController;
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn, "Start : Throttle mediator");
- /* check to debug log level whether currently enable or not */
- private boolean debugOn;
+ if (traceOn && trace.isTraceEnabled()) {
+ trace.trace("Message : " + synCtx.getEnvelope());
+ }
+ }
- public ThrottleMediator() {
- this.debugOn = log.isDebugEnabled();
- }
+ if (!synCtx.isResponse()) {
+ // for request messages, read the policy for throttling and
initialize
+ initThrottle(synCtx, traceOrDebugOn, traceOn);
- public boolean mediate(MessageContext synCtx) {
- boolean shouldTrace = shouldTrace(synCtx.getTracingState());
- try {
- if (shouldTrace) {
- trace.trace("Start : Throttle mediator");
- }
- synchronized (throttleLock) {
- //init method to init throttle
- initThrottle(synCtx, shouldTrace);
- if (concurrentAccessController == null && ID != null) {
- lookupConcurrentAccessController();
+ } else {
+ // for response messages, load the concurrent access controller
object
+ // do this ONLY ONCE - the first time when our iniial reference is
null
+ if (concurrentAccessController == null && id != null) {
+ concurrentAccessController =
+ (ConcurrentAccessController)
CONCURRENT_ACCESS_CONTROLLERS.get(id);
+ concurrentLimit = concurrentAccessController.getLimit();
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn, "Concurrent access controller for ID
: " + id +
+ " allows : " + concurrentLimit + " concurrent
accesses");
}
}
- // check access allow or not
- return canAccess(synCtx, shouldTrace);
- } finally {
- if (shouldTrace) {
- trace.trace("End : Throttle mediator");
- }
}
+
+ // check access allow or not
+ boolean result = canAccess(synCtx, traceOrDebugOn, traceOn);
+
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn, "End : Throttle mediator");
+ }
+ return result;
}
/**
@@ -112,48 +111,43 @@
* Current Implementaion only support IP Based Throttling
*
* @param synContext Current Message Context
- * @param shouldTrace indicate whether trace is eanabled or not
+ * @param traceOn indicate whether trace is eanabled or not
* @return boolean which indicate whether this caller can or not access
*/
- protected boolean canAccess(MessageContext synContext, boolean
shouldTrace) {
+ private boolean canAccess(MessageContext synContext, boolean
traceOrDebugOn, boolean traceOn) {
boolean isResponse = synContext.isResponse();
// do the concurrent throttling
- boolean canAccess = doConcurrentThrottling(isResponse, shouldTrace);
- if (canAccess) { // if the access is success then
- if (debugOn) {
- log.debug("Access success from concurrent throttlling");
- }
- if (!isResponse) {
- // do the normal throttling
- canAccess = doThrottling(synContext, shouldTrace);
- }
- } else {
- if (debugOn) {
- log.debug("Access deny from concurrent throttlling");
- }
+ boolean isAllowed = throttleByConcurrency(isResponse, traceOrDebugOn,
traceOn);
+
+ if (includesIPThrottling && isAllowed && !isResponse) {
+ // do the normal throttling
+ isAllowed = throttleByRate(synContext, traceOrDebugOn, traceOn);
}
- if (canAccess) {
- if (onAccept != null) {
- Mediator mediator = synContext.getSequence(onAccept);
+ if (isAllowed) {
+ if (onAcceptSeqKey != null) {
+ Mediator mediator = synContext.getSequence(onAcceptSeqKey);
if (mediator != null) {
return mediator.mediate(synContext);
} else {
- return true;
+ handleException("Unable to find onAccept sequence with key
: "
+ + onAcceptSeqKey, synContext);
}
} else if (onAcceptMediator != null) {
return onAcceptMediator.mediate(synContext);
} else {
return true;
}
+
} else {
- if (onReject != null) {
- Mediator mediator = synContext.getSequence(onReject);
+ if (onRejectSeqKey != null) {
+ Mediator mediator = synContext.getSequence(onRejectSeqKey);
if (mediator != null) {
return mediator.mediate(synContext);
} else {
- return false;
+ handleException("Unable to find onReject sequence with key
: "
+ + onRejectSeqKey, synContext);
}
} else if (onRejectMediator != null) {
return onRejectMediator.mediate(synContext);
@@ -161,101 +155,90 @@
return false;
}
}
+ return true;
}
/**
* Doing concurrency throttlling
* @param isResponse indicate whether message flow is OUT or IN
- * @param shouldTrace indicate whether trace is ON or OFF
+ * @param traceOrDebugOn is tracing or debbug on
+ * @param traceOn indicate whether trace is ON or OFF
* @return True if message can continue ,otherwise false
*/
- private boolean doConcurrentThrottling(boolean isResponse, boolean
shouldTrace) {
+ private boolean throttleByConcurrency(boolean isResponse, boolean
traceOrDebugOn, boolean traceOn) {
- boolean canAccess = true;
+ int available = 0;
if (concurrentAccessController != null) {
if (!isResponse) {
- if (debugOn) {
- log.debug("Incoming message process through the
ConcurrentThrottlling");
- }
- canAccess = concurrentAccessController.beforeAccess();
- if (debugOn) {
- if (!canAccess) {
- log.debug("Access has currently been denied since
allowed maximum concurrent access has exceeded");
- }
+ available = concurrentAccessController.getAndDecrement();
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn, "Access " + (available > 0 ?
"allowed" : "denied") +
+ " :: " + available + " of available of " +
concurrentLimit + " connections");
}
} else {
- if (debugOn) {
- log.debug("Outcoming message process through the
ConcurrentThrottlling");
+ available = concurrentAccessController.incrementAndGet();
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn, "Connection returned" +
+ " :: " + available + " of available of " +
concurrentLimit + " connections");
}
- canAccess = concurrentAccessController.afterAccess();
+ return true;
}
}
- return canAccess;
+ return available > 0;
}
/**
* Processing throughh IP based throttle
* @param synContext Current Message
- * @param shouldTrace Indicates whether trace is ON or OFF
+ * @param traceOrDebugOn
+ * @param traceOn Indicates whether trace is ON or OFF
* @return True if message can continue ,otherwise false
*/
- private boolean doThrottling(MessageContext synContext, boolean
shouldTrace) {
+ private boolean throttleByRate(MessageContext synContext, boolean
traceOrDebugOn, boolean traceOn) {
if (throttle == null) {
- if (debugOn) {
- log.debug("Can not find a throttle");
- }
+ handleException("Cannot find throttle object instance",
synContext);
return true;
}
+
org.apache.axis2.context.MessageContext axis2MessageContext
= ((Axis2MessageContext) synContext).getAxis2MessageContext();
- //IP based throttling
+ // IP based throttling
Object remoteIP = axis2MessageContext.getProperty(
org.apache.axis2.context.MessageContext.REMOTE_ADDR);
+
if (remoteIP == null) {
- if (shouldTrace) {
- trace.trace("The IP Address of the caller is cannnot find- The
Throttling will" +
- "not occur");
- }
- if (debugOn) {
- log.debug("The IP address of the caller can not find -
Currently only support caller-IP base"
- + "access control - Thottling will not happen ");
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn, "The IP address of the caller cannot be
found");
}
return true;
+
} else {
- if (shouldTrace) {
- trace.trace("The IP Address of the caller :" + remoteIP);
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn, "The IP Address of the caller is :" +
remoteIP);
}
+
ThrottleContext throttleContext
=
throttle.getThrottleContext(ThrottleConstants.IP_BASED_THROTTLE_KEY);
if (throttleContext == null) {
- if (log.isDebugEnabled()) {
- log.debug("Can not find a configuartion context for the IP
Based Throttle");
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn, "Cannot find the configuartion
context for IP throttle");
}
return true;
}
+
try {
AccessController accessControler =
AccessControllerFactory.createAccessControler(
ThrottleConstants.IP_BASE);
boolean canAccess = accessControler.canAccess(throttleContext,
remoteIP);
- if (!canAccess) {
- String msg = "Access has currently been denied by" +
- " the IP_BASE throttle for the IP :\t" + remoteIP;
- if (shouldTrace) {
- trace.trace(msg);
- }
- if (log.isDebugEnabled()) {
- log.debug(msg);
- }
- } else {
- if(debugOn){
- log.debug("Access was successful ");
- }
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn, "Access " + (canAccess ? "allowed" :
"denied")
+ +" for IP : " + remoteIP);
}
return canAccess;
- }
- catch (ThrottleException e) {
- handleException("Error occur during throttling ", e);
+
+ } catch (ThrottleException e) {
+ handleException("Error occurd during throttling", e,
synContext);
}
}
return true;
@@ -268,147 +251,104 @@
* If the policy is defined as a Inline XML ,then only one time policy
will process and any runtime
* changes to the policy will not reflect
*
- * @param synContext Current Message
- * @param shouldTrace Indicates trace is ON or OFF
+ * @param synCtx Current Message
+ * @param traceOrDebugOn is tracing or debug on?
+ * @param traceOn is tracing on?
*/
- protected void initThrottle(MessageContext synContext, boolean
shouldTrace) {
-
- boolean reCreate = false; // It is not need to recreate ,if property
is not dyanamic
- OMElement policyOmElement = null;
+ protected void initThrottle(MessageContext synCtx, boolean traceOrDebugOn,
boolean traceOn) {
- if (policyKey != null) {
-
- Entry entry =
synContext.getConfiguration().getEntryDefinition(policyKey);
- if (entry == null) {
- if (debugOn) {
- log.debug("Cant not find a Entry from the Entry key " +
policyKey);
- }
- return;
- }
-
- Object entryValue = entry.getValue();
- if (entryValue == null) {
- if (debugOn) {
- log.debug("Cant not find a Policy(Enrty value) from the
Entry key " + policyKey);
+ if (inLinePolicy != null) {
+ // this uses a static policy
+ if (throttle == null) {
+ if (traceOn && trace.isTraceEnabled()) {
+ trace.trace("Initializing using static throttling policy :
" + inLinePolicy);
}
- return;
+ createThrottleMetaData(inLinePolicy, synCtx, traceOrDebugOn,
traceOn);
}
- if (!(entryValue instanceof OMElement)) {
- if (debugOn) {
- log.debug("Entry value which is refered from the key " +
policyKey + " is Incompatible " +
- "for the policy element");
- }
- return;
- }
+ } else if (policyKey != null) {
- // if entry is dynamic, need to check wheather updated or not
- if ((!entry.isCached() || entry.isExpired())) {
- reCreate = true;
- }
- policyOmElement = (OMElement) entryValue;
+ // load or re-load policy from registry or local entry if not
already available
+ Entry entry =
synCtx.getConfiguration().getEntryDefinition(policyKey);
+ if (entry == null) {
+ handleException("Cannot find throttling policy using key : " +
policyKey, synCtx);
- } else if (inLinePolicy != null) {
- policyOmElement = inLinePolicy;
- }
+ } else {
+ Object entryValue = entry.getValue();
+ if (entryValue == null) {
+ handleException(
+ "Null throttling policy returned by Entry : " +
policyKey, synCtx);
- if (policyOmElement == null) {
- if (debugOn) {
- log.debug("Can not find a Policy - Throttling will not occur");
- }
- return;
- }
+ } else {
+ if (!(entryValue instanceof OMElement)) {
+ handleException("Policy returned from key : " +
policyKey +
+ " is not an OMElement", synCtx);
- if (shouldTrace) {
- trace.trace("The Throttle Policy :" + policyOmElement.toString());
- }
- if (!reCreate) {
- //The first time creation
- if (throttle == null) {
- createThrottleMetaData(policyOmElement,
synContext.isResponse());
+ } else {
+ // if entry is dynamic, need to check wheather expired
or not
+ if ((!entry.isCached() || entry.isExpired())) {
+ if (traceOn && trace.isTraceEnabled()) {
+ trace.trace("Re/initializing using dynamic
throttling policy : " +
+ entryValue);
+ }
+ createThrottleMetaData(
+ (OMElement) entryValue, synCtx,
traceOrDebugOn, traceOn);
+ }
+ }
+ }
}
- } else {
- createThrottleMetaData(policyOmElement, synContext.isResponse());
}
}
/**
- * To create the Throttle from the policy element
- *
- * @param policyOmElement - valid throttle policy
- * @param isResponse - Indicates whether current message flow is IN or OUT
- */
- protected void createThrottleMetaData(OMElement policyOmElement, boolean
isResponse) {
+ * Create the throttling policy and the "Throttle" object applicable. If
this is a
+ * concurrent throttling instance, set the throttling access controller to
the shared
+ * map
+ * @param policyOmElement throttling policy
+ * @param synCtx incoming message
+ * @param traceOrDebugOn is tracing or debug on?
+ * @param traceOn is tracing on?
+ */
+ private synchronized void createThrottleMetaData(OMElement policyOmElement,
+ MessageContext synCtx, boolean traceOrDebugOn, boolean traceOn) {
+
+ if (inLinePolicy != null && throttle != null) {
+ // this uses a static policy, and one thread has already created
the "Throttle"
+ // object, just return...
+ return;
+ }
+
try {
- if (debugOn) {
- log.debug("Creating a new throttle configuration by parsing
the Policy");
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn, "Creating a new throttle configuration
by parsing the Policy");
}
- throttle = ThrottlePolicyProcessor
- .processPolicy(PolicyEngine.getPolicy(policyOmElement));
+ throttle = ThrottlePolicyProcessor.processPolicy(
+ PolicyEngine.getPolicy(policyOmElement));
- //set the concurrent access controller
- if (ID != null) {
- if (!CONCURRENT_ACCESS_CONTROLLERS.containsKey(ID)) {
- reCreateConcurrentAccessController(isResponse);
+ includesIPThrottling = (
+
throttle.getThrottleContext(ThrottleConstants.IP_BASED_THROTTLE_KEY) != null);
+
+ if (id != null) {
+ concurrentAccessController =
throttle.getConcurrentAccessController();
+ concurrentLimit = concurrentAccessController.getLimit();
+
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn,
+ "Initiating ConcurrentAccessControler for throttle
group id : " + id
+ + " limit : " + concurrentLimit);
+ }
+ if (concurrentAccessController == null) {
+ CONCURRENT_ACCESS_CONTROLLERS.remove(id);
} else {
- if (isInitiator) {
- reCreateConcurrentAccessController(isResponse);
- } else {
- lookupConcurrentAccessController();
- }
+ CONCURRENT_ACCESS_CONTROLLERS.put(id,
concurrentAccessController);
}
}
}
catch (ThrottleException e) {
- handleException("Error during processing the thorttle policy " +
e.getMessage());
- }
- }
-
- /**
- * create a ConcurrentAccessController if the current message is incoming
message
- *
- * @param isResponse true if the current message flow is out
- */
- private void reCreateConcurrentAccessController(boolean isResponse) {
-
- if (!isResponse) {
- concurrentAccessController =
throttle.getConcurrentAccessController();
- if (concurrentAccessController != null) {
- isInitiator = true; // frist time creation of concurrent
access controller
- if (CONCURRENT_ACCESS_CONTROLLERS.containsKey(ID)) {
- if (debugOn) {
- log.debug("Removing the ConcurrentAccessControler with
Id " + ID);
- }
- CONCURRENT_ACCESS_CONTROLLERS.remove(ID); // removing the
old access controller
- }
- if (debugOn) {
- log.debug("Initiating ConcurrentAccessControler for
throttle group id " + ID);
- }
- CONCURRENT_ACCESS_CONTROLLERS.put(ID,
concurrentAccessController);
- }
+ handleException("Error processing the throttling policy", e,
synCtx);
}
}
- /**
- * Looking up the ConcurrentAccessController which has initiated by a
another throttle mediator
- */
- private void lookupConcurrentAccessController() {
- log.info("ConcurrentAccessController has already defined for id :" +
ID);
- concurrentAccessController =
- (ConcurrentAccessController) CONCURRENT_ACCESS_CONTROLLERS.get(ID);
-
- }
-
- private void handleException(String msg) {
- log.error(msg);
- throw new SynapseException(msg);
- }
-
- private void handleException(String msg, Exception e) {
- log.error(e);
- throw new SynapseException(msg);
- }
-
public String getType() {
return ThrottleMediator.class.getName();
}
@@ -449,12 +389,12 @@
this.inLinePolicy = inLinePolicy;
}
- public String getOnReject() {
- return onReject;
+ public String getOnRejectSeqKey() {
+ return onRejectSeqKey;
}
- public void setOnReject(String onReject) {
- this.onReject = onReject;
+ public void setOnRejectSeqKey(String onRejectSeqKey) {
+ this.onRejectSeqKey = onRejectSeqKey;
}
public Mediator getOnRejectMediator() {
@@ -465,12 +405,12 @@
this.onRejectMediator = onRejectMediator;
}
- public String getOnAccept() {
- return onAccept;
+ public String getOnAcceptSeqKey() {
+ return onAcceptSeqKey;
}
- public void setOnAccept(String onAccept) {
- this.onAccept = onAccept;
+ public void setOnAcceptSeqKey(String onAcceptSeqKey) {
+ this.onAcceptSeqKey = onAcceptSeqKey;
}
public Mediator getOnAcceptMediator() {
@@ -481,11 +421,11 @@
this.onAcceptMediator = onAcceptMediator;
}
- public String getID() {
- return ID;
+ public String getId() {
+ return id;
}
- public void setID(String ID) {
- this.ID = ID;
+ public void setId(String id) {
+ this.id = id;
}
}
Modified:
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorFactory.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorFactory.java?rev=584267&r1=584266&r2=584267&view=diff
==============================================================================
---
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorFactory.java
(original)
+++
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorFactory.java
Fri Oct 12 13:50:16 2007
@@ -71,7 +71,7 @@
String id = elem.getAttributeValue(new
QName(XMLConfigConstants.NULL_NAMESPACE, "id"));
if (id != null) {
- throttleMediator.setID(id.trim());
+ throttleMediator.setId(id.trim());
}
SequenceMediatorFactory mediatorFactory = new
SequenceMediatorFactory();
@@ -80,7 +80,7 @@
if (onReject != null) {
String onRejectValue = onReject.getAttributeValue();
if (onRejectValue != null) {
- throttleMediator.setOnReject(onRejectValue.trim());
+ throttleMediator.setOnRejectSeqKey(onRejectValue.trim());
}
} else {
OMElement onRejectMediatorElement = elem.getFirstChildWithName(
@@ -95,7 +95,7 @@
if (onAccept != null) {
String onAcceptValue = onAccept.getAttributeValue();
if (onAcceptValue != null) {
- throttleMediator.setOnAccept(onAcceptValue);
+ throttleMediator.setOnAcceptSeqKey(onAcceptValue);
}
} else {
OMElement onAcceptMediatorElement = elem.getFirstChildWithName(
Modified:
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorSerializer.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorSerializer.java?rev=584267&r1=584266&r2=584267&view=diff
==============================================================================
---
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorSerializer.java
(original)
+++
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorSerializer.java
Fri Oct 12 13:50:16 2007
@@ -61,13 +61,13 @@
}
saveTracingState(throttle, throttleMediator);
- String id = throttleMediator.getID();
+ String id = throttleMediator.getId();
if(id != null){
throttle.addAttribute(fac.createOMAttribute(
"id", nullNS, id));
}
- String onReject = throttleMediator.getOnReject();
+ String onReject = throttleMediator.getOnRejectSeqKey();
if (onReject != null) {
throttle.addAttribute(fac.createOMAttribute(XMLConfigConstants.ONREJECT,
nullNS, onReject));
} else {
@@ -80,7 +80,7 @@
throttle.addChild(element);
}
}
- String onAccept = throttleMediator.getOnAccept();
+ String onAccept = throttleMediator.getOnAcceptSeqKey();
if (onAccept != null) {
throttle.addAttribute(fac.createOMAttribute(XMLConfigConstants.ONACCEPT,
nullNS, onAccept));
} else {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]