Examples

 

Examples

 
1PC
2PC
Currency Broker
Buyer-Seller-Shipper

//$ bin/sessionjc -cp tests/classes/ tests/src/purdue/exceptions/1pc/exceptions/Client.sj -d tests/classes/
//$ bin/sessionj -cp tests/classes/ purdue.onepc.Client & 
package purdue.onepc;

import sessionj.runtime.*;
import sessionj.runtime.net.*;
import java.util.Random;
import java.net.*;

public class Client{
    
    participant client;
    protocol OnePC {
        participants: client, coordinator, worker
        .client: begin
        .client -> coordinator: <Long>   //Start transaction ID 
            .ptry {    
            coordinator -> worker: <Long>  | <Exception> // UPDATE request or Coordinator Exception
            .worker -> coordinator: <Boolean> | <Exception> //ACK or NACK
            .coordinator -> client: <Boolean> //ACK or NACK
        }
        pcatch(Exception) {
            //retry:
            client -> coordinator: <Boolean>
            .client -> worker: <Boolean>
        }
    }
    Random r = new Random(System.currentTimeMillis());
    public void run() throws Exception 
    {  
        final noalias SJService c = SJService.create(OnePC, "localhost"1000);
        c.participantName("client");
        c.addParticipant("coordinator""sslab04.cs.purdue.edu"21101);
        c.addParticipant("worker""mc04.cs.purdue.edu"21102);   
        final noalias SJSocketGroup socket;
        
        try(socket)
        {
            int exNumber = 0, numTrials = 10000, exceptionProb = 0;
            socket = c.request();
            System.out.println("Client connected");
            Boolean bTrue = new Boolean(true);
            SJSyncObject syncObj = new SJSyncObject();
            Exception myException = new Exception();
            Boolean b = null;
            boolean ex = false;
            Long XID = null;
            long duration = 0;
            for(exceptionProb = -30; exceptionProb <= 90; exceptionProb += 10) {
                long startTime = System.nanoTime();
                int exception1Count = 0, exception2Count = 0, completedTrials = 0;
                for(int i = 0; i < numTrials;) {            
                    completedTrials++;
                    exNumber = 0;
                    XID = new Long(r.nextLong());
                    socket.send(XID, "coordinator");
                    ex = randomBoolean(exceptionProb);
                    ptry {      
                        socket.receiveSync("coordinator");
                        exNumber = 1;
                        socket.receiveSync("worker");
                        b = (Booleansocket.receive("coordinator");
                        i++;
                    }
                    catch(Exception e) {
                        System.out.println("Client in Handler");
                        socket.send(bTrue, "coordinator");
                        socket.send(bTrue, "worker");
                        if(exNumber == 0)
                            exception1Count++;
                        else if(exNumber == 1)
                            exception2Count++;
                    }
                }
                duration = System.nanoTime() - startTime;
                System.out.println("\n\nResults for exception Probability: " + exceptionProb + "%");
                System.out.println("Completed Trials: " + completedTrials);
                System.out.println("Average Request Time (ms): " ((doubleduration/ numTrials / 1000000.0);
                System.out.println("Exception 1 rate: " + exception1Count*100.0/completedTrials + "%");
                System.out.println("Exception 2 rate: " + exception2Count*100.0/completedTrials + "%");
                System.out.println("Exception rate: " (exception1Count + exception2Count)*100.0/completedTrials + "%");
            }
        }
        finally {}
        
    }
    
    public static void main(String[] argsthrows Exception
    {
        Client a = new Client();
        a.run();
    }
    
}
Java2html