Hi all,
Manik asked me to investigate what it would take to deploy Infinispan
inside google app engine (GAE). As you might have heard GAE execution
environment is somewhat constricted (can not create threads, write to
files, open sockets, etc). Right from a get go it was clear that we can
not run Infinispan in any mode other than local. However, even if
Infinispan is run in local mode GAE users could benefit from
Infinispan's JSR-107 cache interface that is backed up with cache store
implemented using google datastore api. There probably are use case
scenarios where GAE users interact with both google provided JSR-107
memcache service [1] and datastore [2] separately where in fact
Infinispan's JSR-107 interface that is automatically synced with
datastore would make much more sense.
Manik and I went back and forth and decided to put this sub project on a
back burner at this moment. Even though we could accommodate GAE's
thread restriction it turns out that GAE sandbox restrictions involve
several apis that we use (JAXB, JMX, JNDI among others) and retrofitting
Infinispan into this tight sandbox would be a headache. There is a
strong comunity push to unrestrict these API and it seems pressures from
community would eventually be successful.
Also, I am still awaiting for some feedback from Mircea to see if we can
even implement google datastore cache loader to be transactional. Even
though GAE datastore supports transactions they are only available in
the same entity group [3]. As far as I understand GAE datastore they
implement horizontal partitioning which basically involves putting
different rows into different tables. Think each Person row entry would
have to be in different table unless they are in some owns (say
parent-child) relationship.
Feedback appreciated,
Vladimir
[1]
http://code.google.com/appengine/docs/java/memcache/usingjcache.html
[2]
http://code.google.com/appengine/docs/java/datastore/
[3]
http://www.youtube.com/watch?v=2jW2iSKDipY (between 6:45 and 11:40)