http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/HibernateJUnitTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/HibernateJUnitTest.java
 
b/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/HibernateJUnitTest.java
new file mode 100644
index 0000000..2566515
--- /dev/null
+++ 
b/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/HibernateJUnitTest.java
@@ -0,0 +1,401 @@
+/*=========================================================================
+ * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * one or more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+package com.gemstone.gemfire.modules;
+
+import com.gemstone.gemfire.cache.Region;
+import com.gemstone.gemfire.cache.Region.Entry;
+import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+import com.gemstone.gemfire.modules.Owner.Status;
+import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Configuration;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.logging.Level;
+
+import static org.junit.Assert.assertEquals;
+
+@Category(IntegrationTest.class)
+public class HibernateJUnitTest {
+
+  private Logger log = LoggerFactory.getLogger(getClass());
+
+  //private static final String jdbcURL = "jdbc:hsqldb:hsql://localhost/test";
+  private static final String jdbcURL = "jdbc:hsqldb:mem:test";
+
+  static File tmpDir;
+
+  static String gemfireLog;
+
+  @Before
+  public void setUp() throws Exception {
+    // Create a per-user scratch directory
+    tmpDir = new File(System.getProperty("java.io.tmpdir"),
+            "gemfire_modules-" + System.getProperty("user.name"));
+    tmpDir.mkdirs();
+    tmpDir.deleteOnExit();
+
+    gemfireLog = tmpDir.getPath() +
+            System.getProperty("file.separator") + "gemfire_modules.log";
+  }
+
+  public static SessionFactory getSessionFactory(Properties overrideProps) {
+    System.setProperty("gemfire.home", "GEMFIREHOME");
+    Configuration cfg = new Configuration();
+    cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
+    cfg.setProperty("hibernate.connection.driver_class",
+        "org.hsqldb.jdbcDriver");
+    // cfg.setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:test");
+    cfg.setProperty("hibernate.connection.url", jdbcURL);
+    cfg.setProperty("hibernate.connection.username", "sa");
+    cfg.setProperty("hibernate.connection.password", "");
+    cfg.setProperty("hibernate.connection.pool_size", "1");
+    cfg.setProperty("hibernate.connection.autocommit", "true");
+    cfg.setProperty("hibernate.hbm2ddl.auto", "update");
+
+    cfg.setProperty("hibernate.cache.region.factory_class",
+        "com.gemstone.gemfire.modules.hibernate.GemFireRegionFactory");
+    cfg.setProperty("hibernate.show_sql", "true");
+    cfg.setProperty("hibernate.cache.use_query_cache", "true");
+    //cfg.setProperty("gemfire.mcast-port", 
AvailablePort.getRandomAvailablePort(AvailablePort.JGROUPS)+"");
+    cfg.setProperty("gemfire.mcast-port", "0");
+    cfg.setProperty("gemfire.statistic-sampling-enabled", "true");
+    cfg.setProperty("gemfire.log-file", gemfireLog);
+    cfg.setProperty("gemfire.writable-working-dir", tmpDir.getPath());
+    //cfg.setProperty("gemfire.statistic-archive-file", 
"plugin-stats-file.gfs");
+    //cfg.setProperty("gemfire.default-client-region-attributes-id", 
"CACHING_PROXY");
+    //cfg.setProperty("gemfire.cache-topology", "client-server");
+    //cfg.setProperty("gemfire.locators", "localhost[5432]");
+    //cfg.setProperty("gemfire.log-level", "fine");
+    // cfg.setProperty("", "");
+    cfg.addClass(Person.class);
+    cfg.addClass(Event.class);
+    if (overrideProps != null) {
+      Iterator it = overrideProps.keySet().iterator();
+      while (it.hasNext()) {
+        String key = (String)it.next();
+        cfg.setProperty(key, overrideProps.getProperty(key));
+      }
+    }
+    return cfg.buildSessionFactory();
+  }
+
+  @Test
+  public void testpreload() {
+    log.info("SWAP:creating session factory In hibernateTestCase");
+
+    Session session = getSessionFactory(null).openSession();
+    log.info("SWAP:session opened");
+    session.beginTransaction();
+    Event theEvent = new Event();
+    theEvent.setTitle("title");
+    theEvent.setDate(new Date());
+    session.save(theEvent);
+    Long id = theEvent.getId();
+    session.getTransaction().commit();
+    session.beginTransaction();
+    Event ev = (Event)session.get(Event.class, id);
+    log.info("SWAP:load complete: " + ev);
+    session.getTransaction().commit();
+  }
+
+  @Test
+  public void testNothing() throws Exception {
+    java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.ALL);
+    log.info("SWAP:creating session factory In hibernateTestCase");
+
+    Session session = getSessionFactory(null).openSession();
+    log.info("SWAP:session opened");
+    // session.setFlushMode(FlushMode.COMMIT);
+    session.beginTransaction();
+    Event theEvent = new Event();
+    theEvent.setTitle("title");
+    theEvent.setDate(new Date());
+    //session.save(theEvent);
+    session.persist(theEvent);
+    Long id = theEvent.getId();
+    session.getTransaction().commit();
+    log.info("commit complete...doing load");
+    session.beginTransaction();
+    Event ev = (Event)session.load(Event.class, id);
+    log.info("load complete: " + ev);
+    log.trace("SWAP");
+    ev.setTitle("newTitle");
+    session.save(ev);
+    log.info("commit");
+    session.getTransaction().commit();
+    log.info("save complete " + ev);
+
+    session.beginTransaction();
+    ev = (Event)session.load(Event.class, id);
+    log.info("load complete: " + ev);
+    ev.setTitle("newTitle2");
+    session.save(ev);
+    log.info("commit");
+    session.getTransaction().commit();
+    log.info("save complete " + ev);
+
+    ev = (Event)session.load(Event.class, id);
+    log.info("second load " + ev);
+    session.flush();
+    session.close();
+    log.info("flush complete session:" + session);
+
+    for (int i=0; i<5; i++) {
+      session = getSessionFactory(null).openSession();
+      log.info("doing get "+id);
+      // ev = (Event) session.load(Event.class, id);
+      ev = (Event)session.get(Event.class, id);
+      log.info("third load " + ev);
+    }
+    printExistingDB();
+    Iterator it = GemFireCacheImpl.getInstance().rootRegions().iterator();
+    while (it.hasNext()) {
+      Region r = (Region)it.next();
+      System.out.println("Region:"+r);
+      Iterator enIt = r.entrySet().iterator();
+      while (enIt.hasNext()) {
+        Region.Entry re = (Entry)enIt.next();
+        System.out.println("key:"+re.getKey()+" value:"+re.getValue());
+      }
+    }
+    Thread.sleep(3000);
+     //System.in.read();
+    // try direct data
+
+  }
+
+  public void _testInvalidation() {
+    Session s = getSessionFactory(null).openSession();
+  }
+
+  static Long personId;
+
+  @Test
+  public void testRelationship() throws Exception {
+    //java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.ALL);
+    Properties props = new Properties();
+    props.put("gemfire.topology", "client-server");
+    Session session = getSessionFactory(null).openSession();
+    session.beginTransaction();
+
+    Person thePerson = new Person();
+    thePerson.setFirstname("foo");
+    thePerson.setLastname("bar");
+    thePerson.setAge(1);
+    thePerson.setId(99L);
+    session.save(thePerson);
+    personId = thePerson.getId();
+    log.info("person saved");
+    
+    Event theEvent = new Event();
+    theEvent.setTitle("title");
+    theEvent.setDate(new Date());
+    session.save(theEvent);
+    Long eventId = theEvent.getId();
+    log.info("event saved");
+    
+    Event theEvent2 = new Event();
+    theEvent2.setTitle("title2");
+    theEvent2.setDate(new Date());
+    session.save(theEvent2);
+    Long eventId2 = theEvent2.getId();
+    log.info("event2 saved");
+    session.getTransaction().commit();
+    
+    session.beginTransaction();
+    Person aPerson = (Person) session.load(Person.class, personId);
+    Event anEvent = (Event) session.load(Event.class, eventId);
+    Event anEvent2 = (Event) session.load(Event.class, eventId2);
+    log.info("adding event to person");
+    aPerson.getE().add(anEvent);
+    aPerson.getE().add(anEvent2);
+    log.info("calling commit");
+
+    session.getTransaction().commit();
+    log.info("commit complete");
+    session.close();
+    log.info("opening new session");
+    session = getSessionFactory(null).openSession();
+    log.info("SWAP:loading person");
+    aPerson = (Person)session.load(Person.class, personId);
+    log.info("loading events");
+    Iterator<Event> e = aPerson.getE().iterator();
+    while (e.hasNext()) {
+      e.next();
+    }
+    session.close();
+    log.info("opening new session");
+    session = getSessionFactory(null).openSession();
+    log.info("SWAP:loading person");
+    aPerson = (Person)session.load(Person.class, personId);
+    log.info("loading events");
+    e = aPerson.getE().iterator();
+    while (e.hasNext()) {
+      e.next();
+    }
+
+    log.info(aPerson.getE()+"");
+    session.close();
+    //System.in.read();
+//    log.info("opening third session");
+//    session = getSessionFactory().openSession();
+//    log.info("loading person");
+//    aPerson = (Person)session.load(Person.class, personId);
+//    log.info("loading events");
+//    log.info(aPerson.getEvents()+"");
+  }
+  
+  public void _testQueryCache() throws Exception {
+    Session session = getSessionFactory(null).openSession();
+    Query q = session.createQuery("from Event");
+    q.setCacheable(true);
+    List l = q.list();
+    log.info("list:"+l);
+//    log.info("Sleeping for 10 seconds");
+//    Thread.sleep(10000);
+    l = q.list();
+    log.info("list2:"+l);
+    log.info("updating an event");
+    session.beginTransaction();
+    Event e = (Event)l.get(0);
+    e.setDate(new Date());
+    session.saveOrUpdate(e);
+    session.getTransaction().commit();
+    l = q.list();
+    log.info("list3:"+l);
+  }
+
+  @Test
+  public void testInsert() {
+    Session session = getSessionFactory(null).openSession();
+    Region r = 
GemFireCacheImpl.getExisting().getRegion(Person.class.getCanonicalName());
+    int initSize = r.size();
+    session.beginTransaction();
+    log.info("SWAP: Saving Person");
+    Person p = new Person();
+    p.setId(10L);
+    p.setFirstname("foo");
+    p.setLastname("bar");
+    session.saveOrUpdate("Person", p);
+    session.getTransaction().commit();
+    assertEquals(1, session.getStatistics().getEntityCount());
+    assertEquals(initSize+1, r.size());
+
+    session.beginTransaction();
+    p.setAge(1);
+    session.saveOrUpdate(p);
+    session.getTransaction().commit();
+    assertEquals(1, session.getStatistics().getEntityCount());
+  }
+
+  @Test
+  public void testNormalRegion() {
+    Properties props = new Properties();
+    props.setProperty("gemfire.default-region-attributes-id", "LOCAL");
+    Session session = getSessionFactory(props).openSession();
+    session.beginTransaction();
+    Event theEvent = new Event();
+    theEvent.setTitle("title");
+    theEvent.setDate(new Date());
+    session.save(theEvent);
+    Long id = theEvent.getId();
+    session.getTransaction().commit();
+    session.beginTransaction();
+    Event ev = (Event)session.load(Event.class, id);
+    ev.setTitle("newTitle");
+    session.save(ev);
+    session.getTransaction().commit();
+  }
+  
+  private void printExistingDB() throws SQLException {
+    try {
+      Class.forName("org.hsqldb.jdbc.JDBCDriver");
+    }
+    catch (Exception e) {
+      System.err.println("ERROR: failed to load HSQLDB JDBC driver.");
+      e.printStackTrace();
+      return;
+    }
+
+    Connection c = DriverManager.getConnection(jdbcURL, "SA", "");
+    log.info("issuing query...");
+    ResultSet rs = c.createStatement().executeQuery("select * from events");
+    int col = rs.getMetaData().getColumnCount();
+    while (rs.next()) {
+      StringBuilder b = new StringBuilder();
+      for (int i = 1; i <= col; i++) {
+        b.append(" col:" + i + ":" + rs.getString(i));
+      }
+      log.info("Query result:" + b.toString());
+    }
+  }
+
+  @Test
+  public void testEnum() {
+    AnnotationConfiguration cfg = new AnnotationConfiguration();
+    cfg.addAnnotatedClass(Owner.class);
+    cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
+    cfg.setProperty("hibernate.connection.driver_class",
+        "org.hsqldb.jdbcDriver");
+    cfg.setProperty("hibernate.connection.url", jdbcURL);
+    cfg.setProperty("hibernate.connection.username", "sa");
+    cfg.setProperty("hibernate.connection.password", "");
+    cfg.setProperty("hibernate.connection.pool_size", "1");
+    cfg.setProperty("hibernate.connection.autocommit", "true");
+    cfg.setProperty("hibernate.hbm2ddl.auto", "update");
+
+    cfg.setProperty("hibernate.cache.region.factory_class",
+        "com.gemstone.gemfire.modules.hibernate.GemFireRegionFactory");
+    cfg.setProperty("hibernate.show_sql", "true");
+    cfg.setProperty("hibernate.cache.use_query_cache", "true");
+    cfg.setProperty("gemfire.statistic-sampling-enabled", "true");
+    cfg.setProperty("gemfire.log-file", gemfireLog);
+    cfg.setProperty("gemfire.writable-working-dir", tmpDir.getPath());
+    cfg.setProperty("gemfire.mcast-port", "0");
+    //cfg.setProperty("gemfire.cache-topology", "client-server");
+
+    SessionFactory sf = cfg.buildSessionFactory();
+    Session session = sf.openSession();
+    session.beginTransaction();
+    Owner o = new Owner();
+    o.setAddress("addr");
+    o.setCity("pdx");
+    o.setStatus(Status.PREMIUM);
+    session.save(o);
+    long id = o.getId();
+    log.info("testEnum:commiting tx");
+    session.getTransaction().commit();
+    session.close();
+    
+    session = sf.openSession();
+    Owner o1 = (Owner) session.load(Owner.class, id);
+    log.info("loaded:"+o);
+    assertEquals(o.getAddress(), o1.getAddress());
+    assertEquals(o.getCity(), o1.getCity());
+    assertEquals(o.getStatus(), o1.getStatus());
+    o1.setAddress("address2");
+    session.save(o1);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/Owner.java
----------------------------------------------------------------------
diff --git 
a/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/Owner.java
 
b/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/Owner.java
new file mode 100644
index 0000000..3701711
--- /dev/null
+++ 
b/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/Owner.java
@@ -0,0 +1,177 @@
+/*=========================================================================
+ * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * one or more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+package com.gemstone.gemfire.modules;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.persistence.Column;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.Entity;
+
+
+/**
+ * Simple JavaBean domain object representing an owner.
+ * 
+ * @author Ken Krebs
+ * @author Juergen Hoeller
+ * @author Sam Brannen
+ */
[email protected]
+@Entity
+public class Owner {
+       private static final long serialVersionUID = 4315791692556052565L;
+
+       @Column(name="address")
+       private String address;
+
+       private String city;
+
+       private String telephone;
+
+//     private Set<Pet> pets;
+       @Id
+       @GeneratedValue
+       private Long id;
+       
+       private long versionNum = -1;
+
+       public enum Status {
+               NORMAL, PREMIUM
+       };
+
+       @Enumerated
+       private Status status = Status.NORMAL;
+
+         private void setId(Long id) {
+           this.id = id;
+         }
+
+         public Long getId() {
+           return id;
+         }
+         
+       public String getAddress() {
+               return this.address;
+       }
+
+       public void setAddress(String address) {
+               this.address = address;
+       }
+
+       public String getCity() {
+               return this.city;
+       }
+
+       public void setCity(String city) {
+               this.city = city;
+       }
+
+       public String getTelephone() {
+               return this.telephone;
+       }
+
+       public void setTelephone(String telephone) {
+               this.telephone = telephone;
+       }
+
+       public long getVersionNum() {
+               return versionNum;
+       }
+
+       public void setVersionNum(long versionNum) {
+               this.versionNum = versionNum;
+       }
+
+       public Status getStatus() {
+               return this.status;
+       }
+
+       public void setStatus(Status state) {
+               if (state != null) {
+                       this.status = state;
+               }
+       }
+
+//     protected void setPetsInternal(Set<Pet> pets) {
+//             this.pets = pets;
+//     }
+//
+//     protected Set<Pet> getPetsInternal() {
+//             if (this.pets == null) {
+//                     this.pets = new HashSet<Pet>();
+//             }
+//             return this.pets;
+//     }
+//
+//     public List<Pet> getPets() {
+//             List<Pet> sortedPets = new ArrayList<Pet>(getPetsInternal());
+//             PropertyComparator.sort(sortedPets, new 
MutableSortDefinition("name",
+//                             true, true));
+//             return Collections.unmodifiableList(sortedPets);
+//     }
+//
+//     public void addPet(Pet pet) {
+//             getPetsInternal().add(pet);
+//             pet.setOwner(this);
+//     }
+//
+//     /**
+//      * Return the Pet with the given name, or null if none found for this 
Owner.
+//      * 
+//      * @param name
+//      *            to test
+//      * @return true if pet name is already in use
+//      */
+//     public Pet getPet(String name) {
+//             return getPet(name, false);
+//     }
+//
+//     /**
+//      * Return the Pet with the given name, or null if none found for this 
Owner.
+//      * 
+//      * @param name
+//      *            to test
+//      * @return true if pet name is already in use
+//      */
+//     public Pet getPet(String name, boolean ignoreNew) {
+//             name = name.toLowerCase();
+//             for (Pet pet : getPetsInternal()) {
+//                     if (!ignoreNew || !pet.isNew()) {
+//                             String compName = pet.getName();
+//                             compName = compName.toLowerCase();
+//                             if (compName.equals(name)) {
+//                                     return pet;
+//                             }
+//                     }
+//             }
+//             return null;
+//     }
+//
+//     @Override
+//     public String toString() {
+//             return new ToStringCreator(this).append("id", this.getId())
+//                             .append("new", this.isNew())
+//                             .append("lastName", this.getLastName())
+//                             .append("firstName", this.getFirstName())
+//                             .append("address", this.address).append("city", 
this.city)
+//                             .append("telephone", this.telephone)
+//                             .append("version", this.versionNum)
+//                             .append("status", this.status)
+//
+//                             .toString();
+//     }
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/Person.java
----------------------------------------------------------------------
diff --git 
a/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/Person.java
 
b/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/Person.java
new file mode 100644
index 0000000..14e6294
--- /dev/null
+++ 
b/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/Person.java
@@ -0,0 +1,63 @@
+/*=========================================================================
+ * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * one or more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+package com.gemstone.gemfire.modules;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class Person {
+  private Long id;
+  private int age;
+  private String firstname;
+  private String lastname;
+
+  private Set<Event> e = new HashSet<Event>();
+  
+  public Person() {}
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setAge(int age) {
+    this.age = age;
+  }
+
+  public int getAge() {
+    return age;
+  }
+
+  public void setFirstname(String firstname) {
+    this.firstname = firstname;
+  }
+
+  public String getFirstname() {
+    return firstname;
+  }
+
+  public void setLastname(String lastname) {
+    this.lastname = lastname;
+  }
+
+  public String getLastname() {
+    return lastname;
+  }
+
+  public void setE(Set<Event> events) {
+    this.e = events;
+  }
+
+  public Set<Event> getE() {
+    return e;
+  }
+  
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/SecondVMTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/SecondVMTest.java
 
b/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/SecondVMTest.java
new file mode 100644
index 0000000..1eb164b
--- /dev/null
+++ 
b/extensions/gemfire-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/SecondVMTest.java
@@ -0,0 +1,79 @@
+/*=========================================================================
+ * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * one or more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+package com.gemstone.gemfire.modules;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.logging.Level;
+
+import junit.framework.TestCase;
+
+import org.hibernate.Session;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.gemstone.gemfire.cache.Cache;
+import com.gemstone.gemfire.cache.CacheFactory;
+import com.gemstone.gemfire.cache.GemFireCache;
+import com.gemstone.gemfire.cache.Region;
+import com.gemstone.gemfire.cache.Region.Entry;
+import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+
+public class SecondVMTest extends TestCase {
+
+  private Logger log = LoggerFactory.getLogger(getClass());
+  
+  public void testNoop() {
+    
+  }
+  public void _testStartEmptyVM() throws IOException {
+    Properties gemfireProperties = new Properties();
+    gemfireProperties.setProperty("mcast-port", "5555");
+    gemfireProperties.setProperty("log-level", "fine");
+    Cache cache = new CacheFactory(gemfireProperties).create();
+    System.in.read();
+    Iterator it = cache.rootRegions().iterator();
+    while (it.hasNext()) {
+      Region r = (Region)it.next();
+      System.out.println("Region:"+r);
+      Iterator enIt = r.entrySet().iterator();
+      while (enIt.hasNext()) {
+        Region.Entry re = (Entry)enIt.next();
+        System.out.println("key:"+re.getKey()+" value:"+re.getValue());
+      }
+    }
+  }
+  
+  public void _testStartVM() throws Exception {
+    java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.ALL);
+    Session session = HibernateJUnitTest.getSessionFactory(null).openSession();
+    log.info("SWAP:new session open");
+    long id = 1;
+    log.info("loading new person:"+(id));
+    GemFireCache cache = GemFireCacheImpl.getInstance();
+    Iterator<Region<?, ?>> rSet = cache.rootRegions().iterator();
+    while (rSet.hasNext()) {
+      Region<?, ?> r = rSet.next();
+      log.info("SWAP:Region "+r);
+      Iterator<?> keySet = r.keySet().iterator();
+      while (keySet.hasNext()) {
+        log.info("key:"+keySet.next());
+      }
+    }
+    log.info("loading new person:"+(id));
+    session.beginTransaction();
+    Person p = (Person)session.load(Person.class, id);
+    p.setFirstname("SecondVMfirstname"+id);
+    log.info("loading events");
+    log.info(p.getE()+"");
+    session.getTransaction().commit();
+    //System.in.read();
+  }
+  
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/extensions/gemfire-modules-hibernate/src/test/resources/com/gemstone/gemfire/modules/Event.hbm.xml
----------------------------------------------------------------------
diff --git 
a/extensions/gemfire-modules-hibernate/src/test/resources/com/gemstone/gemfire/modules/Event.hbm.xml
 
b/extensions/gemfire-modules-hibernate/src/test/resources/com/gemstone/gemfire/modules/Event.hbm.xml
new file mode 100644
index 0000000..17faf29
--- /dev/null
+++ 
b/extensions/gemfire-modules-hibernate/src/test/resources/com/gemstone/gemfire/modules/Event.hbm.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd";>
+
+<hibernate-mapping package="com.gemstone.gemfire.modules">
+       <class name="Event" table="EVENTS">
+               <cache usage="read-write"/>
+               <id name="id" column="EVENT_ID">
+                       <generator class="native"/>
+               </id>
+               <version name="version"/>
+               <property name="date" type="timestamp" column="EVENT_DATE"/>
+        <property name="title"/>
+       </class>
+</hibernate-mapping>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/extensions/gemfire-modules-hibernate/src/test/resources/com/gemstone/gemfire/modules/Person.hbm.xml
----------------------------------------------------------------------
diff --git 
a/extensions/gemfire-modules-hibernate/src/test/resources/com/gemstone/gemfire/modules/Person.hbm.xml
 
b/extensions/gemfire-modules-hibernate/src/test/resources/com/gemstone/gemfire/modules/Person.hbm.xml
new file mode 100644
index 0000000..a4810d7
--- /dev/null
+++ 
b/extensions/gemfire-modules-hibernate/src/test/resources/com/gemstone/gemfire/modules/Person.hbm.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd";>
+
+<hibernate-mapping package="com.gemstone.gemfire.modules">
+    <class name="Person" table="PERSON">
+        <cache usage="read-write"/>
+        <id name="id" column="PERSON_ID">
+        </id>
+        <property name="age"/>
+        <property name="firstname"/>
+        <property name="lastname"/>
+        <set name="e" table="PERSON_EVENT">
+          <cache usage="read-write"/>
+          <key column="PERSON_ID"/>
+          <many-to-many column="EVENT_ID" class="Event"/>
+        </set>
+    </class>
+</hibernate-mapping>

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/extensions/gemfire-modules-hibernate/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git 
a/extensions/gemfire-modules-hibernate/src/test/resources/log4j.properties 
b/extensions/gemfire-modules-hibernate/src/test/resources/log4j.properties
new file mode 100644
index 0000000..c136990
--- /dev/null
+++ b/extensions/gemfire-modules-hibernate/src/test/resources/log4j.properties
@@ -0,0 +1,16 @@
+# For JBoss: Avoid to setup Log4J outside 
$JBOSS_HOME/server/default/deploy/log4j.xml!
+# For all other servers: Comment out the Log4J listener in web.xml to activate 
Log4J.
+#log4j.rootLogger=DEBUG, stdout, logfile
+log4j.rootLogger=DEBUG, stdout
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
+
+#log4j.appender.logfile=org.apache.log4j.RollingFileAppender
+#log4j.appender.logfile.MaxFileSize=512KB
+## Keep three backup files.
+#log4j.appender.logfile.MaxBackupIndex=3
+## Pattern to output: date priority [category] - message
+#log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
+#log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/extensions/gemfire-modules-hibernate/src/test/resources/tomcat/conf/tomcat-users.xml
----------------------------------------------------------------------
diff --git 
a/extensions/gemfire-modules-hibernate/src/test/resources/tomcat/conf/tomcat-users.xml
 
b/extensions/gemfire-modules-hibernate/src/test/resources/tomcat/conf/tomcat-users.xml
new file mode 100644
index 0000000..6c9f217
--- /dev/null
+++ 
b/extensions/gemfire-modules-hibernate/src/test/resources/tomcat/conf/tomcat-users.xml
@@ -0,0 +1,3 @@
+<?xml version='1.0' encoding='utf-8'?>
+<tomcat-users>
+</tomcat-users>

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/extensions/gemfire-modules-tomcat7/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-tomcat7/build.gradle 
b/extensions/gemfire-modules-tomcat7/build.gradle
index 34dc7ef..7750069 100644
--- a/extensions/gemfire-modules-tomcat7/build.gradle
+++ b/extensions/gemfire-modules-tomcat7/build.gradle
@@ -22,10 +22,16 @@ test  {
       into 'build/test/tomcat/'
     }
   }
+
+  testLogging {
+    events 'passed', 'skipped', 'failed'
+    exceptionFormat = 'full'
+  }
 }
 
 dependencies {
   compile(project(':extensions/gemfire-modules')) {
+    // Remove everything related to Tomcat 6.x
     exclude group: 'org.apache.tomcat'
   }
 
@@ -33,9 +39,19 @@ dependencies {
   compile 'org.apache.tomcat:tomcat-catalina:' + project.'tomcat7.version'
   compile 'org.apache.tomcat:tomcat-coyote:' + project.'tomcat7.version'
   compile 'org.apache.tomcat:tomcat-util:' + project.'tomcat7.version'
+  compile 'org.apache.tomcat:tomcat-juli:' + project.'tomcat7.version'
 
   testCompile 'org.httpunit:httpunit:' + project.'httpunit.version'
+  testRuntime 'javax.servlet:javax.servlet-api:3.1.0'
+  testRuntime 'javax.annotation:jsr250-api:1.0'
+  testRuntime 'javax.ejb:ejb-api:3.0'
+  testRuntime 'javax.persistence:persistence-api:1.0.2'
 
-  provided project(path: ':extensions/gemfire-modules', configuration: 
'testOutput')
+  provided(project(path: ':extensions/gemfire-modules', configuration: 
'testOutput')) {
+    // Remove everything related to Tomcat 6.x
+    exclude group: 'org.apache.tomcat', module: 'catalina'
+    exclude group: 'org.apache.tomcat', module: 'catalina-ha'
+    exclude group: 'org.apache.tomcat', module: 'juli'
+  }
   provided project(path: ':gemfire-junit', configuration: 'testOutput')
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/extensions/gemfire-modules/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules/build.gradle 
b/extensions/gemfire-modules/build.gradle
index 7e6a4bd..6a44cff 100644
--- a/extensions/gemfire-modules/build.gradle
+++ b/extensions/gemfire-modules/build.gradle
@@ -22,6 +22,11 @@ test  {
       into 'build/test/tomcat/'
     }
   }
+
+  testLogging {
+    events 'passed', 'skipped', 'failed'
+    exceptionFormat = 'full'
+  }
 }
 
 dependencies {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/extensions/gemfire-modules/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsBase.java
----------------------------------------------------------------------
diff --git 
a/extensions/gemfire-modules/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsBase.java
 
b/extensions/gemfire-modules/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsBase.java
index 57783f3..4b7ab87 100644
--- 
a/extensions/gemfire-modules/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsBase.java
+++ 
b/extensions/gemfire-modules/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsBase.java
@@ -483,7 +483,7 @@ public abstract class TestSessionsBase {
     Long lastAccess = (Long) session.getAttribute("lastAccessTime");
 
     assertTrue(
-        "Last access time not set correctly: " + lastAccess.longValue() + " 
not < " + session.getLastAccessedTime(),
-        lastAccess.longValue() < session.getLastAccessedTime());
+        "Last access time not set correctly: " + lastAccess.longValue() + " 
not <= " + session.getLastAccessedTime(),
+        lastAccess.longValue() <= session.getLastAccessedTime());
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/modules/gemfire-modules-hibernate/build.gradle
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-hibernate/build.gradle 
b/modules/gemfire-modules-hibernate/build.gradle
deleted file mode 100644
index 6cd120a..0000000
--- a/modules/gemfire-modules-hibernate/build.gradle
+++ /dev/null
@@ -1,18 +0,0 @@
-test {
-  include '**/HibernateTestCase.class'
-  include '**/SecondVMTest.class'
-
-  testLogging {
-    exceptionFormat = 'full'
-  }
-}
-
-dependencies {
-  compile project(':gemfire-modules')
-  compile 'org.hibernate:hibernate-core:3.5.0-Final'
-  compile 'org.hibernate:hibernate-annotations:3.5.5-Final'
-
-  testRuntime 'org.slf4j:slf4j-jdk14:1.7.7'
-  testRuntime 'org.hsqldb:hsqldb:2.0.0'
-  testRuntime 'org.javassist:javassist:3.13.0-GA'
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/modules/gemfire-modules-hibernate/pom.xml
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-hibernate/pom.xml 
b/modules/gemfire-modules-hibernate/pom.xml
deleted file mode 100644
index 19241b7..0000000
--- a/modules/gemfire-modules-hibernate/pom.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<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>
-
-  <groupId>com.gemstone</groupId>
-  <artifactId>gemfire-modules-hibernate</artifactId>
-  <version>${gemfire.modules.version}</version>
-  <packaging>jar</packaging>
-
-  <name>gemfire-modules-hibernate</name>
-  <url>http://maven.apache.org</url>
-
-  <parent>
-    <groupId>com.gemstone</groupId>
-    <artifactId>gemfire-modules-parent</artifactId>
-    <version>1.0-SNAPSHOT</version>
-  </parent>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-    </dependency>
-    <dependency>
-       <groupId>org.apache.tomcat</groupId>
-       <artifactId>catalina</artifactId>
-    </dependency>
-    <dependency>
-       <groupId>org.apache.tomcat</groupId>
-       <artifactId>catalina-ha</artifactId>
-        <version>${tomcat.version}</version>
-        <scope>provided</scope>
-    </dependency>
-    <dependency>
-       <groupId>com.gemstone.gemfire</groupId>
-       <artifactId>gemfire</artifactId>
-    </dependency>
-    <dependency>
-       <groupId>com.gemstone</groupId>
-       <artifactId>gemfire-modules</artifactId>
-        <scope>provided</scope>
-    </dependency>
-    <dependency>
-       <groupId>org.hibernate</groupId>
-       <artifactId>hibernate-core</artifactId>
-        <version>3.5.0-Final</version>
-        <scope>provided</scope>
-    </dependency>
-    <dependency>
-       <groupId>org.hsqldb</groupId>
-       <artifactId>hsqldb</artifactId>
-        <version>2.0.0</version>
-        <scope>test</scope>
-    </dependency>
-    <dependency>
-       <groupId>org.javassist</groupId>
-       <artifactId>javassist</artifactId>
-        <version>3.13.0-GA</version>
-        <scope>test</scope>
-    </dependency>
-    <dependency>
-       <groupId>org.slf4j</groupId>
-       <artifactId>slf4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-jdk14</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.tomcat</groupId>
-      <artifactId>coyote</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.httpunit</groupId>
-      <artifactId>httpunit</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>rhino</groupId>
-      <artifactId>js</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.hibernate</groupId>
-      <artifactId>hibernate-annotations</artifactId>
-      <version>3.5.5-Final</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-  
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <version>2.7.2</version>
-        <configuration>
-          <includes>
-            <include>**/HibernateTestCase.java</include>
-            <include>**/SecondVMTest.java</include>
-          </includes>
-          <runOrder>alphabetical</runOrder>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/EnumType.java
----------------------------------------------------------------------
diff --git 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/EnumType.java
 
b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/EnumType.java
deleted file mode 100644
index 86153ed..0000000
--- 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/EnumType.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.hibernate;
-
-import java.io.Serializable;
-
-import org.hibernate.HibernateException;
-
-/**
- * Extends {@link org.hibernate.type.EnumType} so as to
- * override methods responsible for cached representation
- * of enums in hibernate.
- * This class must be used in place of {@link org.hibernate.type.EnumType}
- * in client-server topology when the application classes are
- * not available on the server.
- * e.g. a typical enum configuration should look like this:
- * <pre>
- * &lt;property name="myEnum"&gt;
- *   &lt;type name="<b>com.gemstone.gemfire.modules.hibernate.EnumType</b>"&gt;
- *     &lt;param 
name="enumClass"&gt;com.mycompany.MyEntity$MyEnum&lt;/param&gt;
- *     &lt;param name="type"&gt;12&lt;/param&gt;
- *   &lt;/type&gt;
- * &lt;/property&gt;
- * </pre>
- * @author sbawaska
- */
-public class EnumType extends org.hibernate.type.EnumType {
-
-  private static final long serialVersionUID = 3414902482639744676L;
-  
-  @Override
-  public Object assemble(Serializable cached, Object owner)
-      throws HibernateException {
-    String name = (String) cached;
-    Class<? extends Enum> clazz = returnedClass();
-    return Enum.valueOf(clazz, name);
-  }
-  
-  @Override
-  public Serializable disassemble(Object value) throws HibernateException {
-    return ((Enum)value).name();
-  }
-  
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireCache.java
----------------------------------------------------------------------
diff --git 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireCache.java
 
b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireCache.java
deleted file mode 100644
index 119e137..0000000
--- 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireCache.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.hibernate;
-
-import java.util.Map;
-
-import org.hibernate.cache.Cache;
-import org.hibernate.cache.CacheException;
-import org.hibernate.cache.Timestamper;
-
-import com.gemstone.gemfire.cache.EntryNotFoundException;
-import com.gemstone.gemfire.cache.Region;
-import com.gemstone.gemfire.cache.Scope;
-import com.gemstone.gemfire.distributed.DistributedLockService;
-import com.gemstone.gemfire.internal.cache.LocalRegion;
-
-public class GemFireCache implements Cache {
-  private Region region;
-
-  private boolean clientRegion = false;
-
-  private final DistributedLockService distributedLockService;
-
-  public GemFireCache(Region region, DistributedLockService lockService) {
-    this.region = region;
-    this.distributedLockService = lockService;
-    this.clientRegion = isClient(region);
-  }
-
-  private boolean isClient(Region region) {
-    return region.getAttributes().getPoolName() != null;
-  }
-
-  /**
-   * Clear the cache
-   */
-  public void clear() throws CacheException {
-    GemFireCacheProvider.getLogger().info("GemFireCache: clear called");
-    region.clear();
-  }
-
-  /**
-   * Clean up
-   */
-  public void destroy() throws CacheException {
-    GemFireCacheProvider.getLogger().info("GemFireCache: destroy called");
-    region.localDestroyRegion();
-  }
-
-  /**
-   * Get an item from the cache
-   * 
-   * @param key
-   * @return the cached object or <tt>null</tt>
-   * @throws CacheException
-   */
-  public Object get(Object key) throws CacheException {
-    GemFireCacheProvider.getLogger().debug(
-        "GemFireCache: get called for: " + key);
-    try {
-      Object value = region.get(key);
-      GemFireCacheProvider.getLogger().debug(
-          "GemFireCache: retrieved: " + key + "-->" + value);
-      return value;
-    }
-    catch (com.gemstone.gemfire.cache.CacheException e) {
-      throw new CacheException(e);
-    }
-  }
-
-  /**
-   * The count of entries currently contained in the regions in-memory store.
-   * 
-   * @return The count of entries in memory; -1 if unknown or unsupported.
-   */
-  public long getElementCountInMemory() {
-    return ((LocalRegion)region).entryCount();
-  }
-
-  /**
-   * The count of entries currently contained in the regions disk store.
-   * 
-   * @return The count of entries on disk; -1 if unknown or unsupported.
-   */
-  public long getElementCountOnDisk() {
-    return -1;
-  }
-
-  /**
-   * Get the name of the cache region
-   */
-  public String getRegionName() {
-    return region.getName();
-  }
-
-  /**
-   * The number of bytes is this cache region currently consuming in memory.
-   * 
-   * @return The number of bytes consumed by this region; -1 if unknown or
-   *         unsupported.
-   */
-  public long getSizeInMemory() {
-    return -1;
-  }
-
-  /**
-   * Return the lock timeout for this cache.
-   */
-  public int getTimeout() {
-    GemFireCacheProvider.getLogger().debug("GemFireCache: getTimeout");
-    return Timestamper.ONE_MS * 60000;
-  }
-
-  /**
-   * If this is a clustered cache, lock the item
-   */
-  public void lock(Object key) throws CacheException {
-    GemFireCacheProvider.getLogger().info(
-        "GemFireCache: lock called for: " + key);
-
-    if (!clientRegion) {
-      // If we're using GLOBAL scope, we don't have to worry about
-      // locking.
-      if (!Scope.GLOBAL.equals(region.getAttributes().getScope())) {
-        this.distributedLockService.lock(key, -1, -1);
-      }
-    }
-    else {
-      // We assume the server region is GLOBAL for now. Else, use command
-      // pattern to acquire lock on the server
-      GemFireCacheProvider.getLogger().info(
-          "GemFireCache: client region, ignoring lock : " + key);
-    }
-  }
-
-  /**
-   * Generate the next timestamp
-   */
-  public long nextTimestamp() {
-    GemFireCacheProvider.getLogger().debug("GemFireCache: nextTimestamp 
called");
-    // TODO : Need a counter, cache-wide
-    return Timestamper.next();
-  }
-
-  /**
-   * Add an item to the cache
-   * 
-   * @param key
-   * @param value
-   * @throws CacheException
-   */
-  public void put(Object key, Object value) throws CacheException {
-    GemFireCacheProvider.getLogger().debug(
-        "GemFireCache: put called for key: " + key + "value: " + value);
-    try {
-      region.put(key, value);
-      GemFireCacheProvider.getLogger().debug(
-          "GemFireCache: put " + key + "-->" + value);
-    }
-    catch (com.gemstone.gemfire.cache.CacheException e) {
-      throw new CacheException(e);
-    }
-  }
-
-  public Object read(Object key) throws CacheException {
-    GemFireCacheProvider.getLogger().info(
-        "GemFireCache: read called for: " + key);
-    return region.get(key);
-  }
-
-  /**
-   * Remove an item from the cache
-   */
-  public void remove(Object key) throws CacheException {
-    GemFireCacheProvider.getLogger().debug(
-        "GemFireCache: remove called for: " + key);
-    try {
-      region.destroy(key);
-      GemFireCacheProvider.getLogger().debug("GemFireCache: removed: " + key);
-    }
-    catch (EntryNotFoundException e) {
-      // We can silently ignore this
-    }
-    catch (com.gemstone.gemfire.cache.CacheException e) {
-      throw new CacheException(e);
-    }
-  }
-
-  public String toString() {
-    StringBuffer buffer = new StringBuffer();
-    buffer.append("Hibernate cache on GemFire region: ");
-    buffer.append(region);
-    return buffer.toString();
-  }
-
-  /**
-   * If this is a clustered cache, unlock the item
-   */
-  public void unlock(Object key) throws CacheException {
-    GemFireCacheProvider.getLogger().info(
-        "GemFireCache: unlock called for: " + key);
-
-    if (!clientRegion) {
-      // If we're using GLOBAL scope, we don't have to worry about locking.
-      if (!Scope.GLOBAL.equals(region.getAttributes().getScope())) {
-        this.distributedLockService.unlock(key);
-      }
-    }
-    else {
-      GemFireCacheProvider.getLogger().info(
-          "GemFireCache: client region, ignoring lock : " + key);
-    }
-  }
-
-  public void update(Object key, Object value) throws CacheException {
-    GemFireCacheProvider.getLogger().info(
-        "GemFireCache: update called for: " + key);
-    this.region.put(key, value);
-  }
-
-  public Map<?, ?> toMap() {
-    return null;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireCacheListener.java
----------------------------------------------------------------------
diff --git 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireCacheListener.java
 
b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireCacheListener.java
deleted file mode 100644
index fb6db2d..0000000
--- 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireCacheListener.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.hibernate;
-
-import java.util.Properties;
-
-import com.gemstone.gemfire.cache.Declarable;
-import com.gemstone.gemfire.cache.EntryEvent;
-import com.gemstone.gemfire.cache.util.CacheListenerAdapter;
-
-public class GemFireCacheListener extends CacheListenerAdapter implements
-    Declarable {
-
-  @Override
-  public void afterCreate(EntryEvent event) {
-    System.out.println("Create : " + event.getKey() + " / "
-        + event.getNewValue());
-  }
-
-  @Override
-  public void afterDestroy(EntryEvent event) {
-    System.out.println("Destroy : " + event.getKey());
-  }
-
-  @Override
-  public void afterInvalidate(EntryEvent event) {
-    System.out.println("Invalidate : " + event.getKey());
-  }
-
-  @Override
-  public void afterUpdate(EntryEvent event) {
-    System.out.println("Update : " + event.getKey() + " / "
-        + event.getNewValue());
-  }
-
-  public void init(Properties props) {
-
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireCacheProvider.java
----------------------------------------------------------------------
diff --git 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireCacheProvider.java
 
b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireCacheProvider.java
deleted file mode 100644
index 9e38d7f..0000000
--- 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireCacheProvider.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.hibernate;
-
-import com.gemstone.gemfire.cache.CacheFactory;
-import com.gemstone.gemfire.cache.Region;
-import com.gemstone.gemfire.cache.RegionShortcut;
-import com.gemstone.gemfire.cache.execute.FunctionService;
-import com.gemstone.gemfire.distributed.DistributedLockService;
-import com.gemstone.gemfire.internal.logging.LogService;
-import com.gemstone.gemfire.modules.util.CreateRegionFunction;
-import com.gemstone.gemfire.modules.util.RegionConfiguration;
-import org.apache.logging.log4j.Logger;
-import org.hibernate.cache.Cache;
-import org.hibernate.cache.CacheException;
-import org.hibernate.cache.CacheProvider;
-import org.hibernate.cache.Timestamper;
-
-import java.util.Iterator;
-import java.util.Properties;
-
-@SuppressWarnings("deprecation")
-public class GemFireCacheProvider implements CacheProvider {
-
-  private static final Logger logger = LogService.getLogger();
-
-  protected com.gemstone.gemfire.cache.Cache _cache;
-
-  private DistributedLockService distributedLockService;
-
-  private Properties regionAttributes = new Properties();
-
-  private final String DEFAULT_REGION_TYPE = RegionShortcut.REPLICATE_HEAP_LRU
-      .name();
-
-  private final String HIBERNATE_DLOCK_SERVICE_NAME = 
"hibernate-cache-lock-service";
-  /**
-   * Configure the cache
-   * 
-   * @param regionName
-   *          the name of the cache region
-   * @param properties
-   *          configuration settings
-   * @throws CacheException
-   */
-  public Cache buildCache(String regionName, Properties properties)
-      throws CacheException {
-    logger.info("GemFireCacheProvider: Creating cache: " + regionName);
-    Region region = retrieveOrCreateRegion(regionName);
-    Cache cache = null;
-    if (region == null) {
-      // Doh, blow up
-      throw new RuntimeException("Couldn't find cache region : " + regionName);
-    }
-    else {
-      cache = new GemFireCache(region, this.distributedLockService);
-    }
-    logger.info("GemFireCacheProvider: Created cache: " + regionName + "->" + 
cache);
-    return cache;
-  }
-
-  public boolean isMinimalPutsEnabledByDefault() {
-    return false;
-  }
-
-  /**
-   * Generate a timestamp
-   */
-  public long nextTimestamp() {
-    return Timestamper.next();
-  }
-
-  /**
-   * Returns the region if already created, otherwise first tries to create it
-   * from cache.xml, if not specified in cache.xml, create the region from the
-   * properties specified in hibernate.cfg.xml. Two types of properties can be
-   * specified in hibernate.cfg.xml
-   * <ol>
-   * <li>gemfire.default-region-attributes-id: the default region type to
-   * create. (default value for this is REPLICATE)
-   * <li>gemfire.region-attributes-for:fullyQualifiedRegionName when a region
-   * wants to override the default region type
-   * </ol>
-   * 
-   * @param regionName
-   * @return the region
-   */
-  protected Region retrieveOrCreateRegion(String regionName) {
-    // TODO client regions
-    Region r = _cache.getRegion(regionName);
-    if (r == null) {
-      String regionType = getRegionType(regionName);
-      r = _cache.createRegionFactory(RegionShortcut.valueOf(regionType))
-          .create(regionName);
-      RegionConfiguration regionConfig = new RegionConfiguration();
-      regionConfig.setRegionName(regionName);
-      regionConfig.setRegionAttributesId(regionType);
-      FunctionService.onMembers(_cache.getDistributedSystem())
-          .withArgs(regionConfig).execute(CreateRegionFunction.ID).getResult();
-    }
-    return r;
-  }
-
-  /**
-   * returns the type of region to create by consulting the properties 
specified
-   * in hibernate.cfg.xml
-   * 
-   * @see #retrieveOrCreateRegion(String)
-   * @param regionName
-   * @return string representation of {@link RegionShortcut}
-   */
-  private String getRegionType(String regionName) {
-    String rType = regionAttributes
-        .getProperty("gemfire.default-region-attributes-id");
-    if (rType == null) {
-      rType = DEFAULT_REGION_TYPE;
-    }
-    // iterate to find overridden property for a region
-    Iterator<Object> it = regionAttributes.keySet().iterator();
-    while (it.hasNext()) {
-      String current = (String)it.next();
-      if (current.contains(regionName)) {
-        rType = regionAttributes.getProperty(current);
-        break;
-      }
-    }
-    return rType.toUpperCase();
-  }
-
-  /**
-   * Callback to perform any necessary initialization of the underlying cache
-   * implementation during SessionFactory construction.
-   * 
-   * @param properties
-   *          current configuration settings.
-   */
-  public void start(Properties properties) throws CacheException {
-    logger.info("GemFireCacheProvider: Creating cache provider");
-
-    // We have to strip out any unknown properties, do so here
-    Properties gemfireOnlyProperties = new Properties();
-    for (Object keyObj : properties.keySet()) {
-      String key = (String)keyObj;
-      if (key.contains("region-attributes")) {
-        regionAttributes.put(key, properties.get(key));
-      }
-      else if (key.startsWith("gemfire.")) {
-        gemfireOnlyProperties.setProperty(key.replace("gemfire.", ""),
-            properties.getProperty(key));
-      }
-    }
-
-    // Create cache and d-lock service
-    try {
-      _cache = new CacheFactory(gemfireOnlyProperties).create();
-      DistributedLockService existing = 
DistributedLockService.getServiceNamed(HIBERNATE_DLOCK_SERVICE_NAME);
-      if (existing == null) {
-        this.distributedLockService = DistributedLockService.create(
-            HIBERNATE_DLOCK_SERVICE_NAME, _cache.getDistributedSystem());
-      } else {
-        this.distributedLockService = existing;
-      }
-    } 
-    catch (com.gemstone.gemfire.cache.CacheException e) {
-      throw new CacheException(e);
-    }
-
-    FunctionService.registerFunction(new CreateRegionFunction());
-
-    logger.info("GemFireCacheProvider: Done creating cache provider");
-  }
-
-  /**
-   * Callback to perform any necessary cleanup of the underlying cache
-   * implementation during SessionFactory.close().
-   */
-  public void stop() {
-    logger.info("GemFireCacheProvider: Stopping");
-    _cache.close();
-    logger.info("GemFireCacheProvider: Stopped");
-  }
-
-  public static Logger getLogger() {
-    return logger;
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireQueryCacheFactory.java
----------------------------------------------------------------------
diff --git 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireQueryCacheFactory.java
 
b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireQueryCacheFactory.java
deleted file mode 100644
index 35a79ee..0000000
--- 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireQueryCacheFactory.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.hibernate;
-
-import java.util.Properties;
-
-import org.hibernate.HibernateException;
-import org.hibernate.cache.QueryCache;
-import org.hibernate.cache.QueryCacheFactory;
-import org.hibernate.cache.UpdateTimestampsCache;
-import org.hibernate.cfg.Settings;
-
-/**
- * Defines a factory for query cache instances. These factories are responsible
- * for creating individual QueryCache instances.
- * 
- */
-public class GemFireQueryCacheFactory implements QueryCacheFactory {
-  public QueryCache getQueryCache(String regionName,
-      UpdateTimestampsCache updateTimestampsCache, Settings settings,
-      Properties props) throws HibernateException {
-    return new org.hibernate.cache.StandardQueryCache(settings, props,
-        updateTimestampsCache, regionName);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireRegionFactory.java
----------------------------------------------------------------------
diff --git 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireRegionFactory.java
 
b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireRegionFactory.java
deleted file mode 100644
index f2d1696..0000000
--- 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/GemFireRegionFactory.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.hibernate;
-
-import java.util.HashSet;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import org.hibernate.cache.CacheDataDescription;
-import org.hibernate.cache.CacheException;
-import org.hibernate.cache.CollectionRegion;
-import org.hibernate.cache.EntityRegion;
-import org.hibernate.cache.QueryResultsRegion;
-import org.hibernate.cache.RegionFactory;
-import org.hibernate.cache.Timestamper;
-import org.hibernate.cache.TimestampsRegion;
-import org.hibernate.cache.access.AccessType;
-import org.hibernate.cfg.Settings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.gemstone.gemfire.cache.Cache;
-import com.gemstone.gemfire.cache.GemFireCache;
-import com.gemstone.gemfire.cache.Region;
-import com.gemstone.gemfire.cache.RegionShortcut;
-import com.gemstone.gemfire.cache.client.ClientCache;
-import com.gemstone.gemfire.cache.client.ClientRegionShortcut;
-import com.gemstone.gemfire.distributed.internal.DistributionConfig;
-import com.gemstone.gemfire.distributed.internal.DistributionConfigImpl;
-import 
com.gemstone.gemfire.modules.hibernate.internal.ClientServerRegionFactoryDelegate;
-import com.gemstone.gemfire.modules.hibernate.internal.EntityWrapper;
-import com.gemstone.gemfire.modules.hibernate.internal.GemFireCollectionRegion;
-import com.gemstone.gemfire.modules.hibernate.internal.GemFireEntityRegion;
-import 
com.gemstone.gemfire.modules.hibernate.internal.GemFireQueryResultsRegion;
-import com.gemstone.gemfire.modules.hibernate.internal.RegionFactoryDelegate;
-import com.gemstone.gemfire.modules.util.Banner;
-
-public class GemFireRegionFactory implements RegionFactory {
-
-    
-  private static final String GEMFIRE_QUERY_RESULTS_REGION_NAME = 
"gemfire.hibernateQueryResults";
-
-  private static final String GEMFIRE_TIMESTAMPS_REGION_NAME = 
"gemfire.hibernateTimestamps";
-
-  private GemFireCache _cache;
-
-  private RegionFactoryDelegate delegate;
-
-  // TODO get rid of this
-  private boolean isClient;
-  
-  private final Logger log = LoggerFactory.getLogger(getClass());
-
-  private final ExecutorService executorService = 
Executors.newSingleThreadExecutor();
-
-  private Set<String> gemfireAttributes;
-  
-  /**
-   * maps the entity to the region that stores it.
-   */
-  private ConcurrentMap<String, GemFireEntityRegion> entityRegionMap = new 
ConcurrentHashMap<String, GemFireEntityRegion>();
-  
-  public GemFireRegionFactory(Properties props) {
-    log.debug("props:" + props);
-  }
-
-  public ExecutorService getExecutorService() {
-    return this.executorService;
-  }
-  
-  @Override
-  public void start(Settings settings, Properties properties)
-      throws CacheException {
-    log.info("Initializing " + Banner.getString());
-    extractGemFireProperties(properties);
-    _cache = delegate.startCache();
-  }
-
-  private void extractGemFireProperties(Properties properties) {
-    // We have to strip out any unknown properties, do so here
-    Properties gemfireProperties = new Properties();
-    Properties regionProperties = new Properties();
-    for (Object keyObj : properties.keySet()) {
-      String key = (String)keyObj;
-      if (key.contains("region-attributes")) {
-        regionProperties.put(key, properties.get(key));
-      }
-      else if (key.equals("gemfire.cache-topology")) {
-        if (properties.getProperty(key).trim()
-            .equalsIgnoreCase("client-server")) {
-          isClient = true;
-        }
-      }
-      else if (key.startsWith("gemfire.") && isGemFireAttribute(key)) {
-        gemfireProperties.setProperty(key.replace("gemfire.", ""),
-            properties.getProperty(key));
-      }
-    }
-    if (isClient) {
-      delegate = new ClientServerRegionFactoryDelegate(gemfireProperties, 
regionProperties);
-    } else {
-      delegate = new RegionFactoryDelegate(gemfireProperties, 
regionProperties);
-    }
-  }
-
-  private boolean isGemFireAttribute(String key) {
-    String gfKey = key.replace("gemfire.", "");
-    Set<String> gemfireAttributes = getGemFireAttributesNames();
-    return gemfireAttributes.contains(gfKey);
-  }
-
-  private Set<String> getGemFireAttributesNames() {
-    if (this.gemfireAttributes == null) {
-      //used only to get the list of all gemfire properties
-      DistributionConfig dConfig = new DistributionConfigImpl(new 
Properties());
-      String[] gemfireAttributeNames = dConfig.getAttributeNames();
-      gemfireAttributes = new HashSet<String>();
-      for (String attrName : gemfireAttributeNames) {
-        gemfireAttributes.add(attrName);
-      }
-    }
-    return gemfireAttributes;
-  }
-  
-  @Override
-  public void stop() {
-    // we do not want to close the cache, as there may be other
-    // applications/webapps
-    // using this cache. TODO do we want to close the regions that are created
-    // by this application?
-  }
-
-  @Override
-  public boolean isMinimalPutsEnabledByDefault() {
-    // minimal puts is better for clustered cache
-    return true;
-  }
-
-  @Override
-  public AccessType getDefaultAccessType() {
-    return AccessType.NONSTRICT_READ_WRITE;
-  }
-
-  @Override
-  public long nextTimestamp() {
-    log.debug("nextTimestamp called");
-    // TODO use gemfire cache time here. (which tries to minimize clock skews)
-    return Timestamper.next();
-  }
-
-  @Override
-  public EntityRegion buildEntityRegion(String regionName,
-      Properties properties, CacheDataDescription metadata)
-      throws CacheException {
-    // create the backing region
-    log.debug("creating Entity region {} ", regionName);
-    Region<Object, EntityWrapper> region = delegate.createRegion(regionName);
-    GemFireEntityRegion r = new GemFireEntityRegion(region, isClient, 
metadata, this);
-    this.entityRegionMap.put(regionName, r);
-    return r;
-  }
-
-  @Override
-  public CollectionRegion buildCollectionRegion(String regionName,
-      Properties properties, CacheDataDescription metadata)
-      throws CacheException {
-    log.debug("creating collection region {}",regionName);
-    Region<Object, EntityWrapper> region = delegate.createRegion(regionName);
-    return new GemFireCollectionRegion(region, isClient, metadata, this);
-  }
-
-  @Override
-  public QueryResultsRegion buildQueryResultsRegion(String regionName,
-      Properties properties) throws CacheException {
-    log.debug("Creating a query results region");
-    Region region = getLocalRegionForQueryCache();
-    return new GemFireQueryResultsRegion(region);
-  }
-
-  private Region getLocalRegionForQueryCache() {
-    return getLocalRegion(GEMFIRE_QUERY_RESULTS_REGION_NAME);
-  }
-  
-  private Region getLocalRegionForTimestampsCache() {
-    return getLocalRegion(GEMFIRE_TIMESTAMPS_REGION_NAME);
-  }
-  
-  private Region getLocalRegion(String regionName) {
-    Region region = _cache.getRegion(regionName);
-    if (region != null) {
-      return region;
-    }
-    if (isClient) {
-      ClientCache cc = (ClientCache)_cache;
-      region = 
cc.createClientRegionFactory(ClientRegionShortcut.LOCAL_HEAP_LRU).create(regionName);
-    } else {
-      Cache c = (Cache)_cache;
-      region = 
c.createRegionFactory(RegionShortcut.LOCAL_HEAP_LRU).create(regionName);
-    }
-    return region;
-  }
-  
-  @Override
-  public TimestampsRegion buildTimestampsRegion(String regionName,
-      Properties properties) throws CacheException {
-    Region region = getLocalRegionForTimestampsCache();
-    return new GemFireQueryResultsRegion(region);
-  }
-
-  /**
-   * Given an entity name, gets the region used to store
-   * that entity.
-   * @param name name of the entity
-   * @return the entity region for the given entity name
-   */
-  public GemFireEntityRegion getEntityRegion(String name) {
-    return this.entityRegionMap.get(name);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/Access.java
----------------------------------------------------------------------
diff --git 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/Access.java
 
b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/Access.java
deleted file mode 100644
index 55abb6a..0000000
--- 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/Access.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.hibernate.internal;
-
-import com.gemstone.gemfire.cache.CacheWriterException;
-import com.gemstone.gemfire.cache.EntryExistsException;
-import com.gemstone.gemfire.cache.Region;
-import com.gemstone.gemfire.cache.client.ServerOperationException;
-import org.hibernate.cache.CacheException;
-import org.hibernate.cache.EntityRegion;
-import org.hibernate.cache.access.EntityRegionAccessStrategy;
-import org.hibernate.cache.access.SoftLock;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public abstract class Access implements EntityRegionAccessStrategy {
-
-  private final GemFireEntityRegion region;
-
-  /**Thread local to remember the status of insert, which can be returned in 
afterInsert*/
-  private ThreadLocal<Map<Object, Boolean>> createStatus = new 
ThreadLocal<Map<Object, Boolean>>() {
-    @Override
-    protected Map<Object, Boolean> initialValue() {
-      return new HashMap<Object, Boolean>();
-    }
-  };
-
-  private Logger log = LoggerFactory.getLogger(getClass());
-
-  public Access(GemFireEntityRegion region) {
-    this.region = region;
-  }
-
-  @Override
-  public EntityRegion getRegion() {
-    return this.region;
-  }
-
-  @Override
-  public Object get(Object key, long txTimestamp) throws CacheException {
-    KeyWrapper wKey = getWrappedKey(key);
-    if (this.region.isRegisterInterestRequired()) {
-      this.region.registerInterest(wKey);
-    }
-    // first check to see if we have pre-fetched this entity
-    EntityWrapper wrapper = this.region.get(wKey);
-    if (wrapper == null) {
-      wrapper = this.region.getGemFireRegion().get(wKey);
-    }
-    if (wrapper == null) {
-      this.region.getStats().incCacheMiss();
-      log.debug("Cache miss for {} count: {}",wKey, 
this.region.getStats().getCacheMiss());
-      return null;
-    } else {
-      this.region.getStats().incCacheHit();
-      log.debug("cache hit {} count: {} ", wKey, 
this.region.getStats().getCacheHits());
-    }
-    return wrapper.getEntity();
-  }
-
-  @Override
-  public boolean putFromLoad(Object key, Object value, long txTimestamp,
-      Object version) throws CacheException {
-    return putFromLoad(key, value, txTimestamp, version, true);
-  }
-
-  @Override
-  public boolean putFromLoad(Object key, Object value, long txTimestamp,
-      Object version, boolean minimalPutOverride) throws CacheException {
-    return create(key, value);
-  }
-
-  private boolean create(Object key, Object value) {
-    KeyWrapper wKey = getWrappedKey(key);
-    EntityWrapper wrapper = new EntityWrapper(value, 1L);
-    log.debug("putting a new entry from load {} value: {}",wKey, wrapper);
-    boolean remove = false;
-    try {
-      this.region.getGemFireRegion().create(wKey, wrapper);
-    } catch (EntryExistsException ee) {
-      log.debug("key {} exists in the cache already, destroying", wKey);
-      remove = true;
-    } catch (CacheWriterException writerEx) {
-      this.region.getStats().incHibernateDestroyJobsScheduled();
-      log.debug("caught a CacheWriterException {} ",writerEx.getMessage());
-      remove = true;
-    } catch (ServerOperationException serverEx) {
-      if (serverEx.getCause() instanceof CacheWriterException) {
-        this.region.getStats().incHibernateDestroyJobsScheduled();
-        log.debug("caught a ServerOperationException caused by 
CacheWriterException {} ",serverEx.getMessage());
-      } else {
-        throw serverEx;
-      }
-      remove = true;
-    }
-    if (remove) {
-      this.region.getGemFireRegion().remove(wKey);
-      return false;
-    }
-    return true;
-  }
-
-  @Override
-  public SoftLock lockItem(Object key, Object version) throws CacheException {
-    KeyWrapper wKey = getWrappedKey(key);
-    EntityWrapper wrapper = this.region.getGemFireRegion().get(wKey);
-    Long ver = wrapper == null ? 0L : wrapper.getVersion();
-    log.debug("lockItem:key: {} entityVersion: {}", new Object[] { wKey, ver 
});
-    return new EntityVersionImpl(ver);
-  }
-
-  @Override
-  public SoftLock lockRegion() throws CacheException {
-    return null;
-  }
-
-  @Override
-  public void unlockItem(Object key, SoftLock lock) throws CacheException {
-    log.debug("unlockItem:key:" + key + " lock:" + lock);
-  }
-
-  @Override
-  public void unlockRegion(SoftLock lock) throws CacheException {
-  }
-
-  @Override
-  public boolean insert(Object key, Object value, Object version)
-      throws CacheException {
-    log.debug("insert:key:{} value:{} version:{}",
-        new Object[]{key, value, version});
-    boolean retVal = create(key, value);
-    createStatus.get().put(key, retVal);
-    return retVal;
-  }
-
-  @Override
-  public boolean afterInsert(Object key, Object value, Object version)
-      throws CacheException {
-    log.info("afterInsert:key:{} value:{} version:{}",
-        new Object[]{key, value, version});
-    return createStatus.get().remove(key);
-  }
-
-  @Override
-  public boolean update(Object key, Object value, Object currentVersion,
-      Object previousVersion) throws CacheException {
-    KeyWrapper wKey = getWrappedKey(key);
-    EntityWrapper oldWrapper = this.region.getGemFireRegion().get(wKey);
-    Long version = oldWrapper == null ? 1L : oldWrapper.getVersion() + 1;
-    EntityWrapper wrapper = new EntityWrapper(value, version);
-    log.debug("put:key:{} value:{} version:{}", new Object[] { wKey, value,
-        version });
-    boolean remove = false;
-    try {
-      if (oldWrapper == null) {
-        remove = this.region.getGemFireRegion().putIfAbsent(wKey, wrapper) != 
null;
-      } else {
-        remove = !this.region.getGemFireRegion().replace(wKey, oldWrapper, 
wrapper);
-      }
-    } catch (CacheWriterException writerEx) {
-      this.region.getStats().incHibernateDestroyJobsScheduled();
-      log.debug("caught a CacheWriterException {} ",writerEx.getMessage());
-      remove = true;
-    } catch (ServerOperationException serverEx) {
-      if (serverEx.getCause() instanceof CacheWriterException) {
-        this.region.getStats().incHibernateDestroyJobsScheduled();
-        log.debug("caught a ServerOperationException caused by 
CacheWriterException {} ",serverEx.getMessage());
-        remove = true;
-      } else {
-        throw serverEx;
-      }
-    }
-    if (remove) {
-      this.region.getGemFireRegion().remove(wKey);
-      return false;
-    }
-    log.debug("put for key {} succeded", wKey);
-    return true;
-  }
-
-  @Override
-  public boolean afterUpdate(Object key, Object value, Object currentVersion,
-      Object previousVersion, SoftLock lock) throws CacheException {
-    log.debug("afterUpdate:key:{} value:{} currVersion:{} previousVersion:{}",
-        new Object[] {key, value, currentVersion, previousVersion});
-    KeyWrapper wKey = getWrappedKey(key);
-    EntityWrapper wrapper = this.region.getGemFireRegion().get(wKey);
-    if (wrapper == null) {
-      // this entry was destroyed during update
-      return false;
-    }
-    Long version = wrapper.getVersion();
-    Long expectedVersion = ((EntityVersion)lock).getVersion() + 1;
-    log.debug("afterPut:key:{} value:{} version:{} expected: {}",
-        new Object[] { wKey, value, version, expectedVersion });
-    if (wrapper.getVersion() != expectedVersion) {
-      log.debug(
-          "for key {} expected version to be {} but was {}, so destroying the 
key",
-          new Object[] { wKey, expectedVersion, version });
-      this.region.getGemFireRegion().remove(wKey);
-      return false;
-    }
-    return true;
-  }
-
-  @Override
-  public void remove(Object key) throws CacheException {
-    log.debug("removing key {} ",key);
-    this.region.getGemFireRegion().remove(getWrappedKey(key));
-  }
-
-  @Override
-  public void removeAll() throws CacheException {
-    log.debug("removing all keys");
-    this.region.getGemFireRegion().clear();
-  }
-
-  @Override
-  public void evict(Object key) throws CacheException {
-    // TODO we should implement a method on Region to evict
-    // a particular entry, destroying is inefficient
-    log.debug("removing key {} ",key);
-    this.region.getGemFireRegion().remove(getWrappedKey(key));
-  }
-
-  @Override
-  public void evictAll() throws CacheException {
-    log.debug("removing all keys");
-    this.region.getGemFireRegion().clear();
-  }
-
-  protected Region<Object, EntityWrapper> getGemFireRegion() {
-    return this.region.getGemFireRegion();
-  }
-  
-  protected KeyWrapper getWrappedKey(Object key) {
-    return new KeyWrapper(key);
-  }
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0c89797b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/ClientServerRegionFactoryDelegate.java
----------------------------------------------------------------------
diff --git 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/ClientServerRegionFactoryDelegate.java
 
b/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/ClientServerRegionFactoryDelegate.java
deleted file mode 100644
index c2fa3ba..0000000
--- 
a/modules/gemfire-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/ClientServerRegionFactoryDelegate.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.hibernate.internal;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.gemstone.gemfire.cache.GemFireCache;
-import com.gemstone.gemfire.cache.Region;
-import com.gemstone.gemfire.cache.RegionShortcut;
-import com.gemstone.gemfire.cache.client.ClientCache;
-import com.gemstone.gemfire.cache.client.ClientCacheFactory;
-import com.gemstone.gemfire.cache.client.ClientRegionFactory;
-import com.gemstone.gemfire.cache.client.ClientRegionShortcut;
-import com.gemstone.gemfire.cache.execute.FunctionService;
-import com.gemstone.gemfire.modules.util.BootstrappingFunction;
-import com.gemstone.gemfire.modules.util.CreateRegionFunction;
-import com.gemstone.gemfire.modules.util.RegionConfiguration;
-
-public class ClientServerRegionFactoryDelegate extends RegionFactoryDelegate {
-
-  private static final String DEFAULT_SERVER_REGION_TYPE = 
RegionShortcut.PARTITION.name();
-
-  private static final String DEFAULT_CLIENT_REGION_TYPE = 
ClientRegionShortcut.PROXY.name();
-
-  private ClientCache clientCache;
-  
-  public ClientServerRegionFactoryDelegate(Properties gemfireProperties,
-      Properties regionProperties) {
-    super(gemfireProperties, regionProperties);
-  }
-
-  @Override
-  public GemFireCache startCache() {
-    log.info("Creating a GemFire client cache");
-    String locatorsString = (String)gemfireProperties.remove("locators");
-    checkExistingCache();
-    ClientCacheFactory ccf = new 
ClientCacheFactory(gemfireProperties).setPoolSubscriptionEnabled(true);
-    List<LocatorHolder> locators = getLocatorsMap(locatorsString);
-    for (LocatorHolder locHolder : locators) {
-      log.debug("adding pool locator with host {} port {}", locHolder.host, 
locHolder.port);
-      ccf.addPoolLocator(locHolder.host, locHolder.port);
-    }
-    this.clientCache = ccf.create();
-    
-    log.debug("GemFire client cache creation completed");
-    // bootstrap the servers
-    FunctionService.onServers(this.clientCache).execute(new 
BootstrappingFunction()).getResult();
-    FunctionService.registerFunction(new 
CreateRegionFunction(this.clientCache));
-    return this.clientCache;
-  }
-
-  private List<LocatorHolder> getLocatorsMap(String locatorsString) {
-    List<LocatorHolder> retval = new ArrayList<LocatorHolder>();
-    if (locatorsString == null || locatorsString.isEmpty()) {
-      return retval;
-    }
-    StringTokenizer st = new StringTokenizer(locatorsString, ",");
-    while (st.hasMoreTokens()) {
-      String locator = st.nextToken();
-      int portIndex = locator.indexOf('[');
-      if (portIndex < 1) {
-        portIndex = locator.lastIndexOf(':');
-      }
-      // starting in 5.1.0.4 we allow '@' as the bind-addr separator
-      // to let people use IPv6 numeric addresses (which contain colons)
-      int bindAddrIdx = locator.lastIndexOf('@', portIndex - 1);
-      
-      if (bindAddrIdx < 0) {
-        bindAddrIdx = locator.lastIndexOf(':', portIndex - 1);
-      }
-
-      String host = locator.substring(0,
-          bindAddrIdx > -1 ? bindAddrIdx : portIndex);
-
-      if (host.indexOf(':') >= 0) {
-        bindAddrIdx = locator.lastIndexOf('@');
-        host = locator.substring(0, bindAddrIdx > -1 ? bindAddrIdx : 
portIndex);
-      }
-      int lastIndex = locator.lastIndexOf(']');
-      if (lastIndex == -1) {
-        if (locator.indexOf('[') >= 0) {
-          throw new IllegalArgumentException("Invalid locator");
-        } else {
-          // Using host:port syntax
-          lastIndex = locator.length();
-        }
-      }
-      String port = locator.substring(portIndex + 1, lastIndex);
-      int portVal = 0;
-      try {
-        portVal = Integer.parseInt(port);
-        if (portVal < 1 || portVal > 65535) {
-          throw new IllegalArgumentException("port should be grater than zero 
and less than 65536");
-        }
-      } catch (NumberFormatException ex) {
-        throw new IllegalArgumentException("Invalid Locator");
-      }
-      retval.add(new LocatorHolder(host, portVal));
-    }
-    return retval;
-  }
-
-  @Override
-  public Region<Object, EntityWrapper> createRegion(String regionName) {
-    // first create the region on the server
-    String serverRegionType = getServerRegionType(regionName);
-    RegionConfiguration regionConfig = new RegionConfiguration();
-    regionConfig.setRegionName(regionName);
-    regionConfig.setRegionAttributesId(serverRegionType);
-    
regionConfig.setCacheWriterName(EntityRegionWriter.class.getCanonicalName());
-    FunctionService.onServer(this.clientCache).withArgs(regionConfig)
-        .execute(CreateRegionFunction.ID).getResult();
-    // now create region on the client
-    Region<Object, EntityWrapper> r = this.clientCache.getRegion(regionName);
-    if (r != null) {
-      return r;
-    }
-    String clientRegionType = getClientRegionType(regionName);
-    ClientRegionFactory<Object, EntityWrapper> rf = this.clientCache
-        .createClientRegionFactory(ClientRegionShortcut
-            .valueOf(clientRegionType));
-    r = rf.create(regionName);
-    return r;
-  }
-
-  private String getClientRegionType(String regionName) {
-    String rType = getOverridenClientRegionType(regionName);
-    if (rType != null) {
-      return rType.toUpperCase();
-    }
-    rType = 
regionProperties.getProperty("gemfire.default-client-region-attributes-id");
-    if (rType == null) {
-      rType = DEFAULT_CLIENT_REGION_TYPE;
-    }
-    return rType.toUpperCase();
-  }
-
-  private String getServerRegionType(String regionName) {
-    String rType = getOverridenServerRegionType(regionName);
-    if (rType != null) {
-      return rType.toUpperCase();
-    }
-    rType = 
regionProperties.getProperty("gemfire.default-region-attributes-id");
-    if (rType == null) {
-      rType = DEFAULT_SERVER_REGION_TYPE;
-    }
-    return rType.toUpperCase();
-  }
-
-  private String getOverridenServerRegionType(String regionName) {
-    String rType = null;
-    Iterator<Object> it = regionProperties.keySet().iterator();
-    while (it.hasNext()) {
-      String current = (String)it.next();
-      if (current.contains(regionName) && !current.contains("client")) {
-        rType = regionProperties.getProperty(current);
-        break;
-      }
-    }
-    return rType;
-  }
-
-  private String getOverridenClientRegionType(String regionName) {
-    String rType = null;
-    Iterator<Object> it = regionProperties.keySet().iterator();
-    while (it.hasNext()) {
-      String current = (String)it.next();
-      if (current.contains(regionName) && current.contains("client")) {
-        rType = regionProperties.getProperty(current);
-        break;
-      }
-    }
-    return rType;
-  }
-  
-  private static class LocatorHolder {
-    private String host;
-    private int port;
-    private LocatorHolder(String host, int port) {
-      this.host = host;
-      this.port = port;
-    }
-  }
-}

Reply via email to