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;
   
  +    }
   }