... |
There are several options to defining the metadata representing your object in the cache. |
* "Recommended" Use the Teiid Connection Importer in Teiid Designer to create the physical source model based on your object cache. |
* Use dynamic VDB that only defines the data source to use. Example: |
... |
{code} |
* Use Teiid Designer to manually create the physical source model based on your object cache using the above *Usage* patterns. |
|
* Use the Teiid Connection Importer Teiid Designer to manually create the physical source model based on your object cache using the above *Usage* patterns. |
h2. {*}JCA Resource Adapter{*} |
... |
The Infinispan DSL Translator, known by the type infinispan-cache-dsl, can read the java objects from a remote Infinispan Cache via the Hot Rod client using the Google Protobuf for serialization. The benefit of this JDG design is it will enable Teiid to query the cache using DSL, which is similar to doing Lucene searching on a local cache. If you are using Infinispan in library mode, see the Object Translator for this type of configuration.
Properties
The Infinispan DSL Translator currently has no import or execution properties. See the JCA resource adapter section below as to how to configure the cache to be queried.
The infinispan-cache-dsl translator is not configured, out-of-the-box, in the standalone-teiid.xml configuration. To configure the translator, run the add-infinispan-cache-dsl-translator.cli script. This script can also be found in the teiid-jboss-dist.zip kit, under docs/teiid/datasources/infinispan. See the jdg-remote-cache quick start for an example. Note, this assumes you will be installing a separate JDG server, which will be accessed via the Hot Rod Client installed into the Teiid server.
The following are the connector capabilities:
The following will not be pushed down to JDG for processing, but will be done within Teiid:
Limitations:
To be done:
The data type for the attribute in the class must match the JDG cache key data type. |
There are several options to defining the metadata representing your object in the cache.
<model name="People" type="Physical"> <property name="importer.useFullSchemaName" value="false"/> <source name="infinispan-cache-dsl-connector" translator-name="infinispan-cache-dsl" connection-jndi-name="java:/infinispanRemoteDSL" /> </model>
The metadata will be resolved by reverse engineering the defined object in the cache. This can be useful when using the Teiid Designer Teiid Connection Importer for building the physical source model(s).
Note, this also shows a container class, PhoneNumber, as an example of the foreign key that's defines the relationship.
<vdb name="PeopleVDB" version="1"> <model name="People" visible="true"> <property name="importer.useFullSchemaName" value="false"/> <source name="infinispan-cache-dsl-connector" translator-name="infinispan-cache-dsl" connection-jndi-name="java:/infinispanRemote" /> <metadata type="DDL"><![CDATA[ CREATE FOREIGN TABLE Person ( PersonObject object OPTIONS (NAMEINSOURCE 'this', UPDATABLE FALSE, SEARCHABLE 'Unsearchable', NATIVE_TYPE 'java.lang.Object'), id integer NOT NULL OPTIONS (SEARCHABLE 'Searchable', NATIVE_TYPE 'int'), name string OPTIONS (SEARCHABLE 'Searchable', NATIVE_TYPE 'java.lang.String'), email string OPTIONS (SEARCHABLE 'Searchable', NATIVE_TYPE 'java.lang.String'), CONSTRAINT PK_ID PRIMARY KEY(id) ) OPTIONS (NAMEINSOURCE 'PersonsCache', UPDATABLE TRUE); CREATE FOREIGN TABLE PhoneNumber ( number string OPTIONS (NAMEINSOURCE 'phone.number', SEARCHABLE 'Searchable', NATIVE_TYPE 'java.lang.String'), type string OPTIONS (NAMEINSOURCE 'phone.type', SEARCHABLE 'Searchable', NATIVE_TYPE 'java.lang.String'), id integer NOT NULL OPTIONS (SELECTABLE FALSE, UPDATABLE FALSE, SEARCHABLE 'Searchable', NATIVE_TYPE 'int'), CONSTRAINT FK_PERSON FOREIGN KEY(id) REFERENCES Person (id) OPTIONS (NAMEINSOURCE 'phones') ) OPTIONS (NAMEINSOURCE 'PersonsCache', UPDATABLE TRUE); ]]> </metadata> </model> </vdb>
See the Infinispan-DSL resource adapter for this translator. It can be configured to lookup the cache container via JNDI, server list, or hot rod properties..