JBoss Community Archive (Read Only)

Teiid 8.3

Object Translator

The Object translator is a bridge for reading java objects from external sources (i.e., Infinispan Cache or Map cache) and delivering them to the engine for processing.  And to assist in providing that bridge, the  OBJECTTABLE function must be used to transform the java object into rows and columns.   

The following are the translator types and their respective supported data source:

Execution Properties - infinispan-cache

Name

Description

Required

Default

SupportsLuceneSearching

Setting to true assumes your objects are annotated and Hibernate/Lucene will be used to search the cache

N

false

Supported Capabilities

The following are the connector capabilities when Key Searching is used:

  • SELECT command

  • CompareCriteria - only EQ

  • InCriteria

The following are the connector capabilities when Hibernate/Lucene Searching is enabled:

  • SELECT command

  • CompareCriteria - EQ, NE, LT, GT, etc.

  • InCriteria

  • OrCriteria

Usage

Retrieve objects from a cache and transform into rows and columns.

  • The primary object returned by the cache should have a name in source of 'this'.  All other columns will have their name in source (which defaults to the column name) interpreted as the path to the column value from the primary object.

  • All columns that are not the primary key nor covered by a lucene index should be marked as SEARCHABLE 'Unsearchable'.

The following is an example of a key search. It uses a dynamic vdb to define the physical source and views using DDL.   It uses a TeamObject class, shown below, with a teamName field that is used as its cache key and a String list of players. 

public class TeamObject {

   private String teamName;
   private List<String> players = new ArrayList<String>();

   public String getTeamName() {
      return teamName;
   }

   public void setTeamName(String teamName) {
	   this.teamName = teamName;
   }

   public List<String> getPlayers() {
	   return players;
   }

}

Notice the use of the  [ OBJECTABLE |TEIID:OBJECTABLE] function to parse the object from Team and transform into rows and column. This metadata could also be defined by using Teiid Designer.  

<vdb name="team" version="1">
    <property name="UseConnectorMetadata" value="cached" />
    <model name="Team" visible="false">
        <source name="objsource" translator-name="infinispan1" connection-jndi-name="java:infinispan-jndi"/>
        <metadata type="DDL"><![CDATA[

            CREATE FOREIGN TABLE Team (
                TeamObject Object OPTIONS (NAMEINSOURCE 'this', SEARCHABLE 'Unsearchable'),
                teamName varchar(255) PRIMARY KEY)
              OPTIONS (NAMEINSOURCE 'teams');

         ]]> </metadata>
    </model>
    <model name="TeamView" type="VIRTUAL">
         <metadata type="DDL"><![CDATA[
             CREATE VIEW Players (
                  TeamName varchar(255) PRIMARY KEY,
                  PlayerName varchar(255)
             )
             AS
             SELECT t.TeamName, y.Name FROM Team as T,
                   OBJECTTABLE('m.players' PASSING T.TeamObject as m COLUMNS Name string 'teiid_row') as y;

        ]]> </metadata>
    </model>

    <translator name="infinispan1" type="infinispan-cache">
        <property name="SupportsLuceneSearching" value="true"/>
    </translator>
</vdb>

JCA Resource Adapter

See the Infinispan resource adapter for this translator.   It can be configured to lookup the cache container via JNDI or created (i.e., ConfigurationFileName or RemoteServerList). 

JBoss.org Content Archive (Read Only), exported from JBoss Community Documentation Editor at 2020-03-13 12:39:00 UTC, last content change 2013-03-14 16:28:16 UTC.