Code Snippets
Write and Read
Write and ReadThe ISpaceProxy.Write method saves new objects to, and updates existing objects in the Space. In order to override these default semantics, you can use the overloaded Write methods which accept update modifiers such as UpdateModifiers.UPDATE_ONLY. The Read methods are used to retrieve objects from the Space. The Read method returns a copy of the matching object to the client. To read more than one object, you should use the ReadMultiple methods of the ISpaceProxy interface. To define the criteria for the operation, all of these methods accept either a template object, or an SQLQuery instance. A template object is an example object of the class you would like to read. For an object in the space to match the template, each of the non-null properties in the template must match its values for these properties. To read an object by its ID (key), you should use one of the ReadById/ReadByIds methods. Getting Space proxy: ISpaceProxy mySpace = GigaSpaceFactory.FindSpace("spaceURL");
mySpace.defaultTimeout = 1000;
mySpace.defaultLeaseTime = 1000;
The following writes an Employee object and reads it back using a simple template: ISpaceProxy mySpace; Employee employee = new Employee("Last Name", new Integer(32)); employee.setFirstName("first name"); LeaseContext<Employee> lc = mySpace.Write(employee); Employee template = new Employee(); Employee result = mySpace.Read(template); Notification Registration Notification RegistrationThe ISpaceProxy can register Listener objects to create notifications. The following registers for notifications: //Create a notification listener for object of type person, and specify a function as the Event Handler. ISpaceProxy proxy; IEventRegistration eventReg = proxy.DefaultDataEventSession.AddListener(new Person(), Space_PersonChanged); //create the person object Person person = new Person(); person.UserID = "123456"; //save the person to the Space. The event handler for the notifications listener is called. proxy.Write(person); //update person object. The event handler for the notifications listener is called. proxy.Write(person, WriteModifiers.UpdateOrWrite); //delete the person object from the Space. The event handler for the notifications is called. proxy.Take(person); // Remove the notifications listener proxy.DefaultDataEventSession.RemoveListener(eventReg); Batch Write Batch WriteWhen writing a batch of objects into the Space, these should be placed into an array to be used by the ISpaceProxy.WriteMultiple operation. The returned array will include the corresponding LeaseContext object. ISpaceProxy space; Employee emps[] = new Employee[2]; emps[0] = new Employee("Last Name A", new Integer(10)); emps[1] = new Employee("Last Name B", new Integer(20)); try { ILeaseContext[] leaseContexts = space.WriteMultiple(emps); for (int i = 0;i<leaseContexts.length ; i++) { System.out.println ("Object UID " + leaseContexts[i].getUID() + " inserted into the space"); } } catch (WriteMultipleException e) { IWriteResult[] writeResult = e.getResults(); for (int i = 0;i< writeResult.length ; i++) { System.out.println ("Problem with Object UID " + writeResult "); } } Batch Read Batch ReadThe following queries the space using SQL: ISpaceQuery space; String querystr = "age>40"; SQLQuery query = new SQLQuery(Employee.class, querystr); Employee results[] = space.readMultiple(query , Integer.MAX_VALUE);
Clear Clear ObjectsYou can use the SQLQuery with the GigaSpace.clear to remove objects from the space: ISpaceProxy space; String querystr = "age>30"; SQLQuery query = new SQLQuery(Employee.class, querystr); space.clear(query);
Updating an Object Updating an ObjectThe ISpaceProxy.Write with the WriteModifiers.UPDATE_ONLY modifier should be used to explicitly perform an update operation. The WriteModifiers.UPDATE_OR_WRITE is the default mode with Write operations. This means that subsequent calls to the Write operation with an object with identical SpaceId will result in an update operation, i.e. a new object will not be inserted into the space.
The ISpaceProxy.Write has a few activity modes. The return object options are different for each mode:
When updating an object, you can specify 0 (ZERO) as the lease time. This will instruct the space to use the original lease time used when the object has been written into the space. UPDATE_OR_WRITE Example: try { LeaseContext ret = space.Write(employee ,/*lease*/ 0 ,/*timeout*/ 1000 , WriteModifiers.UPDATE_OR_WRITE); if ( ret.getObject() == null) { // successful write } if (ret.getObject() instanceof Employee) { // successful update } } catch (UpdateOperationTimeoutException uote) { // Object is locked - unsuccessful update } WRITE_ONLY Example: try { LeaseContext ret = space.Write(employee ,/*lease*/ 0 ,/*timeout*/ 1000 , WriteModifiers.WRITE_ONLY); if ( ret.getObject() == null) { // successful write } } catch (EntryAlreadyInSpaceException eainse) { // Object already exists - unsuccessful write } UPDATE_ONLY Example: try { LeaseContext ret = space.Write(employee ,/*lease*/ 0 ,/*timeout*/ 1000 , WriteModifiers.UPDATE_ONLY); if ( ret == null) { // Object is locked - unsuccessful update } else if (ret.getObject() instanceof Employee) { // successful update } } catch (EntryNotInSpaceException enise) { // Object not in space - unsuccessful update } catch (SpaceOptimisticLockingFailureException solfe) { // Client holds wrong version of the object - unsuccessful update. We need to read it again and issue the update call again. } PARTIAL_UPDATE Example: ISpaceProxy space = GigaSpacesFactory.FindSpace("jini://*/*/mySpace"); space.NoWriteLeaseMode = true; // initial insert MyClass obj = new MyClass(); obj.setId("1"); obj.setField1("A"); obj.setField2("B"); obj.setField3("C"); space.Write(obj); // reading object back from the space MyClass obj2 = space.readById(MyClass.class , "1"); // updating only field2 obj2.setField1(null); obj2.setField2("BBBB"); obj2.setField3(null); try { space.Write(obj2,0,0,WriteModifiers.PARTIAL_UPDATE); } catch (EntryNotInSpaceException enise) { // Object not in space - unsuccessful update } Batch Update Batch Update
The GigaSpace.updateMultiple returns an array of objects which correspond to the input object array. The returned object element can be one of the following:
|
![]() |
GigaSpaces.com - Legal Notice - 3rd Party Licenses - Site Map - API Docs - Forum - Downloads - Blog - White Papers - Contact Tech Writing - Gen. by Atlassian Confluence |