[infinispan-dev] Request for feedback on cache store support in AS7 Infinispan subsystem

Paul Ferraro paul.ferraro at redhat.com
Thu Sep 15 11:34:45 EDT 2011


Hi all,

In AS 7.0, only the those cache store implementations packaged in
infinispan-core were usable by default.  While the Infinispan subsystem
schema allowed users to use any cache store implementation (via <store
class="..."/>), they need to manually add the relevant jars to the
org.infinispan module, and update the module.xml file accordingly so
that the subsystem's module classloader is aware of these cache store
classes.

To simplify the use of other common cache store implementations, I'm in
the process of working on the following jira, which aims to include the
jdbc, remote, and cloud cache store jars in the org.infinispan module by
default:
https://issues.jboss.org/browse/AS7-1713

As well as including the relevant jars, we would also like to simplify
their definition (like we did for <file-store/>, such that users don't
need to specify class names, provide as many sensible defaults as
possible, and take care of any required service dependencies.

I've created a draft of what I thought could be workable schema for the
remote and jdbc cache stores and would like some feedback.

The amended Infinispan subsystem schema can be found here:
https://github.com/pferraro/jboss-as/blob/master/build/src/main/resources/docs/schema/jboss-as-infinispan_1_0.xsd

For the jdbc cache stores, which come in 3 flavors, I've consolidated
them into a single configuration element <jdbc-store/>, where the
variant is implied the defined tables.  After providing default values
for all the required fields, we arrive at the following minimal
configuration:
e.g.
<jdbc-store datasource="java:jboss/jdbc/somedatabase"/>

I started with the assumption that the database resource will always
come from an AS-managed DataSource.

To use a string-based jdbc store, we specify the type of table to use:
e.g.

<jdbc-store datasource="java:jboss/jdbc/somedatabase">
  <entry-table/>
</jdbc-store>

Likewise, if we want to use a binary jdbc store:
e.g.
<jdbc-store datasource="java:jboss/jdbc/somedatabase">
  <bucket-table/>
</jdbc-store>

Using both <entry-table/> and <bucket-table/> (or neither) indicates the
use of a mixed jdbc store.

The tables themselves are fully customizable (shown with their default
values):
e.g.
<jdbc-store datasource="java:jboss/jdbc/somedatabase">
 <bucket-table prefix="ispn_bucket" batch-size="100" fetch-size="100">
  <id-column name="id" type="VARCHAR"/>
  <data-column name="datum" type="BINARY"/>
  <timestamp-column name="version" type="BIGINT"/>
 </bucket-table>
 <entry-table prefix="ispn_entry" batch-size="100" fetch-size="100">
  <id-column name="id" type="VARCHAR"/>
  <data-column name="datum" type="BINARY"/>
  <timestamp-column name="version" type="BIGINT"/>
 </entry-table>
</jdbc-store>


The schema for the remote cache store is far simpler.  You can specify a
specific remote cache name, server list, and hot rod client properties
are directly enumerated:
e.g.
<remote-store cache="some-named-cache" servers="127.0.0.1:11311">
  <property name="infinispan.client.hotrod.request_balancing_strategy">...</property>
</remote-store>

If the cache attribute is omitted, we assume the default cache is to be
used.

Unfortunately, there doesn't seem to be a way to integrate the thread
pools used by RemoteCache/RemoteCacheManager with the AS7 threading
subsystem.  In order to do this, RemoteCacheStoreConfig would need
methods for providing ExecutorFactory implementations, similar to the
way GlobalConfiguration works.

I haven't started on the cloud-based store yet, as it's kind of a
dependency nightmare.

Thoughts?

Paul



More information about the infinispan-dev mailing list