You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2015/04/17 18:15:14 UTC

[1/2] zest-sandbox git commit: Starting on a GigaSpaces implementation.

Repository: zest-sandbox
Updated Branches:
  refs/heads/develop [created] c5da67d3b
  refs/heads/gigaspaces_impl [created] 1b2bbf649
  refs/heads/master [created] 56c3a5718


Starting on a GigaSpaces implementation.


Project: http://git-wip-us.apache.org/repos/asf/zest-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-sandbox/commit/1b2bbf64
Tree: http://git-wip-us.apache.org/repos/asf/zest-sandbox/tree/1b2bbf64
Diff: http://git-wip-us.apache.org/repos/asf/zest-sandbox/diff/1b2bbf64

Branch: refs/heads/gigaspaces_impl
Commit: 1b2bbf649a7935d297e367967ad541ca0a8cb921
Parents: b74044f
Author: Niclas Hedhman <ni...@hedhman.org>
Authored: Sat Dec 18 14:49:06 2010 +0800
Committer: Niclas Hedhman <ni...@hedhman.org>
Committed: Sat Dec 18 14:49:06 2010 +0800

----------------------------------------------------------------------
 extensions/entitystore-gigaspaces/pom.xml       |  53 +++++
 .../entitystore/gigaspaces/DatabaseExport.java  |  34 ++++
 .../entitystore/gigaspaces/DatabaseImport.java  |  34 ++++
 .../gigaspaces/GigaSpacesConfiguration.java     |  27 +++
 .../GigaSpacesEntityStoreAssembler.java         |  46 +++++
 .../GigaSpacesEntityStoreService.java           |  39 ++++
 .../gigaspaces/GigaspacesEntityStoreMixin.java  | 204 +++++++++++++++++++
 extensions/pom.xml                              |   1 +
 8 files changed, 438 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/1b2bbf64/extensions/entitystore-gigaspaces/pom.xml
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/pom.xml b/extensions/entitystore-gigaspaces/pom.xml
new file mode 100644
index 0000000..1a3ea8f
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+      <groupId>org.qi4j</groupId>
+      <artifactId>qi4j-extensions</artifactId>
+      <version>1.3-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.qi4j.extension</groupId>
+    <artifactId>entitystore-gigaspaces</artifactId>
+    <version>1.3-SNAPSHOT</version>
+
+    <dependencies>
+        <dependency>
+          <groupId>org.qi4j.core</groupId>
+          <artifactId>qi4j-core-api</artifactId>
+        </dependency>
+      <dependency>
+        <groupId>org.qi4j.core</groupId>
+        <artifactId>qi4j-core-spi</artifactId>
+      </dependency>
+      <dependency>
+        <groupId>org.qi4j.core</groupId>
+        <artifactId>qi4j-core-bootstrap</artifactId>
+      </dependency>
+      <dependency>
+        <groupId>org.qi4j.library</groupId>
+        <artifactId>qi4j-lib-locking</artifactId>
+      </dependency>
+      <dependency>
+        <groupId>com.gigaspaces</groupId>
+        <artifactId>gs-runtime</artifactId>
+        <version>7.1.2</version>
+      </dependency>
+
+      <!-- For Tests -->
+      <dependency>
+        <groupId>org.qi4j.core</groupId>
+        <artifactId>qi4j-core-testsupport</artifactId>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.qi4j.core</groupId>
+        <artifactId>qi4j-core-runtime</artifactId>
+        <scope>test</scope>
+      </dependency>
+    </dependencies>
+
+    
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/1b2bbf64/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/DatabaseExport.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/DatabaseExport.java b/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/DatabaseExport.java
new file mode 100644
index 0000000..bddb682
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/DatabaseExport.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2009 Niclas Hedhman.
+ *
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.qi4j.entitystore.gigaspaces;
+
+import java.io.IOException;
+import java.io.Writer;
+
+public interface DatabaseExport
+{
+    /**
+     * Export data to the writer, with one line per object, in JSON format.
+     *
+     * @param out the destination to write the data to.
+     * @throws java.io.IOException if problems in the underlying stream.
+     */
+    void exportTo( Writer out )
+        throws IOException;
+}

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/1b2bbf64/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/DatabaseImport.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/DatabaseImport.java b/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/DatabaseImport.java
new file mode 100644
index 0000000..39ced1d
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/DatabaseImport.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2009 Niclas Hedhman.
+ *
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.qi4j.entitystore.gigaspaces;
+
+import java.io.IOException;
+import java.io.Reader;
+
+public interface DatabaseImport
+{
+    /**
+     * Import data from the Reader, with one line per object, in JSON format.
+     *
+     * @param in The source of the data to be imported.
+     * @throws java.io.IOException if problems in the underlying stream.
+     */
+    void importFrom( Reader in )
+        throws IOException;
+}

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/1b2bbf64/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaSpacesConfiguration.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaSpacesConfiguration.java b/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaSpacesConfiguration.java
new file mode 100644
index 0000000..cff7695
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaSpacesConfiguration.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2009 Niclas Hedhman.
+ *
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.qi4j.entitystore.gigaspaces;
+
+import org.qi4j.api.configuration.ConfigurationComposite;
+import org.qi4j.api.property.Property;
+
+public interface GigaSpacesConfiguration
+    extends ConfigurationComposite
+{
+    Property<String> cacheName();
+}

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/1b2bbf64/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaSpacesEntityStoreAssembler.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaSpacesEntityStoreAssembler.java b/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaSpacesEntityStoreAssembler.java
new file mode 100644
index 0000000..007c11c
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaSpacesEntityStoreAssembler.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2009 Niclas Hedhman.
+ *
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.qi4j.entitystore.gigaspaces;
+
+import org.qi4j.api.common.Visibility;
+import org.qi4j.bootstrap.Assembler;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.entitystore.memory.MemoryEntityStoreService;
+import org.qi4j.spi.uuid.UuidIdentityGeneratorService;
+
+public class GigaSpacesEntityStoreAssembler
+    implements Assembler
+{
+    private String configurationModule;
+
+    public GigaSpacesEntityStoreAssembler( String configurationModule )
+    {
+        this.configurationModule = configurationModule;
+    }
+
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        module.addServices( GigaSpacesEntityStoreService.class, UuidIdentityGeneratorService.class );
+        ModuleAssembly config = module.layerAssembly().moduleAssembly( configurationModule );
+        config.addEntities( GigaSpacesConfiguration.class ).visibleIn( Visibility.layer );
+        config.addServices( MemoryEntityStoreService.class );
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/1b2bbf64/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaSpacesEntityStoreService.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaSpacesEntityStoreService.java b/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaSpacesEntityStoreService.java
new file mode 100644
index 0000000..a35f487
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaSpacesEntityStoreService.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2009 Niclas Hedhman.
+ *
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.qi4j.entitystore.gigaspaces;
+
+import org.qi4j.api.concern.Concerns;
+import org.qi4j.api.configuration.Configuration;
+import org.qi4j.api.mixin.Mixins;
+import org.qi4j.api.service.Activatable;
+import org.qi4j.api.service.ServiceComposite;
+import org.qi4j.entitystore.map.MapEntityStoreMixin;
+import org.qi4j.library.locking.LockingAbstractComposite;
+import org.qi4j.spi.entitystore.ConcurrentModificationCheckConcern;
+import org.qi4j.spi.entitystore.EntityStateVersions;
+import org.qi4j.spi.entitystore.EntityStore;
+import org.qi4j.spi.entitystore.StateChangeNotificationConcern;
+
+@Concerns( { StateChangeNotificationConcern.class, ConcurrentModificationCheckConcern.class } )
+@Mixins( { MapEntityStoreMixin.class, GigaspacesEntityStoreMixin.class } )
+public interface GigaSpacesEntityStoreService
+    extends EntityStore, EntityStateVersions, DatabaseExport, DatabaseImport, ServiceComposite, Activatable, LockingAbstractComposite, Configuration
+{
+}
+

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/1b2bbf64/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaspacesEntityStoreMixin.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaspacesEntityStoreMixin.java b/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaspacesEntityStoreMixin.java
new file mode 100644
index 0000000..472817a
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/src/main/java/org/qi4j/entitystore/gigaspaces/GigaspacesEntityStoreMixin.java
@@ -0,0 +1,204 @@
+/*
+ * Copyright 2009 Niclas Hedhman.
+ *
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.qi4j.entitystore.gigaspaces;
+
+import com.tangosol.net.CacheFactory;
+import com.tangosol.net.NamedCache;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+import java.io.Writer;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.locks.ReadWriteLock;
+import org.qi4j.api.configuration.Configuration;
+import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.injection.scope.This;
+import org.qi4j.api.injection.scope.Uses;
+import org.qi4j.api.service.Activatable;
+import org.qi4j.entitystore.map.MapEntityStore;
+import org.qi4j.spi.entity.EntityType;
+import org.qi4j.spi.entitystore.EntityNotFoundException;
+import org.qi4j.spi.entitystore.EntityStoreException;
+import org.qi4j.spi.service.ServiceDescriptor;
+
+public class GigaspacesEntityStoreMixin
+    implements Activatable, MapEntityStore, DatabaseExport, DatabaseImport
+{
+    @This
+    private ReadWriteLock lock;
+
+    @This
+    private Configuration<GigaSpacesConfiguration> config;
+
+    @Uses
+    private ServiceDescriptor descriptor;
+
+    private NamedCache cache;
+
+    // Activatable implementation
+    public void activate()
+        throws Exception
+    {
+        String cacheName = config.configuration().cacheName().get();
+        cache = CacheFactory.getCache( cacheName );
+    }
+
+    public void passivate()
+        throws Exception
+    {
+        cache.destroy();
+    }
+
+    public Reader get( EntityReference entityReference )
+        throws EntityStoreException
+    {
+        byte[] data = (byte[]) cache.get( entityReference.identity() );
+
+        if( data == null )
+        {
+            throw new EntityNotFoundException( entityReference );
+        }
+        try
+        {
+            return new StringReader( new String( data, "UTF-8" ) );
+        }
+        catch( UnsupportedEncodingException e )
+        {
+            // Can not happen.
+            throw new InternalError();
+        }
+    }
+
+    public void applyChanges( MapChanges changes )
+        throws IOException
+    {
+        try
+        {
+            changes.visitMap( new MapChanger()
+            {
+                public Writer newEntity( final EntityReference ref, EntityType entityType )
+                    throws IOException
+                {
+                    return new StringWriter( 1000 )
+                    {
+                        @Override
+                        public void close()
+                            throws IOException
+                        {
+                            super.close();
+
+                            byte[] stateArray = toString().getBytes( "UTF-8" );
+                            cache.put( ref.identity(), stateArray );
+                        }
+                    };
+                }
+
+                public Writer updateEntity( final EntityReference ref, EntityType entityType )
+                    throws IOException
+                {
+                    return new StringWriter( 1000 )
+                    {
+                        @Override
+                        public void close()
+                            throws IOException
+                        {
+                            super.close();
+                            byte[] stateArray = toString().getBytes( "UTF-8" );
+                            cache.put( ref.identity(), stateArray );
+                        }
+                    };
+                }
+
+                public void removeEntity( EntityReference ref, EntityType entityType )
+                    throws EntityNotFoundException
+                {
+                    cache.remove( ref.identity() );
+                }
+            } );
+        }
+        catch( Exception e )
+        {
+            if( e instanceof IOException )
+            {
+                throw (IOException) e;
+            }
+            else if( e instanceof EntityStoreException )
+            {
+                throw (EntityStoreException) e;
+            }
+            else
+            {
+                IOException exception = new IOException();
+                exception.initCause( e );
+                throw exception;
+            }
+        }
+    }
+
+    public void visitMap( MapEntityStoreVisitor visitor )
+    {
+        Iterator<Map.Entry<String, byte[]>> list = cache.entrySet().iterator();
+        while( list.hasNext() )
+        {
+            Map.Entry<String, byte[]> entry = list.next();
+            String id = entry.getKey();
+            byte[] data = entry.getValue();
+            try
+            {
+                visitor.visitEntity( new StringReader( new String( data, "UTF-8" ) ) );
+            }
+            catch( UnsupportedEncodingException e )
+            {
+                // Can not happen!
+            }
+        }
+    }
+
+    public void exportTo( Writer out )
+        throws IOException
+    {
+        Iterator<Map.Entry<String, byte[]>> list = cache.entrySet().iterator();
+        while( list.hasNext() )
+        {
+            Map.Entry<String, byte[]> entry = list.next();
+            byte[] data = entry.getValue();
+            String value = new String( data, "UTF-8" );
+            out.write( value );
+            out.write( '\n' );
+        }
+    }
+
+    public void importFrom( Reader in )
+        throws IOException
+    {
+        BufferedReader reader = new BufferedReader( in );
+        String object;
+        while( ( object = reader.readLine() ) != null )
+        {
+            String id = object.substring( "{\"identity\":\"".length() );
+            id = id.substring( 0, id.indexOf( '"' ) );
+            byte[] stateArray = object.getBytes( "UTF-8" );
+            cache.put( id, stateArray );
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/1b2bbf64/extensions/pom.xml
----------------------------------------------------------------------
diff --git a/extensions/pom.xml b/extensions/pom.xml
index c808f39..852552d 100644
--- a/extensions/pom.xml
+++ b/extensions/pom.xml
@@ -13,6 +13,7 @@
 
   <modules>
     <!--module>entitystore-coherence</module-->
+    <module>entitystore-gigaspaces</module>
     <module>entitystore-jndi</module>
     <module>entitystore-javaspaces</module>
     <module>entitystore-jgroups</module>


[2/2] zest-sandbox git commit: Gigaspaces entitystore was laying around on my disk from somewhere. committing it, to not loose it, but it is probably for pre-1.0

Posted by ni...@apache.org.
Gigaspaces entitystore was laying around on my disk from somewhere. committing it, to not loose it, but it is probably for pre-1.0


Project: http://git-wip-us.apache.org/repos/asf/zest-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-sandbox/commit/c5da67d3
Tree: http://git-wip-us.apache.org/repos/asf/zest-sandbox/tree/c5da67d3
Diff: http://git-wip-us.apache.org/repos/asf/zest-sandbox/diff/c5da67d3

Branch: refs/heads/develop
Commit: c5da67d3b7cb7bc87fb06dd4f423444d7db68f50
Parents: b74044f
Author: Niclas Hedhman <ni...@hedhman.org>
Authored: Sat Apr 18 00:11:15 2015 +0800
Committer: Niclas Hedhman <ni...@hedhman.org>
Committed: Sat Apr 18 00:11:15 2015 +0800

----------------------------------------------------------------------
 .../qi4j-entitystore-gs-sample/common/pom.xml   |  25 ++++
 .../entitystore/gigaspaces/common/Data.java     | 122 +++++++++++++++++++
 .../feeder/Feeder.launch                        |  13 ++
 .../qi4j-entitystore-gs-sample/feeder/pom.xml   |  50 ++++++++
 .../feeder/src/main/assembly/assembly.xml       |  37 ++++++
 .../entitystore/gigaspaces/feeder/Feeder.java   | 101 +++++++++++++++
 .../src/main/resources/META-INF/spring/pu.xml   |  50 ++++++++
 .../qi4j-entitystore-gs-sample/pom.xml          |  69 +++++++++++
 .../processor/Processor.launch                  |  12 ++
 .../processor/Processor_2_1.launch              |  13 ++
 .../processor/pom.xml                           |  50 ++++++++
 .../processor/src/main/assembly/assembly.xml    |  37 ++++++
 .../gigaspaces/processor/Processor.java         |  44 +++++++
 .../src/main/resources/META-INF/spring/pu.xml   |  64 ++++++++++
 .../src/main/resources/META-INF/spring/sla.xml  |  20 +++
 .../ProcessorIntegrationTest-context.xml        |  58 +++++++++
 .../processor/ProcessorIntegrationTest.java     |  55 +++++++++
 .../gigaspaces/processor/ProcessorTest.java     |  25 ++++
 .../qi4j-entitystore-gs-sample/readme.txt       | 106 ++++++++++++++++
 19 files changed, 951 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/common/pom.xml
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/common/pom.xml b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/common/pom.xml
new file mode 100644
index 0000000..e32f4e5
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/common/pom.xml
@@ -0,0 +1,25 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.qi4j.entitystore.gigaspaces</groupId>
+    <artifactId>common</artifactId>
+    <packaging>jar</packaging>
+    <version>1.0-SNAPSHOT</version>
+    <name>common</name>
+    <parent>
+        <groupId>org.qi4j.entitystore.gigaspaces</groupId>
+        <artifactId>qi4j-entitystore-gs-sample</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <build>
+        <finalName>qi4j-entitystore-gs-sample-common</finalName>
+        <resources>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.xml</include>
+                </includes>
+            </resource>
+        </resources>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/common/src/main/java/org/qi4j/entitystore/gigaspaces/common/Data.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/common/src/main/java/org/qi4j/entitystore/gigaspaces/common/Data.java b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/common/src/main/java/org/qi4j/entitystore/gigaspaces/common/Data.java
new file mode 100644
index 0000000..b8b5838
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/common/src/main/java/org/qi4j/entitystore/gigaspaces/common/Data.java
@@ -0,0 +1,122 @@
+package org.qi4j.entitystore.gigaspaces.common;
+
+import com.gigaspaces.annotation.pojo.SpaceClass;
+import com.gigaspaces.annotation.pojo.SpaceId;
+import com.gigaspaces.annotation.pojo.SpaceRouting;
+
+
+/**
+ * A simple object used to work with the Space. Important properties include the id
+ * of the object, a type (used to perform routing when working with partitioned space),
+ * the raw data and processed data, and a boolean flag indicating if this Data object
+ * was processed or not.
+ */
+@SpaceClass
+public class Data {
+
+    private String id;
+
+    private Long type;
+
+    private String rawData;
+
+    private String data;
+
+    private Boolean processed;
+
+    /**
+     * Constructs a new Data object.
+     */
+    public Data() {
+
+    }
+
+    /**
+     * Constructs a new Data object with the given type
+     * and raw data.
+     */
+    public Data(long type, String rawData) {
+        this.type = type;
+        this.rawData = rawData;
+        this.processed = false;
+    }
+
+    /**
+     * The id of this object.
+     */
+    @SpaceId(autoGenerate=true)
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * The id of this object. Its value will be auto generated when it is written
+     * to the space.
+     */
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    /**
+     * The type of the data object. Used as the routing field when working with
+     * a partitioned space.
+     */
+    @SpaceRouting
+    public Long getType() {
+        return type;
+    }
+
+    /**
+     * The type of the data object. Used as the routing field when working with
+     * a partitioned space.
+     */
+    public void setType(Long type) {
+        this.type = type;
+    }
+
+    /**
+     * The raw data this object holds.
+     */
+    public String getRawData() {
+        return rawData;
+    }
+
+    /**
+     * The raw data this object holds.
+     */
+    public void setRawData(String rawData) {
+        this.rawData = rawData;
+    }
+
+    /**
+     * The processed data this object holds.
+     */
+    public String getData() {
+        return data;
+    }
+
+    /**
+     * The processed data this object holds.
+     */
+    public void setData(String data) {
+        this.data = data;
+    }
+
+    /**
+     * A boolean flag indicating if the data object was processed or not.
+     */
+    public Boolean isProcessed() {
+        return processed;
+    }
+
+    /**
+     * A boolean flag indicating if the data object was processed or not.
+     */
+    public void setProcessed(Boolean processed) {
+        this.processed = processed;
+    }
+
+    public String toString() {
+        return "id[" + id + "] type[" + type + "] rawData[" + rawData + "] data[" + data + "] processed[" + processed + "]";
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/Feeder.launch
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/Feeder.launch b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/Feeder.launch
new file mode 100644
index 0000000..75d453e
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/Feeder.launch
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+    <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+        <listEntry value="/feeder"/>
+    </listAttribute>
+    <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+        <listEntry value="4"/>
+    </listAttribute>
+    <booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+    <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE"
+                     value="org.openspaces.pu.container.integrated.IntegratedProcessingUnitContainer"/>
+    <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="feeder"/>
+</launchConfiguration>

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/pom.xml
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/pom.xml b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/pom.xml
new file mode 100644
index 0000000..7e6c90d
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/pom.xml
@@ -0,0 +1,50 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.qi4j.entitystore.gigaspaces</groupId>
+    <artifactId>feeder</artifactId>
+    <packaging>jar</packaging>
+    <version>1.0-SNAPSHOT</version>
+    <name>feeder</name>
+    <parent>
+        <groupId>org.qi4j.entitystore.gigaspaces</groupId>
+        <artifactId>qi4j-entitystore-gs-sample</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <properties>
+        <gsType>PU</gsType>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.qi4j.entitystore.gigaspaces</groupId>
+            <artifactId>common</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <finalName>qi4j-entitystore-gs-sample-feeder</finalName>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <appendAssemblyId>false</appendAssemblyId>
+                    <attach>false</attach>
+                    <ignoreDirFormatExtensions>true</ignoreDirFormatExtensions>
+                    <descriptors>
+                        <descriptor>src/main/assembly/assembly.xml</descriptor>
+                    </descriptors>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/src/main/assembly/assembly.xml
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/src/main/assembly/assembly.xml b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/src/main/assembly/assembly.xml
new file mode 100644
index 0000000..aac9f1f
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/src/main/assembly/assembly.xml
@@ -0,0 +1,37 @@
+<assembly>
+  <id>assemble-pu</id>
+  <formats>
+    <format>jar</format>
+    <format>dir</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <fileSets>
+    <fileSet>
+      <directory>target/classes</directory>
+      <lineEnding>keep</lineEnding>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>**/**</include>
+      </includes>
+    </fileSet>
+  </fileSets>
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <excludes>
+        <exclude>org.qi4j.entitystore.gigaspaces:common</exclude>
+      </excludes>
+    </dependencySet>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>true</useTransitiveDependencies>
+      <useTransitiveFiltering>true</useTransitiveFiltering>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>org.qi4j.entitystore.gigaspaces:common</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+</assembly>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/src/main/java/org/qi4j/entitystore/gigaspaces/feeder/Feeder.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/src/main/java/org/qi4j/entitystore/gigaspaces/feeder/Feeder.java b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/src/main/java/org/qi4j/entitystore/gigaspaces/feeder/Feeder.java
new file mode 100644
index 0000000..6622d96
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/src/main/java/org/qi4j/entitystore/gigaspaces/feeder/Feeder.java
@@ -0,0 +1,101 @@
+package org.qi4j.entitystore.gigaspaces.feeder;
+
+import org.qi4j.entitystore.gigaspaces.common.Data;
+
+import org.openspaces.core.GigaSpace;
+import org.openspaces.core.SpaceInterruptedException;
+import org.openspaces.core.context.GigaSpaceContext;
+
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.InitializingBean;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
+
+/**
+ * A feeder bean starts a scheduled task that writes a new Data objects to the space
+ * (in an unprocessed state).
+ *
+ * <p>The space is injected into this bean using OpenSpaces support for @GigaSpaceContext
+ * annotation.
+ *
+ * <p>The scheduling uses the java.util.concurrent Scheduled Executor Service. It
+ * is started and stopped based on Spring life cycle events.
+ *
+ * @author kimchy
+ */
+public class Feeder implements InitializingBean, DisposableBean {
+
+    private ScheduledExecutorService executorService;
+
+    private ScheduledFuture<?> sf;
+
+    private long numberOfTypes = 10;
+
+    private long defaultDelay = 1000;
+
+    private FeederTask feederTask;
+
+    @GigaSpaceContext
+    private GigaSpace gigaSpace;
+
+    /**
+     * Sets the number of types that will be used to set {@link org.openspaces.example.data.common.Data#setType(Long)}.
+     *
+     * <p>The type is used as the routing index for partitioned space. This will affect the distribution of Data
+     * objects over a partitioned space.
+     */
+    public void setNumberOfTypes(long numberOfTypes) {
+        this.numberOfTypes = numberOfTypes;
+    }
+
+    public void setDefaultDelay(long defaultDelay) {
+        this.defaultDelay = defaultDelay;
+    }
+
+    public void afterPropertiesSet() throws Exception {
+        System.out.println("--- STARTING FEEDER WITH CYCLE [" + defaultDelay + "]");
+        executorService = Executors.newScheduledThreadPool(1);
+        feederTask = new FeederTask();
+        sf = executorService.scheduleAtFixedRate(feederTask, defaultDelay, defaultDelay,
+                TimeUnit.MILLISECONDS);
+    }
+
+    public void destroy() throws Exception {
+        sf.cancel(false);
+        sf = null;
+        executorService.shutdown();
+    }
+    
+    public long getFeedCount() {
+        return feederTask.getCounter();
+    }
+
+    
+    public class FeederTask implements Runnable {
+
+        private long counter = 1;
+
+        public void run() {
+            try {
+                long time = System.currentTimeMillis();
+                Data data = new Data((counter++ % numberOfTypes), "FEEDER " + Long.toString(time));
+                gigaSpace.write(data);
+                System.out.println("--- FEEDER WROTE " + data);
+            } catch (SpaceInterruptedException e) {
+                // ignore, we are being shutdown
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        public long getCounter() {
+            return counter;
+        }
+    }
+
+    
+}

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/src/main/resources/META-INF/spring/pu.xml
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/src/main/resources/META-INF/spring/pu.xml b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/src/main/resources/META-INF/spring/pu.xml
new file mode 100644
index 0000000..3813bf3
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/feeder/src/main/resources/META-INF/spring/pu.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:os-core="http://www.openspaces.org/schema/core"
+       xmlns:os-events="http://www.openspaces.org/schema/events"
+       xmlns:os-remoting="http://www.openspaces.org/schema/remoting"
+       xmlns:os-sla="http://www.openspaces.org/schema/sla"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.openspaces.org/schema/core http://www.openspaces.org/schema/core/openspaces-core.xsd
+       http://www.openspaces.org/schema/events http://www.openspaces.org/schema/events/openspaces-events.xsd
+       http://www.openspaces.org/schema/remoting http://www.openspaces.org/schema/remoting/openspaces-remoting.xsd
+       http://www.openspaces.org/schema/sla http://www.openspaces.org/schema/sla/openspaces-sla.xsd">
+
+
+    <!--
+        Spring propery configurer which allows us to use system properties (such as user.name).
+    -->
+    <bean id="propertiesConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+        <property name="properties">
+            <props>
+                <prop key="numberOfTypes">100</prop>
+            </props>
+        </property>
+    </bean>
+
+    <!--
+        Enables the usage of @GigaSpaceContext annotation based injection.
+    -->
+    <os-core:giga-space-context/>
+
+    <!--
+        A bean representing a space (an IJSpace implementation).
+
+        Note, we perform a lookup on the space since we are working against a remote space.
+    -->
+    <os-core:space id="space" url="jini://*/*/space" />
+
+    <!--
+        OpenSpaces simplified space API built on top of IJSpace/JavaSpace.
+    -->
+    <os-core:giga-space id="gigaSpace" space="space"/>
+
+    <!--
+        The Data feeder bean, writing new Data objects to the space in a constant interval.
+    -->
+    <bean id="dataFeeder" class="org.qi4j.entitystore.gigaspaces.feeder.Feeder" depends-on="gigaSpace">
+        <property name="numberOfTypes" value="${numberOfTypes}" />
+    </bean>
+    
+</beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/pom.xml
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/pom.xml b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/pom.xml
new file mode 100644
index 0000000..0b0da1d
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/pom.xml
@@ -0,0 +1,69 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.qi4j.entitystore.gigaspaces</groupId>
+    <artifactId>qi4j-entitystore-gs-sample</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <name>qi4j-entitystore-gs-sample</name>
+    <packaging>pom</packaging>
+    <properties>
+        <gsVersion>7.1.2</gsVersion>
+	<springVersion>3.0.3.RELEASE</springVersion>
+    </properties>
+    <modules>
+        <module>common</module>
+        <module>processor</module>
+        <module>feeder</module>
+    </modules>
+    <dependencies>
+        <dependency>
+            <groupId>com.gigaspaces</groupId>
+            <artifactId>gs-openspaces</artifactId>
+            <version>${gsVersion}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.8.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>${springVersion}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <defaultGoal>package</defaultGoal>
+        <testResources>
+            <testResource>
+                <directory>src/test/java</directory>
+                <includes>
+                    <include>**/*.xml</include>
+                </includes>
+            </testResource>
+        </testResources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.5</source>
+                    <target>1.5</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>2.2-beta-2</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-openspaces-plugin</artifactId>
+                <version>${gsVersion}</version>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/Processor.launch
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/Processor.launch b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/Processor.launch
new file mode 100644
index 0000000..c659d29
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/Processor.launch
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/processor"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.openspaces.pu.container.integrated.IntegratedProcessingUnitContainer"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="processor"/>
+</launchConfiguration>

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/Processor_2_1.launch
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/Processor_2_1.launch b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/Processor_2_1.launch
new file mode 100644
index 0000000..074b360
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/Processor_2_1.launch
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/processor"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.openspaces.pu.container.integrated.IntegratedProcessingUnitContainer"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-cluster total_members=2,1"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="processor"/>
+</launchConfiguration>

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/pom.xml
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/pom.xml b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/pom.xml
new file mode 100644
index 0000000..7a2f223
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/pom.xml
@@ -0,0 +1,50 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.qi4j.entitystore.gigaspaces</groupId>
+    <artifactId>processor</artifactId>
+    <packaging>jar</packaging>
+    <version>1.0-SNAPSHOT</version>
+    <name>processor</name>
+    <parent>
+        <groupId>org.qi4j.entitystore.gigaspaces</groupId>
+        <artifactId>qi4j-entitystore-gs-sample</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <properties>
+        <gsType>PU</gsType>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.qi4j.entitystore.gigaspaces</groupId>
+            <artifactId>common</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <finalName>qi4j-entitystore-gs-sample-processor</finalName>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <appendAssemblyId>false</appendAssemblyId>
+                    <attach>false</attach>
+                    <ignoreDirFormatExtensions>true</ignoreDirFormatExtensions>
+                    <descriptors>
+                        <descriptor>src/main/assembly/assembly.xml</descriptor>
+                    </descriptors>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/assembly/assembly.xml
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/assembly/assembly.xml b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/assembly/assembly.xml
new file mode 100644
index 0000000..aac9f1f
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/assembly/assembly.xml
@@ -0,0 +1,37 @@
+<assembly>
+  <id>assemble-pu</id>
+  <formats>
+    <format>jar</format>
+    <format>dir</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <fileSets>
+    <fileSet>
+      <directory>target/classes</directory>
+      <lineEnding>keep</lineEnding>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>**/**</include>
+      </includes>
+    </fileSet>
+  </fileSets>
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <excludes>
+        <exclude>org.qi4j.entitystore.gigaspaces:common</exclude>
+      </excludes>
+    </dependencySet>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>true</useTransitiveDependencies>
+      <useTransitiveFiltering>true</useTransitiveFiltering>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>org.qi4j.entitystore.gigaspaces:common</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+</assembly>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/java/org/qi4j/entitystore/gigaspaces/processor/Processor.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/java/org/qi4j/entitystore/gigaspaces/processor/Processor.java b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/java/org/qi4j/entitystore/gigaspaces/processor/Processor.java
new file mode 100644
index 0000000..5ffdf7b
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/java/org/qi4j/entitystore/gigaspaces/processor/Processor.java
@@ -0,0 +1,44 @@
+package org.qi4j.entitystore.gigaspaces.processor;
+
+import org.qi4j.entitystore.gigaspaces.common.Data;
+
+import org.openspaces.events.adapter.SpaceDataEvent;
+
+
+/**
+ * The processor simulates work done no un-processed Data object. The processData
+ * accepts a Data object, simulate work by sleeping, and then sets the processed
+ * flag to true and returns the processed Data.
+ */
+public class Processor {
+
+    private long workDuration = 100;
+
+    /**
+     * Sets the simulated work duration (in milliseconds). Default to 100.
+     */
+    public void setWorkDuration(long workDuration) {
+        this.workDuration = workDuration;
+    }
+
+    /**
+     * Process the given Data object and returning the processed Data.
+     *
+     * Can be invoked using OpenSpaces Events when a matching event
+     * occurs.
+     */
+    @SpaceDataEvent
+    public Data processData(Data data) {
+        // sleep to simulate some work
+        try {
+            Thread.sleep(workDuration);
+        } catch (InterruptedException e) {
+            // do nothing
+        }
+        data.setProcessed(true);
+        data.setData("PROCESSED : " + data.getRawData());
+        System.out.println(" ------ PROCESSED : " + data);
+        return data;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/resources/META-INF/spring/pu.xml
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/resources/META-INF/spring/pu.xml b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/resources/META-INF/spring/pu.xml
new file mode 100644
index 0000000..d7e98cb
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/resources/META-INF/spring/pu.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:os-core="http://www.openspaces.org/schema/core"
+       xmlns:os-events="http://www.openspaces.org/schema/events"
+       xmlns:os-remoting="http://www.openspaces.org/schema/remoting"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.openspaces.org/schema/core http://www.openspaces.org/schema/core/openspaces-core.xsd
+       http://www.openspaces.org/schema/events http://www.openspaces.org/schema/events/openspaces-events.xsd
+       http://www.openspaces.org/schema/remoting http://www.openspaces.org/schema/remoting/openspaces-remoting.xsd">
+
+    <!--
+        Spring property configurer which allows us to use system properties (such as user.name).
+    -->
+    <bean id="propertiesConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
+
+    <!--
+        Enables the usage of @GigaSpaceContext annotation based injection.
+    -->
+    <os-core:giga-space-context/>
+ 
+    <!--
+        A bean representing a space (an IJSpace implementation).
+
+        Note, we do not specify here the cluster topology of the space. It is declated outside of
+        the processing unit or within the SLA bean.
+    -->
+    <os-core:space id="space" url="/./space" />
+ 
+    <!--
+        Defines a local Jini transaction manager.
+    -->
+    <os-core:local-tx-manager id="transactionManager" space="space"/>
+
+    <!--
+        OpenSpaces simplified space API built on top of IJSpace/JavaSpace.
+    -->
+    <os-core:giga-space id="gigaSpace" space="space" tx-manager="transactionManager"/>
+
+    <!--
+        The data processor bean
+    -->
+    <bean id="dataProcessor" class="org.qi4j.entitystore.gigaspaces.processor.Processor"/>
+
+    <!--
+        A polling event container that perfoms (by default) polling take operations against
+        the space using the provided template (in our case, and the non processed data objects).
+        Once a match is found, the data processor bean event listener is triggered using the
+        annotation adapter.
+    -->
+    <os-events:polling-container id="dataProcessorPollingEventContainer" giga-space="gigaSpace">
+        <os-events:tx-support tx-manager="transactionManager"/>
+        <os-core:template>
+            <bean class="org.qi4j.entitystore.gigaspaces.common.Data">
+                <property name="processed" value="false"/>
+            </bean>
+        </os-core:template>
+        <os-events:listener>
+            <os-events:annotation-adapter>
+                <os-events:delegate ref="dataProcessor"/>
+            </os-events:annotation-adapter>
+        </os-events:listener>
+    </os-events:polling-container>
+</beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/resources/META-INF/spring/sla.xml
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/resources/META-INF/spring/sla.xml b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/resources/META-INF/spring/sla.xml
new file mode 100644
index 0000000..83931d1
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/main/resources/META-INF/spring/sla.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:os-sla="http://www.openspaces.org/schema/sla"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.openspaces.org/schema/sla http://www.openspaces.org/schema/sla/openspaces-sla.xsd">
+
+    <!--
+        The SLA bean used when deploying this processing unit to the Service Grid.
+
+        The SLA uses a partitioned schema with primary and backup. It will create 2
+        partitions each with a single backup.
+
+        The SLA bean also mandates that a primary and a backup won't run under the same
+        GSC by setting the maxInstancesPerVM to 1.
+    -->
+    <os-sla:sla cluster-schema="partitioned-sync2backup" number-of-instances="2" number-of-backups="1"
+                max-instances-per-vm="1">
+    </os-sla:sla>
+</beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/test/java/org/qi4j/entitystore/gigaspaces/processor/ProcessorIntegrationTest-context.xml
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/test/java/org/qi4j/entitystore/gigaspaces/processor/ProcessorIntegrationTest-context.xml b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/test/java/org/qi4j/entitystore/gigaspaces/processor/ProcessorIntegrationTest-context.xml
new file mode 100644
index 0000000..15df896
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/test/java/org/qi4j/entitystore/gigaspaces/processor/ProcessorIntegrationTest-context.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:os-core="http://www.openspaces.org/schema/core"
+       xmlns:os-events="http://www.openspaces.org/schema/events"
+       xmlns:os-remoting="http://www.openspaces.org/schema/remoting"
+       xmlns:os-sla="http://www.openspaces.org/schema/sla"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.openspaces.org/schema/core http://www.openspaces.org/schema/core/openspaces-core.xsd
+       http://www.openspaces.org/schema/events http://www.openspaces.org/schema/events/openspaces-events.xsd
+       http://www.openspaces.org/schema/remoting http://www.openspaces.org/schema/remoting/openspaces-remoting.xsd
+       http://www.openspaces.org/schema/sla http://www.openspaces.org/schema/sla/openspaces-sla.xsd">
+
+    <!--
+        Spring property configurer which allows us to use system properties (such as user.name).
+    -->
+    <bean id="propertiesConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
+
+    <!--
+        A bean representing a space (an IJSpace implementation).
+    -->
+    <os-core:space id="space" url="/./processorSpace" lookup-groups="processor-integrartion-tests" />
+
+    <!--
+        Defines a local Jini transaction manager.
+    -->
+    <os-core:local-tx-manager id="transactionManager" space="space"/>
+
+    <!--
+        OpenSpaces simplified space API built on top of IJSpace/JavaSpace.
+    -->
+    <os-core:giga-space id="gigaSpace" space="space" tx-manager="transactionManager"/>
+
+    <!--
+        The data processor bean
+    -->
+    <bean id="dataProcessor" class="org.qi4j.entitystore.gigaspaces.processor.Processor"/>
+
+    <!--
+        A polling event container that perfoms (by default) polling take operations against
+        the space using the provided template (in our case, and the non processed data objects).
+        Once a match is found, the data processor bean event listener is triggered using the
+        annotation adapter.
+    -->
+    <os-events:polling-container id="dataProcessorPollingEventContainer" giga-space="gigaSpace">
+        <os-events:tx-support tx-manager="transactionManager"/>
+        <os-core:template>
+            <bean class="org.qi4j.entitystore.gigaspaces.common.Data">
+                <property name="processed" value="false"/>
+            </bean>
+        </os-core:template>
+        <os-events:listener>
+            <os-events:annotation-adapter>
+                <os-events:delegate ref="dataProcessor"/>
+            </os-events:annotation-adapter>
+        </os-events:listener>
+    </os-events:polling-container>
+</beans>

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/test/java/org/qi4j/entitystore/gigaspaces/processor/ProcessorIntegrationTest.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/test/java/org/qi4j/entitystore/gigaspaces/processor/ProcessorIntegrationTest.java b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/test/java/org/qi4j/entitystore/gigaspaces/processor/ProcessorIntegrationTest.java
new file mode 100644
index 0000000..ee9aabe
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/test/java/org/qi4j/entitystore/gigaspaces/processor/ProcessorIntegrationTest.java
@@ -0,0 +1,55 @@
+package org.qi4j.entitystore.gigaspaces.processor;
+
+import org.qi4j.entitystore.gigaspaces.common.Data;
+
+import org.junit.runner.RunWith;
+import org.junit.Before;
+import org.junit.After;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import org.openspaces.core.GigaSpace;
+
+
+/**
+ * Integration test for the Processor. Uses similar xml definition file (ProcessorIntegrationTest-context.xml)
+ * to the actual pu.xml. Writs an unprocessed Data to the Space, and verifies that it has been processed by
+ * taking a processed one from the space.
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration
+public class ProcessorIntegrationTest {
+
+    @Autowired
+    GigaSpace gigaSpace;
+
+    @Before
+    @After
+    public void clearSpace() {
+        gigaSpace.clear(null);
+    }
+
+    @Test
+    public void verifyProcessing() throws Exception {
+        // write the data to be processed to the Space
+        Data data = new Data(1, "test");
+        gigaSpace.write(data);
+
+        // create a template of the processed data (processed)
+        Data template = new Data();
+        template.setType(1l);
+        template.setProcessed(true);
+
+        // wait for the result
+        Data result = gigaSpace.take(template, 500);
+        // verify it
+        assertNotNull("No data object was processed", result);
+        assertEquals("Processed Flag is false, data was not processed", true, result.isProcessed());
+        assertEquals("Processed text mismatch", "PROCESSED : " + data.getRawData(), result.getData());
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/test/java/org/qi4j/entitystore/gigaspaces/processor/ProcessorTest.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/test/java/org/qi4j/entitystore/gigaspaces/processor/ProcessorTest.java b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/test/java/org/qi4j/entitystore/gigaspaces/processor/ProcessorTest.java
new file mode 100644
index 0000000..f815204
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/processor/src/test/java/org/qi4j/entitystore/gigaspaces/processor/ProcessorTest.java
@@ -0,0 +1,25 @@
+package org.qi4j.entitystore.gigaspaces.processor;
+
+import org.qi4j.entitystore.gigaspaces.common.Data;
+
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+
+/**
+ * A simple unit test that verifies the Processor processData method actually processes
+ * the Data object.
+ */
+public class ProcessorTest {
+
+    @Test
+    public void verifyProcessedFlag() {
+        Processor processor = new Processor();
+        Data data = new Data(1, "test");
+
+        Data result = processor.processData(data);
+        assertEquals("verify that the data object was processed", true, result.isProcessed());
+        assertEquals("verify the data was processed", "PROCESSED : " + data.getRawData(), result.getData());
+        assertEquals("verify the type was not changed", data.getType(), result.getType());
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-sandbox/blob/c5da67d3/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/readme.txt
----------------------------------------------------------------------
diff --git a/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/readme.txt b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/readme.txt
new file mode 100644
index 0000000..75b3019
--- /dev/null
+++ b/extensions/entitystore-gigaspaces/qi4j-entitystore-gs-sample/readme.txt
@@ -0,0 +1,106 @@
+Creates a basic SBA application with two processing units. The Feeder
+processing unit sends Data objects through the Space to a Processor.
+The Space and the Processor are collocated in the same processing unit.
+JVM: >= 5.
+
+GENERAL DESCRIPTION:
+--------------------
+
+  The project consists of three modules: common, processor and feeder. The common
+module includes all the shared resources and classes between both the processor
+and the feeder. In our case, the common module includes the "Data" class which
+is written and taken from the Space.
+
+  The processor module, which is a processing unit, starts up a Space and on top of
+it starts a polling container that performs a take from the Space of unprocessed Data
+entries. The take operation results in an "event" that will end up executing the 
+"Processor" class. The Processor "processes" the Data object (by setting its processed
+flag to true) and returns it. The return value is automatically written back to the Space.
+  The processor also comes with both a unit test and integration test that verifies its behavior.
+
+  The feeder module, which is also a processing unit, connects to a Space remotely and
+writes unprocessed Data objects to the Space (resulting in events firing up within
+the processor processing unit).
+
+BUILDING, PACKAGING, RUNNING, DEPLOYING
+---------------------------------------
+
+Quick list:
+
+* mvn compile: Compiles the project.
+* mvn os:run: Runs the project.
+* mvn test: Runs the tests in the project.
+* mvn package: Compiles and packages the project.
+* mvn os:run-standalone: Runs a packaged application (from the jars).
+* mvn os:deploy: Deploys the project onto the Service Grid.
+* mvn os:undeploy: Removes the project from the Service Grid.
+
+  In order to build the example, a simple "mvn compile" executed from the root of the 
+project will compile all the different modules.
+
+  Packaging the application can be done using "mvn package" (note, by default, it also
+runs the tests, in order to disable it, use -DskipTests). The packaging process jars up 
+the common module. The feeder and processor modules packaging process creates a 
+"processing unit structure" directory within the target directory called [app-name]-[module].
+It also creates a jar from the mentioned directory called [app-name]-[module].jar.
+
+  In order to simply run both the processor and the feeder (after compiling), "mvn os:run" can be used.
+This will run a single instance of the processor and a single instance of the feeder within
+the same JVM using the compilation level classpath (no need for packaging). 
+  A specific module can also be executed by itself, which in this case, executing more than 
+one instance of the processing unit can be done. For example, running the processor module with 
+a cluster topology of 2 partitions, each with one backup, the following command can be used:
+mvn os:run -Dmodule=processor -Dcluster="total_members=2,1".
+
+  In order to run a packaged processing unit, "mvn package os:run-standalone" can be used (if
+"mvn package" was already executed, it can be omitted). This operation will run the processing units
+using the packaged jar files. Running a specific module with a cluster topology can be executed using:
+mvn package os:run-standalone -Dmodule=processor -Dcluster="total_members=2,1".
+
+  Deploying the application requires starting up a GSM and at least 2 GSCs (scripts located under
+the bin directory within the GigaSpaces installation). Once started, running "mvn package os:deploy"
+will deploy the two processing units. 
+  When deploying, the SLA elements within each processing unit descriptor (pu.xml) are taken into 
+account. This means that by default when deploying the application, 2 partitions, each with 
+one backup will be created for the processor, and a single instance of the feeder will be created.
+  A special note regarding groups and deployment: If the GSM and GSCs were started under a specific 
+group, the -Dgroups=[group-name] will need to be used in the deploy command.
+
+WORKING WITH ECLIPSE
+--------------------
+
+  In order to generate eclipse project the following command need to be executed from the root of
+the application: "mvn eclipse:eclipse". Pointing the Eclipse import existing project wizard
+to the application root directory will result in importing the three modules.
+If this is a fresh Eclipse installation, the M2_REPO needs be defined and pointed to the local 
+maven repository (which resides under USER_HOME/.m2/repository).
+
+  The application itself comes with built in launch targets allowing to run the processor and the 
+feeder using Eclipse run (or debug) targets.
+
+A NOTE OF CLUSTERING
+--------------------
+
+  This application focus on showing how SBA is used. The processor starts up an embedded Space and 
+works directly on it. When deploying 2 partitions of the processor, two embedded spaces (within the
+same cluster) will be created, with each polling container working only on the cluster member it 
+started in an in memory and transactional manner. This is the power of such an architecture, where
+the processing of the Data happens in a collocated manner with the Data. If we want to add High
+Availability to the processor, we can deploy 2 partitions, each with one backup (2,1). In this 
+case, the processor instances that ends up starting a cluster member Space which is the backup
+will not perform any processing since the polling container identifies the Space state and won't
+perform the take operation. If one of the processor primaries instances will fail, the backup
+instance will become primary (with an up to date data), and its polling container will start
+processing all the relevant Data. Note, when deploying on top of the Service Grid, the Service
+Grid will also identify that one instance failed, and will automatically start it over in another
+container (GSC).
+
+  The feeder works with a clustered view of the Space (the 2,1 cluster topology looking as one), and 
+simply writes unprocessed Data objects to the Space. The routing (@SpaceRouting) controls to which
+partition the unprocessed Data will be written and consequently which instance will process it.
+
+MAVEN PLUGIN WIKI PAGE
+---------------------------------
+
+  For more information about the Maven Plugin please refer to:
+http://www.gigaspaces.com/wiki/display/XAP71/Maven+Plugin
\ No newline at end of file