]
Van Halbert commented on TEIID-4307:
------------------------------------
Changing so that when the NameInSource is set, that will be used to match to the Pojo
name. And when a staging table is defined, and its related primary table is using a
NameInSource, the staging table will also need to be changed to the same NameInSource.
Infinispan DSL Translator: Can't execute update when foreign
table name differs from POJO's simple name
-------------------------------------------------------------------------------------------------------
Key: TEIID-4307
URL:
https://issues.jboss.org/browse/TEIID-4307
Project: Teiid
Issue Type: Enhancement
Components: Misc. Connectors
Affects Versions: 8.12.5
Reporter: Jan Stastny
Assignee: Van Halbert
Fix For: 9.x
When using Infinispan DSL translator to query data in a jdg instance using POJO, proto
file and marshaller, then there's an issue when the foreign table name in a vdb
doesn't match simple name of the POJO class.
Resource adapter:
{code:xml}
<resource-adapter id="jdg-mat2">
<module slot="main"
id="org.jboss.teiid.resource-adapter.infinispan.dsl"/>
<connection-definitions>
<connection-definition
class-name="org.teiid.resource.adapter.infinispan.dsl.InfinispanManagedConnectionFactory"
jndi-name="java:/jdg-mat2-ds" enabled="true"
pool-name="jdg-mat2">
<config-property name="CacheTypeMap">
rhel7openjdk1_8_localjdg-mat:org.jboss.qe.jdg.pojo.another.CustomerReport2;customerId
</config-property>
<config-property name="ProtobufDefinitionFile">
/org/jboss/qe/jdg/remote/protobuf/another/CustomerReport2.proto
</config-property>
<config-property name="Module">
org.jboss.qe.jdg.pojos
</config-property>
<config-property name="MessageDescriptor">
org.jboss.qe.jdg.remote.protobuf.another.CustomerReport2
</config-property>
<config-property name="RemoteServerList">
dvqe01.mw.lab.eng.bos.redhat.com:11322
</config-property>
<config-property name="MessageMarshallers">
org.jboss.qe.jdg.pojo.another.CustomerReport2:org.jboss.qe.jdg.remote.marshaller.AnotherCustomerReportMarshaller
</config-property>
</connection-definition>
</connection-definitions>
</resource-adapter>
{code}
Source model:
{code:xml}
<source name="jdgSource2" translator-name="infinispan-cache-dsl"
connection-jndi-name="java:/jdg-mat2-ds" />
<metadata type="DDL"><![CDATA[
CREATE FOREIGN TABLE Customer_Report2(
customerId integer not null OPTIONS (SEARCHABLE 'Searchable', NATIVE_TYPE
'int'),
CONSTRAINT PK_ID PRIMARY KEY(customerId)
) OPTIONS (NAMEINSOURCE 'rhel7openjdk1_8_localjdg-mat', UPDATABLE
TRUE);]]>
</metadata>
</model>
{code}
Then performing update query (INSERT, UPDATE, DELETE) causes problem.
Example query:
{code:sql}
INSERT INTO jdgSource2.Customer_Report2 VALUES (18);
{code}
results in:
{code:plain}
10:00:04,657 WARN [org.teiid.CONNECTOR] (Worker0_QueryProcessorQueue4) Connector worker
process failed for atomic-request=2v5rhJOyKrpA.2.0.2:
org.teiid.translator.TranslatorException: TEIID21005 Registered Class not found for table
Customer_Report2, check table name matches a registered class
{code}
If there's a requirement for equality between POJO class simple name and modelled
table name, it should be clearly stated in documentation as this is very important
limitation. Moreover Java classes and SQL tables tend to have different naming
conventions.