-
1. Re: JBOSS TEIID Designer view with Token in header properties - how to use DEV/UAT/QA/Production environment specific Tokens in View Model
rareddy Nov 24, 2018 2:46 PM (in response to cagreek)That looks correct. However by default ENV function is turned off for security reasons, you need to enable it. See System Functions · GitBook
-
2. Re: JBOSS TEIID Designer view with Token in header properties - how to use DEV/UAT/QA/Production environment specific Tokens in View Model
cagreek Nov 26, 2018 10:37 AM (in response to rareddy)Thank you Remesh,
we are using EAP 6.4. Is the option referred to in the System Functions link you provided added to the "STANDALONE.XML" file ?
This is the area in the standalone.xml that references teiid subsystem. When i try this and restart the server. it does not seem to pull the information from the environment variables set on windows.
<subsystem xmlns="urn:jboss:domain:teiid:1.0"><allow-env-function>true</allow-env-function>
<async-thread-pool>teiid-async</async-thread-pool>
<policy-decider-module>org.jboss.teiid</policy-decider-module>
<resultset-cache infinispan-container="teiid-cache"/>
<preparedplan-cache infinispan-container="teiid-cache"/>
<transport name="embedded"/>
<transport name="odata">
<authentication security-domain="teiid-security"/>
</transport>
<transport name="jdbc" socket-binding="teiid-jdbc" protocol="teiid">
<authentication security-domain="teiid-security"/>
</transport>
<transport name="odbc" socket-binding="teiid-odbc" protocol="pg">
<authentication security-domain="teiid-security"/>
<ssl mode="disabled"/>
</transport>
<translator name="jdbc-simple" module="org.jboss.teiid.translator.jdbc"/>
<translator name="jdbc-ansi" module="org.jboss.teiid.translator.jdbc"/>
<translator name="access" module="org.jboss.teiid.translator.jdbc"/>
<translator name="db2" module="org.jboss.teiid.translator.jdbc"/>
<translator name="derby" module="org.jboss.teiid.translator.jdbc"/>
<translator name="h2" module="org.jboss.teiid.translator.jdbc"/>
<translator name="hsql" module="org.jboss.teiid.translator.jdbc"/>
<translator name="informix" module="org.jboss.teiid.translator.jdbc"/>
<translator name="metamatrix" module="org.jboss.teiid.translator.jdbc"/>
<translator name="mysql" module="org.jboss.teiid.translator.jdbc"/>
<translator name="mysql5" module="org.jboss.teiid.translator.jdbc"/>
<translator name="oracle" module="org.jboss.teiid.translator.jdbc"/>
<translator name="postgresql" module="org.jboss.teiid.translator.jdbc"/>
<translator name="greenplum" module="org.jboss.teiid.translator.jdbc"/>
<translator name="sqlserver" module="org.jboss.teiid.translator.jdbc"/>
<translator name="sybase" module="org.jboss.teiid.translator.jdbc"/>
<translator name="sybaseiq" module="org.jboss.teiid.translator.jdbc"/>
<translator name="teiid" module="org.jboss.teiid.translator.jdbc"/>
<translator name="teradata" module="org.jboss.teiid.translator.jdbc"/>
<translator name="modeshape" module="org.jboss.teiid.translator.jdbc"/>
<translator name="ingres" module="org.jboss.teiid.translator.jdbc"/>
<translator name="ingres93" module="org.jboss.teiid.translator.jdbc"/>
<translator name="intersystems-cache" module="org.jboss.teiid.translator.jdbc"/>
<translator name="netezza" module="org.jboss.teiid.translator.jdbc"/>
<translator name="file" module="org.jboss.teiid.translator.file"/>
<translator name="ldap" module="org.jboss.teiid.translator.ldap"/>
<translator name="loopback" module="org.jboss.teiid.translator.loopback"/>
<translator name="olap" module="org.jboss.teiid.translator.olap"/>
<translator name="ws" module="org.jboss.teiid.translator.ws"/>
<translator name="salesforce" module="org.jboss.teiid.translator.salesforce"/>
<translator name="salesforce-34" module="org.jboss.teiid.translator.salesforce" slot="34"/>
<translator name="hive" module="org.jboss.teiid.translator.hive"/>
<translator name="google-spreadsheet" module="org.jboss.teiid.translator.google"/>
<translator name="odata" module="org.jboss.teiid.translator.odata"/>
<translator name="sap-gateway" module="org.jboss.teiid.translator.odata"/>
<translator name="sap-nw-gateway" module="org.jboss.teiid.translator.odata"/>
<translator name="mongodb" module="org.jboss.teiid.translator.mongodb"/>
<translator name="cassandra" module="org.jboss.teiid.translator.cassandra"/>
<translator name="accumulo" module="org.jboss.teiid.translator.accumulo"/>
<translator name="solr" module="org.jboss.teiid.translator.solr"/>
<translator name="excel" module="org.jboss.teiid.translator.excel"/>
<translator name="impala" module="org.jboss.teiid.translator.hive"/>
<translator name="prestodb" module="org.jboss.teiid.translator.prestodb"/>
<translator name="hbase" module="org.jboss.teiid.translator.hbase"/>
<translator name="hana" module="org.jboss.teiid.translator.jdbc"/>
<translator name="vertica" module="org.jboss.teiid.translator.jdbc"/>
<translator name="actian-vector" module="org.jboss.teiid.translator.jdbc"/>
<translator name="osisoft-pi" module="org.jboss.teiid.translator.jdbc"/>
<translator name="odata4" module="org.jboss.teiid.translator.odata4"/>
<translator name="redshift" module="org.jboss.teiid.translator.jdbc"/>
<translator name="jpa2" module="org.jboss.teiid.translator.jpa"/>
<translator name="ucanaccess" module="org.jboss.teiid.translator.jdbc"/>
<translator name="simpledb" module="org.jboss.teiid.translator.simpledb"/>
</subsystem>
</profile>
Steps 1: Setup the token key in system environment settings for windows.
2: Adjust view model code to use the pt_token in the View Model Variables.
BEGIN
DECLARE STRING VARIABLES.qp = QUERYSTRING('https://qa-pmtinsider.na.global.prv/api/v1/user/query', pmtinsider.getcustomerinfo.externalMid AS externalMid);
DECLARE STRING VARIABLES.envToken = ENV('pi_token');
SELECT A.userTypeCode AS userTypeCode, A.dateDisplayPreference AS dateDisplayPreference, A.firstName AS firstName, A.lastName AS lastName, A.internal AS internal, A.objArr AS objArr, A.lastLoginDate AS lastLoginDate, A.hyphenated AS hyphenated, A.userName AS userName, A.userId AS userId, A.email AS email, A.statusCode AS statusCode FROM (EXEC pmtinsidersource.invokeHttp(action => 'GET', endpoint => VARIABLES.qp, stream => 'TRUE', headers => CONCAT(CONCAT('{"Authorization":"', envToken), '"}'))) AS f, XMLTABLE('/response/response' PASSING JSONTOXML('response', f.result) COLUMNS userTypeCode string PATH 'userTypeCode/text()', dateDisplayPreference string PATH 'dateDisplayPreference/text()', firstName string PATH 'firstName/text()', lastName string PATH 'lastName/text()', internal string PATH 'internal/text()', objArr string PATH 'objArr/text()', lastLoginDate string PATH 'lastLoginDate/text()', hyphenated string PATH 'hyphenated/text()', userName string PATH 'userName/text()', userId string PATH 'userId/text()', email string PATH 'email/text()', statusCode string PATH 'statusCode/text()') AS A;
END
3. Viewing the data by right clicking the model from the id to enter the parameter value, we get these results in the console. Seems like the environment variable we setup is not being pulled in for the execution.
If i hard code the value in the view, everything works but we need to be able to pass in a value
Do you see any issue on my setup?
PROCESS PLAN =
ProjectNode(0) output=[userTypeCode AS userTypeCode, dateDisplayPreference AS dateDisplayPreference, firstName AS firstName, lastName AS lastName, internal AS internal, objArr AS objArr, lastLoginDate AS lastLoginDate, hyphenated AS hyphenated, userName AS userName, userId AS userId, email AS email, statusCode AS statusCode] [userTypeCode AS userTypeCode, dateDisplayPreference AS dateDisplayPreference, firstName AS firstName, lastName AS lastName, internal AS internal, objArr AS objArr, lastLoginDate AS lastLoginDate, hyphenated AS hyphenated, userName AS userName, userId AS userId, email AS email, statusCode AS statusCode]
JoinNode(1) [NESTED TABLE JOIN] [CROSS JOIN] output=[userTypeCode, dateDisplayPreference, firstName, lastName, internal, objArr, lastLoginDate, hyphenated, userName, userId, email, statusCode]
ProjectNode(2) output=[result] [pmtinsidersource.invokeHttp.result]
AccessNode(3) output=[pmtinsidersource.invokeHttp.result, pmtinsidersource.invokeHttp.contentType] EXEC pmtinsidersource.invokeHttp('GET', qp, TRUE, convert(CONCAT(CONCAT('{"Authorization":"', envToken), '"}'), clob))
XMLTableNode(4) output=[userTypeCode, dateDisplayPreference, firstName, lastName, internal, objArr, lastLoginDate, hyphenated, userName, userId, email, statusCode]
============================================================================
----------------------------------------------------------------------------
OPTIMIZATION COMPLETE:
PROCESSOR PLAN:
ProjectNode(0) output=[userTypeCode AS userTypeCode, dateDisplayPreference AS dateDisplayPreference, firstName AS firstName, lastName AS lastName, internal AS internal, objArr AS objArr, lastLoginDate AS lastLoginDate, hyphenated AS hyphenated, userName AS userName, userId AS userId, email AS email, statusCode AS statusCode] [userTypeCode AS userTypeCode, dateDisplayPreference AS dateDisplayPreference, firstName AS firstName, lastName AS lastName, internal AS internal, objArr AS objArr, lastLoginDate AS lastLoginDate, hyphenated AS hyphenated, userName AS userName, userId AS userId, email AS email, statusCode AS statusCode]
JoinNode(1) [NESTED TABLE JOIN] [CROSS JOIN] output=[userTypeCode, dateDisplayPreference, firstName, lastName, internal, objArr, lastLoginDate, hyphenated, userName, userId, email, statusCode]
ProjectNode(2) output=[result] [pmtinsidersource.invokeHttp.result]
AccessNode(3) output=[pmtinsidersource.invokeHttp.result, pmtinsidersource.invokeHttp.contentType] EXEC pmtinsidersource.invokeHttp('GET', qp, TRUE, convert(CONCAT(CONCAT('{"Authorization":"', envToken), '"}'), clob))
XMLTableNode(4) output=[userTypeCode, dateDisplayPreference, firstName, lastName, internal, objArr, lastLoginDate, hyphenated, userName, userId, email, statusCode]
============================================================================
ASSIGNMENT
DECLARE STRING VARIABLES.qp = QUERYSTRING('https://qa-pmtinsider.na.global.prv/api/v1/user/query', externalMid AS externalMid);
ASSIGNMENT
DECLARE STRING VARIABLES.envToken = null;
COMMAND STATEMENT:
SELECT userTypeCode AS userTypeCode, dateDisplayPreference AS dateDisplayPreference, firstName AS firstName, lastName AS lastName, internal AS internal, objArr AS objArr, lastLoginDate AS lastLoginDate, hyphenated AS hyphenated, userName AS userName, userId AS userId, email AS email, statusCode AS statusCode FROM (EXEC pmtinsidersource.invokeHttp('GET', qp, TRUE, convert(CONCAT(CONCAT('{"Authorization":"', envToken), '"}'), clob))) AS f CROSS JOIN XMLTABLE('/response/response' PASSING JSONTOXML('response', result) COLUMNS userTypeCode string PATH 'userTypeCode/text()', dateDisplayPreference string PATH 'dateDisplayPreference/text()', firstName string PATH 'firstName/text()', lastName string PATH 'lastName/text()', internal string PATH 'internal/text()', objArr string PATH 'objArr/text()', lastLoginDate string PATH 'lastLoginDate/text()', hyphenated string PATH 'hyphenated/text()', userName string PATH 'userName/text()', userId string PATH 'userId/text()', email string PATH 'email/text()', statusCode string PATH 'statusCode/text()') AS A;
STATEMENT COMMAND PROCESS PLAN:
ProjectNode(0) output=[userTypeCode AS userTypeCode, dateDisplayPreference AS dateDisplayPreference, firstName AS firstName, lastName AS lastName, internal AS internal, objArr AS objArr, lastLoginDate AS lastLoginDate, hyphenated AS hyphenated, userName AS userName, userId AS userId, email AS email, statusCode AS statusCode] [userTypeCode AS userTypeCode, dateDisplayPreference AS dateDisplayPreference, firstName AS firstName, lastName AS lastName, internal AS internal, objArr AS objArr, lastLoginDate AS lastLoginDate, hyphenated AS hyphenated, userName AS userName, userId AS userId, email AS email, statusCode AS statusCode]
JoinNode(1) [NESTED TABLE JOIN] [CROSS JOIN] output=[userTypeCode, dateDisplayPreference, firstName, lastName, internal, objArr, lastLoginDate, hyphenated, userName, userId, email, statusCode]
ProjectNode(2) output=[result] [pmtinsidersource.invokeHttp.result]
AccessNode(3) output=[pmtinsidersource.invokeHttp.result, pmtinsidersource.invokeHttp.contentType] EXEC pmtinsidersource.invokeHttp('GET', qp, TRUE, convert(CONCAT(CONCAT('{"Authorization":"', envToken), '"}'), clob))
XMLTableNode(4) output=[userTypeCode, dateDisplayPreference, firstName, lastName, internal, objArr, lastLoginDate, hyphenated, userName, userId, email, statusCode]
####################################################
####################################################
PROCEDURE PLAN :ProcedurePlan:
PROGRAM counter 0
0: ASSIGNMENT INSTRUCTION: VARIABLES.qp
1: ASSIGNMENT INSTRUCTION: VARIABLES.envToken
2: CREATE CURSOR RESULTSET INSTRUCTION - null
####################################################
-
3. Re: JBOSS TEIID Designer view with Token in header properties - how to use DEV/UAT/QA/Production environment specific Tokens in View Model
rareddy Nov 26, 2018 11:16 AM (in response to cagreek)Andy,
I suspect you are hitting the issue [1], I am not sure it is been patched in the release you are working with. You have three options
1) If you are Redhat customer you can raise a ticket with them.
2) Move to use latest community release of Teiid
3) You can write a simple UDF function, that mimics ENV and deploy and replace your code using that.
-
4. Re: JBOSS TEIID Designer view with Token in header properties - how to use DEV/UAT/QA/Production environment specific Tokens in View Model
cagreek Dec 13, 2018 11:27 AM (in response to rareddy)Hi Reddy
Thank you for your suggestions, but updating to the latest community will take some time to do and all our other services will needed to be retested so we need an alternative to that. We looked at the UDF but having trouble with that too.
We need your expertise for any other alternatives or solutions that you may be aware of. Is there a way we can store the Token value's in the standalone.xml and be able to use it during run-time when the JDV service is called for a specific environment (DEV, QA, UAT, or PROD)
below is the snippet we've been looking at . We tried the ENV function but without success .
Is there a way we can store a the TOKEN in the standalone.xml and be able to use it in the DECLARE STRING VARIABLES.envToken = ENV('pi_token'); section of the code below?
BEGIN
DECLARE STRING VARIABLES.qp = QUERYSTRING('https://qa-pmtinsider.na.global.prv/api/v1/user/query', pmtinsider.getcustomerinfo.externalMid AS externalMid);
DECLARE STRING VARIABLES.envToken = ENV('pi_token');
SELECT A.userTypeCode AS userTypeCode, A.dateDisplayPreference AS dateDisplayPreference, A.firstName AS firstName, A.lastName AS lastName, A.internal AS internal, A.objArr AS objArr, A.lastLoginDate AS lastLoginDate, A.hyphenated AS hyphenated, A.userName AS userName, A.userId AS userId, A.email AS email, A.statusCode AS statusCode FROM (EXEC pmtinsidersource.invokeHttp(action => 'GET', endpoint => VARIABLES.qp, stream => 'TRUE', headers => CONCAT(CONCAT('{"Authorization":"', envToken), '"}'))) AS f, XMLTABLE('/response/response' PASSING JSONTOXML('response', f.result) COLUMNS userTypeCode string PATH 'userTypeCode/text()', dateDisplayPreference string PATH 'dateDisplayPreference/text()', firstName string PATH 'firstName/text()', lastName string PATH 'lastName/text()', internal string PATH 'internal/text()', objArr string PATH 'objArr/text()', lastLoginDate string PATH 'lastLoginDate/text()', hyphenated string PATH 'hyphenated/text()', userName string PATH 'userName/text()', userId string PATH 'userId/text()', email string PATH 'email/text()', statusCode string PATH 'statusCode/text()') AS A;
END
Thank you.
-
5. Re: JBOSS TEIID Designer view with Token in header properties - how to use DEV/UAT/QA/Production environment specific Tokens in View Model
rareddy Dec 13, 2018 11:40 AM (in response to cagreek)Yes, you can also define in the standalone.xml file, see this thread on subject Variable Substitution in standalone.xml
-
6. Re: JBOSS TEIID Designer view with Token in header properties - how to use DEV/UAT/QA/Production environment specific Tokens in View Model
cagreek Dec 13, 2018 2:53 PM (in response to rareddy)Thank you for your quick response. Just to confirm, will the standalone.xml variable substitution work with EAP 6.4 ?
Regards,
Andy