|
Summary: An extension of the JavaSpaces API, enabling operations with multiple objects in one call.
OverviewBatch operations boost performance, since they interact with the server in one RPC call and retrieve the result from the space in one space operation. This allows the client and server to utilize the network bandwidth in efficient manner. A few important points to note when using batch operations:
Operations Supportedcom.j_spaces.core.IJSpace extends the net.jini.space.JavaSpace:
Code ExampleThe following example demonstrates the usage of the different Javaspace batch operations: package com.j_spaces.examples.j_spaces_adv.batch_operations; import net.jini.core.entry.Entry; import net.jini.core.lease.Lease; import net.jini.space.JavaSpace; import java.util.Arrays; import com.j_spaces.core.IJSpace; import com.j_spaces.core.client.FinderException; import com.j_spaces.core.client.SpaceFinder; public class JSBatchOperations { public static void main(String[] args) { Entry m_Template; IJSpace m_Space; Entry resultset[]; int amount = 1000; System.out.println("\nWelcome to Gigaspaces Batch Operations Example!"); System.out.println( "This example uses single- and batch-operations ...\n" ); if (args.length != 1) { System.out.println("Usage: <spaceURL>"); System.out.println("<protocol_name>://host:port/containername/spacename"); System.exit(1); } try { m_Space = (IJSpace) SpaceFinder.find(args[0]); if (m_Space == null) { System.out.println("Space not found: " + args[0]); System.exit(-1); } System.out.println("Cleaning space..."); m_Space.clear( null, null ); // Use snapshot because this template is used several times m_Template = m_Space.snapshot(new Message()); // Test WRITE operation (write vs. writeMultiple) say("\nWrite " + amount + " messages to space using single mode..."); long startTime = System.currentTimeMillis(); for (int i = 0; i < amount ; i++) { Message msg = new Message(); msg.content = "Hello World " + i; m_Space.write(msg, null, Lease.FOREVER); } showResult (startTime , "Write in single mode"); say("Write " +amount +" messages to space using batch mode..."); startTime = System.currentTimeMillis(); Message msgs[] = new Message [amount]; for (int i = 0; i < amount ; i++) { Message msg = new Message(); msg.content = "Hello World " + i; msgs[i] = msg; } m_Space.writeMultiple(msgs, null, Lease.FOREVER); showResult (startTime , "Write in batch mode"); // Test UPDATE operation (update vs. updateMultiple) say("\nUpdate " +amount +" messages in space using single mode..."); startTime = System.currentTimeMillis(); for (int i = 0; i < amount; i++) { Message msg = new Message(); msg.content = "Hello World " + i; Message ret = (Message) m_Space.read(msg, null, JavaSpace.NO_WAIT); m_Space.update(ret, null, Lease.FOREVER, 1000); } showResult (startTime , "Update in single mode"); say("Update " +amount +" messages in space using batch mode..."); startTime = System.currentTimeMillis(); resultset = m_Space.readMultiple(m_Template, null, amount); long leases[] = new long[amount]; Arrays.fill(leases , Lease.FOREVER); m_Space.updateMultiple(resultset , null , leases); showResult (startTime , "Update in batch mode"); // Test TAKE operation (take vs. takeMultiple) say("\nTake " +amount +" messages from space using single mode..."); startTime = System.currentTimeMillis(); for (int i = 0; i < amount; i++) { Message msg = new Message(); msg.content = "Hello World " + i; Message ret = (Message) m_Space.take(msg, null, JavaSpace.NO_WAIT); } showResult (startTime , "Take in single mode"); say("Take " +amount +" messages from space using batch mode..."); startTime = System.currentTimeMillis(); resultset = m_Space.takeMultiple(m_Template, null, amount); showResult (startTime , "Take in batch mode"); // Test READ operation (read vs. readMultiple) say("\nRead " +amount +" messages from space using single mode..."); startTime = System.currentTimeMillis(); for (int i = 0; i < amount; i++) { Message msg = new Message(); msg.content = "Hello World " + i; Message ret = (Message) m_Space.read(msg, null, JavaSpace.NO_WAIT); } showResult (startTime , "Read in single mode"); say("Read " +amount +" messages from space using batch mode..."); startTime = System.currentTimeMillis(); resultset = m_Space.readMultiple(m_Template, null, amount); showResult (startTime , "Read in batch mode"); System.exit(0); } catch( FinderException ex ) { ex.printStackTrace(); System.out.println("Could not find space: " + args[0]); System.out.println("Please check that GigaSpaces Server is running."); } catch (Exception ex) { ex.printStackTrace(); } } private static void showResult(long startTime, String msg) { long endTime = System.currentTimeMillis(); System.out.println(msg + ": " + (endTime - startTime) + " msec"); } private static void say(String msg) { System.out.println(msg); } } |
(works on Firefox 2 and Internet Explorer 7)