You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ja...@apache.org on 2005/05/26 05:00:10 UTC
cvs commit: ws-fx/sandesha/src/org/apache/sandesha/util PolicyLoader.java
jaliya 2005/05/25 20:00:10
Modified: sandesha/config WSRMPolicy.xml
sandesha/interop/webapp/jsp interop.jsp
sandesha/src/org/apache/sandesha Constants.java
RMMessageContext.java SandeshaContext.java
sandesha/src/org/apache/sandesha/client
ClientStorageManager.java
sandesha/src/org/apache/sandesha/server RMInvoker.java
Sender.java
sandesha/src/org/apache/sandesha/util PolicyLoader.java
Log:
Corrected the Binarybackoff Algorithm
Revision Changes Path
1.8 +1 -1 ws-fx/sandesha/config/WSRMPolicy.xml
Index: WSRMPolicy.xml
===================================================================
RCS file: /home/cvs/ws-fx/sandesha/config/WSRMPolicy.xml,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- WSRMPolicy.xml 25 May 2005 10:08:59 -0000 1.7
+++ WSRMPolicy.xml 26 May 2005 03:00:10 -0000 1.8
@@ -9,7 +9,7 @@
<wsp:Policy wsu:Id="MyPolicy" >
<wsrm:RMAssertion>
<!-- <wsrm:InactivityTimeout Milliseconds="600000" /> -->
- <wsrm:InactivityTimeout Milliseconds="480000" />
+ <wsrm:InactivityTimeout Milliseconds="240000" />
<wsrm:BaseRetransmissionInterval Milliseconds="3000" />
<wsrm:ExponentialBackoff />
<wsrm:AcknowledgementInterval Milliseconds="200" />
1.11 +4 -1 ws-fx/sandesha/interop/webapp/jsp/interop.jsp
Index: interop.jsp
===================================================================
RCS file: /home/cvs/ws-fx/sandesha/interop/webapp/jsp/interop.jsp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- interop.jsp 25 May 2005 11:01:31 -0000 1.10
+++ interop.jsp 26 May 2005 03:00:10 -0000 1.11
@@ -65,12 +65,14 @@
function setOperation (itm){
//document.getElementById("txtfrom").value = itm.value;
if(itm.value=="ping" || itm.value=="Ping"){
+ document.getElementById("replyto1").disabled=false;
//document.getElementById('replytoTR').style.display = 'none';
//document.getElementById('offerTR').style.display = 'none';
document.getElementById("replyto").value = "";
}else if(itm.value=="echoString" || itm.value=="EchoString"){
//document.getElementById('replytoTR').style.display = '';
//document.getElementById('offerTR').style.display = '';
+ document.getElementById("replyto1").disabled=true;
document.getElementById("replyto").value = "<%=defaultAsyncEndPoint%>";
}
}
@@ -291,8 +293,9 @@
RMClientProvider.setCallback(callback);
Sender.setCallback(callback);
+ //InteropStub stub= InteropStub.getInstance();
InteropStub stub= InteropStub.getInstance();
- InteropStub.setCallback(callback);
+ stub.setCallback(callback);
if(bean.getOperation().equalsIgnoreCase("ping")){
stub.runPing(bean);
1.52 +2 -1 ws-fx/sandesha/src/org/apache/sandesha/Constants.java
Index: Constants.java
===================================================================
RCS file: /home/cvs/ws-fx/sandesha/src/org/apache/sandesha/Constants.java,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- Constants.java 25 May 2005 10:08:59 -0000 1.51
+++ Constants.java 26 May 2005 03:00:10 -0000 1.52
@@ -45,7 +45,7 @@
public static final long RETRANSMISSION_INTERVAL = 4000;
public static final long ACKNOWLEDGEMENT_INTERVAL = 200;
public static final long INACTIVITY_TIMEOUT = 600000;
- public static final int MAXIMUM_RETRANSMISSION_COUNT = 4;
+ public static final int MAXIMUM_RETRANSMISSION_COUNT = 10;
public static final long RMINVOKER_SLEEP_TIME = 2000;
public static final long SENDER_SLEEP_TIME = 2000;
public static final int CLIENT_RESPONSE_CHECKING_INTERVAL = 500;
@@ -218,6 +218,7 @@
public final String EXP_BACKOFF = "ExponentialBackoff";
public final String WSRM = "http://schemas.xmlsoap.org/ws/2005/02/rm/policy";
+ public final String BIN_BACKOFF = "BinaryBackoff";
}
}
1.32 +26 -0 ws-fx/sandesha/src/org/apache/sandesha/RMMessageContext.java
Index: RMMessageContext.java
===================================================================
RCS file: /home/cvs/ws-fx/sandesha/src/org/apache/sandesha/RMMessageContext.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- RMMessageContext.java 25 May 2005 10:08:59 -0000 1.31
+++ RMMessageContext.java 26 May 2005 03:00:10 -0000 1.32
@@ -21,6 +21,7 @@
import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.message.addressing.AddressingHeaders;
import org.apache.sandesha.ws.rm.RMHeaders;
+import org.apache.sandesha.util.PolicyLoader;
import org.apache.commons.logging.Log;
import java.util.ArrayList;
@@ -45,6 +46,25 @@
private int messageType;
private long reTransmissionCount;
private long lastPrecessedTime;
+ private long fristProcessedTime;
+ private long retransmissionTime;
+
+ public long getFristProcessedTime() {
+ return fristProcessedTime;
+ }
+
+ public void setFristProcessedTime(long fristProcessedTime) {
+ this.fristProcessedTime = fristProcessedTime;
+ }
+
+ public long getRetransmissionTime() {
+ return retransmissionTime;
+ }
+
+ public void setRetransmissionTime(long retransmissionTime) {
+ this.retransmissionTime = retransmissionTime;
+ }
+
private long lastSentTime;
private boolean sync;
private boolean hasResponse;
@@ -62,6 +82,12 @@
private String to;
+ public RMMessageContext(){
+ this.retransmissionTime=PolicyLoader.getInstance().getBaseRetransmissionInterval();
+ this.fristProcessedTime=0;
+ }
+
+
public boolean isSendOffer() {
return sendOffer;
}
1.3 +10 -8 ws-fx/sandesha/src/org/apache/sandesha/SandeshaContext.java
Index: SandeshaContext.java
===================================================================
RCS file: /home/cvs/ws-fx/sandesha/src/org/apache/sandesha/SandeshaContext.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SandeshaContext.java 24 May 2005 06:07:39 -0000 1.2
+++ SandeshaContext.java 26 May 2005 03:00:10 -0000 1.3
@@ -84,14 +84,16 @@
serverSenderStarted = true;
thServerSender.start();
}
- if (!rmInvokerStarted) {
- System.out.println(Constants.InfomationMessage.RMINVOKER_STARTED);
- RMInvoker rmInvoker = new RMInvoker();
- thInvoker = new Thread(rmInvoker);
- thInvoker.setDaemon(true);
- rmInvokerStarted = true;
- thInvoker.start();
- }
+ RMInvoker rmInvoker = new RMInvoker();
+ rmInvoker.startInvoker();
+ // if (!rmInvokerStarted) {
+ // System.out.println(Constants.InfomationMessage.RMINVOKER_STARTED);
+ // RMInvoker rmInvoker = new RMInvoker();
+ // thInvoker = new Thread(rmInvoker);
+ // thInvoker.setDaemon(true);
+ // rmInvokerStarted = true;
+ // thInvoker.start();
+ // }
return new ServerStorageManager();
}
}
1.40 +1 -1 ws-fx/sandesha/src/org/apache/sandesha/client/ClientStorageManager.java
Index: ClientStorageManager.java
===================================================================
RCS file: /home/cvs/ws-fx/sandesha/src/org/apache/sandesha/client/ClientStorageManager.java,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- ClientStorageManager.java 24 May 2005 06:07:40 -0000 1.39
+++ ClientStorageManager.java 26 May 2005 03:00:10 -0000 1.40
@@ -390,7 +390,7 @@
}
public boolean isSequenceComplete(String seqId) {
- boolean outTerminateSent = accessor.isOutgoingTerminateSent(seqId);
+ boolean outTerminateSent = accessor.isOutgoingTerminateSent(seqId);
boolean incomingTerminateReceived = accessor.isIncommingTerminateReceived(seqId);
return outTerminateSent && incomingTerminateReceived;
}
1.29 +51 -20 ws-fx/sandesha/src/org/apache/sandesha/server/RMInvoker.java
Index: RMInvoker.java
===================================================================
RCS file: /home/cvs/ws-fx/sandesha/src/org/apache/sandesha/server/RMInvoker.java,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- RMInvoker.java 25 May 2005 10:09:00 -0000 1.28
+++ RMInvoker.java 26 May 2005 03:00:10 -0000 1.29
@@ -16,6 +16,7 @@
*/
package org.apache.sandesha.server;
+import org.apache.axis.MessageContext;
import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.components.uuid.UUIDGen;
import org.apache.axis.components.uuid.UUIDGenFactory;
@@ -29,38 +30,53 @@
import org.apache.sandesha.util.RMMessageCreator;
/**
- * This class will act as the service dispatcher for Sandesha. However actual dispatching
- * is done using the provider specified by the user in sandesha.properties file. By default this
- * will use RPCProvider.
- *
- * @auther Chamikara Jayalath
- * @auther Jaliya Ekanayake
+ * @author JEkanayake
+ * <p/>
+ * This class will act as the service dispatcher for Sandesha. By default it
+ * will use the RPCProvider to invoke the service but need to improve this to
+ * use any Provider depending on the configuration.
*/
public class RMInvoker implements Runnable {
private IStorageManager storageManager = null;
private static final Log log = LogFactory.getLog(RMInvoker.class.getName());
private static final UUIDGen uuidGen = UUIDGenFactory.getUUIDGen();
+ private static boolean invokerStarted = false;
public RMInvoker() {
- storageManager = new ServerStorageManager();
- storageManager.init();
+ setStorageManager(new ServerStorageManager());
+ getStorageManager().init();
+ }
+
+ public void startInvoker() {
+ if (!invokerStarted) {
+ System.out.println(Constants.InfomationMessage.RMINVOKER_STARTED);
+ invokerStarted = true;
+ Thread invokerThread = new Thread(this, "RMInvoker");
+ invokerThread.setDaemon(false);
+ invokerThread.start();
+ }
+ }
+ protected boolean doRealInvoke(MessageContext aMessageContext) throws Exception {
+ Class c = Class.forName(PropertyLoader.getProvider());
+ JavaProvider provider = (JavaProvider) c.newInstance();
+ provider.invoke(aMessageContext);
+ return aMessageContext.getOperation().getMethod().getReturnType() == Void.TYPE;
}
+
public void run() {
while (true) {
try {
Thread.sleep(Constants.RMINVOKER_SLEEP_TIME);
- RMMessageContext rmMessageContext = storageManager.getNextMessageToProcess();
+ RMMessageContext rmMessageContext = getStorageManager().getNextMessageToProcess();
if (rmMessageContext != null) {
AddressingHeaders addrHeaders = rmMessageContext.getAddressingHeaders();
- Class c = Class.forName(PropertyLoader.getProvider());
- JavaProvider provider = (JavaProvider) c.newInstance();
- provider.invoke(rmMessageContext.getMsgContext());
+ boolean isVoid = doRealInvoke(rmMessageContext.getMsgContext());
+
+ if (!isVoid) {
- if (rmMessageContext.getMsgContext().getOperation().getMethod().getReturnType() !=
- Void.TYPE) {
String oldAction = rmMessageContext.getAddressingHeaders().getAction()
.toString();
rmMessageContext.getAddressingHeaders().setAction(
@@ -72,7 +88,7 @@
RMMessageContext terminateMsg = RMMessageCreator.createTerminateSeqMsg(
rmMessageContext, Constants.SERVER);
terminateMsg.setOutGoingAddress(replyTo);
- storageManager.insertTerminateSeqMessage(terminateMsg);
+ getStorageManager().insertTerminateSeqMessage(terminateMsg);
} else {
log.error(Constants.ErrorMessages.CANNOT_SEND_THE_TERMINATE_SEQ);
}
@@ -82,7 +98,7 @@
// used in this case. This is done by the RMSender.
rmMessageContext.setMessageType(Constants.MSG_TYPE_SERVICE_RESPONSE);
- boolean hasResponseSeq = storageManager.isResponseSequenceExist(
+ boolean hasResponseSeq = getStorageManager().isResponseSequenceExist(
rmMessageContext.getSequenceID());
boolean firstMsgOfResponseSeq = false;
if (!(hasResponseSeq && rmMessageContext.getRMHeaders().getSequence()
@@ -91,9 +107,9 @@
firstMsgOfResponseSeq = !hasResponseSeq;
}
- rmMessageContext.setMsgNumber(storageManager.getNextMessageNumber(
+ rmMessageContext.setMsgNumber(getStorageManager().getNextMessageNumber(
rmMessageContext.getSequenceID()));
- storageManager.insertOutgoingMessage(rmMessageContext);
+ getStorageManager().insertOutgoingMessage(rmMessageContext);
if (firstMsgOfResponseSeq) {
@@ -108,9 +124,9 @@
csRMMsgCtx.addToMsgIdList(msgIdStr);
csRMMsgCtx.setMessageID(msgIdStr);
- storageManager.setTemporaryOutSequence(csRMMsgCtx.getSequenceID(),
+ getStorageManager().setTemporaryOutSequence(csRMMsgCtx.getSequenceID(),
msgIdStr);
- storageManager.addCreateSequenceRequest(csRMMsgCtx);
+ getStorageManager().addCreateSequenceRequest(csRMMsgCtx);
}
}
}
@@ -121,4 +137,19 @@
}
}
}
+
+ /**
+ * @param storageManager The storageManager to set.
+ */
+ protected void setStorageManager(IStorageManager storageManager) {
+ this.storageManager = storageManager;
+ }
+
+ /**
+ * @return Returns the storageManager.
+ */
+ protected IStorageManager getStorageManager() {
+ return storageManager;
+ }
+
}
\ No newline at end of file
1.43 +65 -22 ws-fx/sandesha/src/org/apache/sandesha/server/Sender.java
Index: Sender.java
===================================================================
RCS file: /home/cvs/ws-fx/sandesha/src/org/apache/sandesha/server/Sender.java,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -r1.42 -r1.43
--- Sender.java 25 May 2005 10:09:00 -0000 1.42
+++ Sender.java 26 May 2005 03:00:10 -0000 1.43
@@ -111,13 +111,42 @@
if (rmMessageContext == null) {
hasMessages = false;
} else {
- //Send the message.
- if ((rmMessageContext.getReTransmissionCount() <=
- PolicyLoader.getInstance().getRetransmissionCount()) &&
- ((System.currentTimeMillis() - rmMessageContext.getLastPrecessedTime()) >
- PolicyLoader.getInstance().getBaseRetransmissionInterval())) {
+ long inactivityTimeout = PolicyLoader.getInstance().getInactivityTimeout();
+ long retransmissionInterval = PolicyLoader.getInstance()
+ .getBaseRetransmissionInterval();
+
+ if (rmMessageContext.getFristProcessedTime() == 0)
+ rmMessageContext.setFristProcessedTime(System.currentTimeMillis());
+
+ if ((System.currentTimeMillis() - rmMessageContext.getFristProcessedTime()) >
+ inactivityTimeout) {
+ log.error(
+ "Inactivity Time Out Reached for the message with <wsa:MessageID> " +
+ rmMessageContext.getMessageID());
+ storageManager.clearStorage();
+
+
+ } else if (rmMessageContext.getRetransmissionTime() <
+ (System.currentTimeMillis() - rmMessageContext.getLastPrecessedTime())) {
try {
+
+ rmMessageContext.setLastPrecessedTime(System.currentTimeMillis());
+ rmMessageContext.setReTransmissionCount(
+ rmMessageContext.getReTransmissionCount() + 1);
+
+ if (PolicyLoader.getInstance().getExponentialBackoff() != null) {
+ long newRtTime = ((long) Math.pow(retransmissionInterval / 1000,
+ rmMessageContext.getReTransmissionCount())) * 1000;
+ rmMessageContext.setRetransmissionTime(newRtTime);
+
+ } else {
+ //Let's do Binary Back Off
+ long rtTime = rmMessageContext.getRetransmissionTime();
+ rmMessageContext.setRetransmissionTime(2 * rtTime);
+
+ }
sendMessage(rmMessageContext);
+
} catch (AxisFault e) {
log.error(e);
} catch (SOAPException e) {
@@ -125,9 +154,26 @@
} catch (Exception e) {
log.error(e);
}
- } else {
- //TODO REPORT ERROR
}
+
+
+ //Send the message.
+ /* if ((rmMessageContext.getReTransmissionCount() <=
+ PolicyLoader.getInstance().getRetransmissionCount()) &&
+ ((System.currentTimeMillis() - rmMessageContext.getLastPrecessedTime()) >
+ PolicyLoader.getInstance().getBaseRetransmissionInterval())) {
+ try {
+ sendMessage(rmMessageContext);
+ } catch (AxisFault e) {
+ log.error(e);
+ } catch (SOAPException e) {
+ log.error(e);
+ } catch (Exception e) {
+ log.error(e);
+ }
+ } else {
+ //TODO REPORT ERROR
+ }*/
}
} while (hasMessages);
@@ -161,9 +207,8 @@
{
System.out.println(Constants.InfomationMessage.SENDING_TERMINATE_SEQ);
sendTerminateSequenceRequest(rmMessageContext);
- storageManager.setTerminateSend(
- storageManager.getKeyFromOutgoingSeqId(
- rmMessageContext.getSequenceID()));
+ storageManager.setTerminateSend(storageManager.getKeyFromOutgoingSeqId(
+ rmMessageContext.getSequenceID()));
break;
}
case Constants.MSG_TYPE_ACKNOWLEDGEMENT:
@@ -198,8 +243,8 @@
rmMessageContext.getMsgContext().setRequestMessage(terSeqMsg);
Call call;
- rmMessageContext.setLastPrecessedTime(System.currentTimeMillis());
- rmMessageContext.setReTransmissionCount(rmMessageContext.getReTransmissionCount() + 1);
+ //rmMessageContext.setLastPrecessedTime(System.currentTimeMillis());
+ //rmMessageContext.setReTransmissionCount(rmMessageContext.getReTransmissionCount() + 1);
call = prepareCall(rmMessageContext);
call.invoke();
@@ -225,8 +270,8 @@
String soapMsg = rmMessageContext.getMsgContext().getRequestMessage().getSOAPPartAsString();
call.setRequestMessage(new Message(soapMsg));
- rmMessageContext.setLastPrecessedTime(System.currentTimeMillis());
- rmMessageContext.setReTransmissionCount(rmMessageContext.getReTransmissionCount() + 1);
+ // rmMessageContext.setLastPrecessedTime(System.currentTimeMillis());
+ // rmMessageContext.setReTransmissionCount(rmMessageContext.getReTransmissionCount() + 1);
//We are not expecting the ack over the same connection
storageManager.addSendMsgNo(rmMessageContext.getSequenceID(),
rmMessageContext.getMsgNumber());
@@ -240,8 +285,6 @@
SOAPEnvelope reqEnvelope = EnvelopeCreator.createCreateSequenceEnvelope(rmMsgCtx);
rmMsgCtx.getMsgContext().setRequestMessage(new Message(reqEnvelope));
- rmMsgCtx.setLastPrecessedTime(System.currentTimeMillis());
- rmMsgCtx.setReTransmissionCount(rmMsgCtx.getReTransmissionCount() + 1);
call = prepareCall(rmMsgCtx);
call.invoke();
@@ -257,8 +300,8 @@
//The code should not come to this point.
System.err.println(Constants.ErrorMessages.NULL_REQUEST_MSG);
} else {
- rmMessageContext.setLastPrecessedTime(System.currentTimeMillis());
- rmMessageContext.setReTransmissionCount(rmMessageContext.getReTransmissionCount() + 1);
+ // rmMessageContext.setLastPrecessedTime(System.currentTimeMillis());
+ // rmMessageContext.setReTransmissionCount(rmMessageContext.getReTransmissionCount() + 1);
Call call = prepareCall(rmMessageContext);
call.setRequestMessage(rmMessageContext.getMsgContext().getResponseMessage());
call.invoke();
@@ -271,8 +314,8 @@
if (rmMessageContext.getMsgContext().getResponseMessage() == null) {
log.error(Constants.ErrorMessages.NULL_REQUEST_MSG);
} else {
- rmMessageContext.setLastPrecessedTime(System.currentTimeMillis());
- rmMessageContext.setReTransmissionCount(rmMessageContext.getReTransmissionCount() + 1);
+ //rmMessageContext.setLastPrecessedTime(System.currentTimeMillis());
+ //rmMessageContext.setReTransmissionCount(rmMessageContext.getReTransmissionCount() + 1);
Call call = prepareCall(rmMessageContext);
call.setRequestMessage(rmMessageContext.getMsgContext().getResponseMessage());
call.invoke();
@@ -304,8 +347,8 @@
requestEnvelope = EnvelopeCreator.createServiceRequestEnvelope(rmMessageContext);
rmMessageContext.getMsgContext().setRequestMessage(new Message(requestEnvelope));
- rmMessageContext.setLastPrecessedTime(System.currentTimeMillis());
- rmMessageContext.setReTransmissionCount(rmMessageContext.getReTransmissionCount() + 1);
+ // rmMessageContext.setLastPrecessedTime(System.currentTimeMillis());
+ // rmMessageContext.setReTransmissionCount(rmMessageContext.getReTransmissionCount() + 1);
if (rmMessageContext.getSync()) {
Call call;
call = prepareCall(rmMessageContext);
1.5 +132 -111 ws-fx/sandesha/src/org/apache/sandesha/util/PolicyLoader.java
Index: PolicyLoader.java
===================================================================
RCS file: /home/cvs/ws-fx/sandesha/src/org/apache/sandesha/util/PolicyLoader.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- PolicyLoader.java 25 May 2005 10:09:00 -0000 1.4
+++ PolicyLoader.java 26 May 2005 03:00:10 -0000 1.5
@@ -25,124 +25,145 @@
import org.apache.axis.components.logger.LogFactory;
import org.apache.commons.logging.Log;
import org.apache.sandesha.Constants;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.NodeList;
+import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.InputStream;
-public class PolicyLoader{
-
- private static final Log log = LogFactory.getLog(PolicyLoader.class.getName());
-
- private long inactivityTimeout;
- private long baseRetransmissionInterval;
- private long acknowledgementInterval;
- private String exponentialBackoff;
-
- private DocumentBuilderFactory factory;
- private DocumentBuilder builder;
- private Document document;
-
- private static PolicyLoader instance;
- private static boolean policyInstance = false;
-
- private Element rootNodeElement;
-
- private PolicyLoader (){
- policyInstance = true;
- }
-
- public static PolicyLoader getInstance (){
- if (policyInstance == false)
- return instance = new PolicyLoader();
- else
- return instance;
- }
-
- public int getRetransmissionCount () {
- return Constants.MAXIMUM_RETRANSMISSION_COUNT;
- }
-
- public long getInactivityTimeout (){
- helper();
- if (inactivityTimeout == 0)
- return Constants.INACTIVITY_TIMEOUT;
- else
- return inactivityTimeout;
- }
-
- public long getBaseRetransmissionInterval (){
- helper();
- if (baseRetransmissionInterval == 0)
- return Constants.RETRANSMISSION_INTERVAL;
- else
- return baseRetransmissionInterval;
- }
-
- public long getAcknowledgementInterval () {
- helper();
- if (acknowledgementInterval == 0)
- return Constants.ACKNOWLEDGEMENT_INTERVAL;
- else
- return acknowledgementInterval;
- }
-
- public String getExponentialBackoff () {
- helper();
- return exponentialBackoff;
- }
-
- public void helper () {
- init();
- try{
- inactivityTimeout = getAttributeValue(Constants.WSRMPolicy.WSRM,Constants.WSRMPolicy.INA_TIMEOUT);
- baseRetransmissionInterval = getAttributeValue(Constants.WSRMPolicy.WSRM, Constants.WSRMPolicy.BASE_TX_INTERVAL);
- acknowledgementInterval = getAttributeValue(Constants.WSRMPolicy.WSRM, Constants.WSRMPolicy.ACK_INTERVAL);
- exponentialBackoff = getExpBackoffInterval(Constants.WSRMPolicy.WSRM, Constants.WSRMPolicy.EXP_BACKOFF);
- }catch(Exception e){
- e.printStackTrace();
- }
- }
-
- private long getAttributeValue(String namespaceURI, String elementName) {
- NodeList list = rootNodeElement.getElementsByTagNameNS(namespaceURI,elementName);
- NamedNodeMap map = list.item(0).getAttributes();
- Attr att = (Attr)map.item(0);
- String value = att.getNodeValue();
- return Long.parseLong(value.trim());
-
- }
- private String getExpBackoffInterval(String namespaceURI,String elementName){
- NodeList list = rootNodeElement.getElementsByTagNameNS(namespaceURI,elementName);
- String name = list.item(0).getLocalName();
- return name;
- }
-
- private void init() {
- try{
- factory = DocumentBuilderFactory.newInstance();
- factory.setNamespaceAware(true);
- builder = factory.newDocumentBuilder();
- InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(Constants.ClientProperties.WSRM_POLICY_FILE);
-
- if ( in != null){
- document = builder.parse(in);
- rootNodeElement = document.getDocumentElement();
- }
- else
- log.error("No WSRMPolicy.xml Found");
- }catch (Exception e){
- e.printStackTrace();
- }
- }
-
+public class PolicyLoader {
+ private static final Log log = LogFactory.getLog(PolicyLoader.class.getName());
+ private long inactivityTimeout;
+ private long baseRetransmissionInterval;
+ private long acknowledgementInterval;
+ private String exponentialBackoff;
+ private String binaryBackOff;
+
+ private DocumentBuilderFactory factory;
+ private DocumentBuilder builder;
+ private Document document;
+
+ private static PolicyLoader instance;
+ private static boolean policyInstance = false;
+
+ private Element rootNodeElement;
+
+ private PolicyLoader() {
+ helper();
+ policyInstance = true;
+ }
+
+ public static PolicyLoader getInstance() {
+ if (policyInstance == false)
+ return instance = new PolicyLoader();
+ else
+ return instance;
+ }
+
+ public int getRetransmissionCount() {
+ return Constants.MAXIMUM_RETRANSMISSION_COUNT;
+ }
+
+ public long getInactivityTimeout() {
+
+ if (inactivityTimeout == 0)
+ return Constants.INACTIVITY_TIMEOUT;
+ else
+ return inactivityTimeout;
+ }
+
+ public long getBaseRetransmissionInterval() {
+ if (baseRetransmissionInterval == 0)
+ return Constants.RETRANSMISSION_INTERVAL;
+ else
+ return baseRetransmissionInterval;
+ }
+
+ public long getAcknowledgementInterval() {
+ if (acknowledgementInterval == 0)
+ return Constants.ACKNOWLEDGEMENT_INTERVAL;
+ else
+ return acknowledgementInterval;
+ }
+
+ public String getExponentialBackoff() {
+ return exponentialBackoff;
+ }
+
+ public void helper() {
+ init();
+ try {
+ inactivityTimeout =
+ getAttributeValue(Constants.WSRMPolicy.WSRM, Constants.WSRMPolicy.INA_TIMEOUT);
+ baseRetransmissionInterval = getAttributeValue(Constants.WSRMPolicy.WSRM,
+ Constants.WSRMPolicy.BASE_TX_INTERVAL);
+ acknowledgementInterval =
+ getAttributeValue(Constants.WSRMPolicy.WSRM, Constants.WSRMPolicy.ACK_INTERVAL);
+ exponentialBackoff = getExpBackoffInterval(Constants.WSRMPolicy.WSRM,
+ Constants.WSRMPolicy.EXP_BACKOFF);
+ binaryBackOff = geBinaryBackoffInterval(Constants.WSRMPolicy.WSRM,
+ Constants.WSRMPolicy.BIN_BACKOFF);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private String geBinaryBackoffInterval(String namespaceURI, String elementName) {
+ String name = null;
+ NodeList list = rootNodeElement.getElementsByTagNameNS(namespaceURI, elementName);
+ if (list != null) {
+ Node node = list.item(0);
+ if (node != null)
+ name = list.item(0).getLocalName();
+ }
+ return name;
+ }
+
+ private long getAttributeValue(String namespaceURI, String elementName) {
+ NodeList list = rootNodeElement.getElementsByTagNameNS(namespaceURI, elementName);
+ NamedNodeMap map = list.item(0).getAttributes();
+ Attr att = (Attr) map.item(0);
+ String value = att.getNodeValue();
+ return Long.parseLong(value.trim());
+
+ }
+
+ private String getExpBackoffInterval(String namespaceURI, String elementName) {
+ String name = null;
+ NodeList list = rootNodeElement.getElementsByTagNameNS(namespaceURI, elementName);
+ if (list != null) {
+ Node node = list.item(0);
+ if (node != null)
+ name = list.item(0).getLocalName();
+ }
+ return name;
+ }
+
+ private void init() {
+ try {
+ factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ builder = factory.newDocumentBuilder();
+ InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(
+ Constants.ClientProperties.WSRM_POLICY_FILE);
+
+ if (in != null) {
+ document = builder.parse(in);
+ rootNodeElement = document.getDocumentElement();
+ } else
+ log.error("No WSRMPolicy.xml Found");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ public String getBinaryBackOff() {
+ helper();
+ return binaryBackOff;
+ }
}