This content has been archived and is no longer being updated. Links may not function; however, this content may be relevant to outdated versions of the product.
LinkedIn
Copied!

Table of Contents

Troubleshooting: InvalidParameterException, database column aliases not found after JDBC driver update (DB2 LUW driver v4.12.55)

Summary

The Pega log reports "InvalidParameterException: Column named <column name> was not found in SQL columns or embedded object" on PRPC 6.3 SP1 with DB2/LINUXX8664 using DB2 driver version 4.12.55. This error will occur anywhere PRPC tries to read a result set with database column aliases.

Apart from PRPC, the following query runs successfully against the DB2 database:

SELECT DISTINCT e.pzImplementationKey, e.pzPrimaryPageClassName, e.pzAppHash, c.pxHeight as pxClassHeight, e.pzAspect, a.pzAppHeight as pxappheight, e.pzExpirationTime, e.pzContextPathHash, e.pzInsKey FROM pr_sys_appcache_entry e, pr_sys_class_ancestors c, pr_sys_app_hierarchy_flat a WHERE e.pzrulename = {ACAAQueryPage.ruleName} AND e.pzruletype = {ACAAQueryPage.ruleType} AND e.pzcacheconfigid = {ACAAQueryPage.cacheConfigId} AND e.pzprimarypageclassname = c.pxclassname AND c.pxleafclassname = {ACAAQueryPage.appliesToClassName} AND e.pzapphash = a.pzapphash AND a.pztopapphash = {ACAAQueryPage.appHash} ORDER BY c.pxheight, a.pzappheight

The errors reported in the Pega log are caused by the fact that the DB2 JDBC 4.x drivers conform to the JDBC 4.0 standard, which changes how the results of a query are retrieved when aliases are part of the query.

Read the Reference cited and follow the Suggested Approach.

Error (example)

2013-02-21 16:35:16,720 [ http-0.0.0.0-8180-4] [ Developer] [ PegaRULES:06.03] (che.appcentric.AppShortcutImpl) ERROR dd976c2n12|144.14.22.132 Administrator@pega.com -

Failed to infer a shortcut from an AppCentric entry.

com.pega.pegarules.pub.clipboard.InvalidParameterException: Column named pxClassHeight was not found in SQL columns or embedded object

at com.pega.pegarules.data.internal.access.DatabaseRowSet.populate(DatabaseRowSet.java:480)

at com.pega.pegarules.data.internal.access.DatabaseRowSet.populate(DatabaseRowSet.java:319)

at com.pega.pegarules.data.internal.access.DatabasePreparedStatementImpl.getRowSet
(DatabasePreparedStatementImpl.java:1375)

at com.pega.pegarules.data.internal.access.RDBPageResultPackager.handleRowSet
(RDBPageResultPackager.java:789)

at com.pega.pegarules.data.internal.access.RDBPageResultPackager.packageResults
​(RDBPageResultPackager.java:298)

at com.pega.pegarules.data.internal.access.DatabaseImpl.list(DatabaseImpl.java:6019)

at com.pega.pegarules.data.internal.access.DatabaseImpl.executeRDB(DatabaseImpl.java:6461)

at com.pega.pegarules.data.internal.access.DatabaseImpl.executeRDB(DatabaseImpl.java:6422)

at com.pega.pegarules.data.internal.access.DatabaseImpl.executeRDB(DatabaseImpl.java:6403)

at com.pega.pegarules.generation.internal.cache.appcentric.
AppShortcutImpl.getInferredACCacheShortcut(AppShortcutImpl.java:504)

at com.pega.pegarules.generation.internal.cache.appcentric.RACacheAppCentricImpl.
inferGeneratedJavaFromExistingEntry(RACacheAppCentricImpl.java:2071)

at com.pega.pegarules.generation.internal.cache.appcentric.RACacheAppCentricImpl.find
(RACacheAppCentricImpl.java:876)

at com.pega.pegarules.generation.internal.cache.AssemblyCacheWrapper.find
(AssemblyCacheWrapper.java:781)

at com.pega.pegarules.generation.internal.assembly.FUAManagerImpl.getInternal
​(FUAManagerImpl.java:1315)

at com.pega.pegarules.generation.internal.assembly.FUAManagerImpl.get(FUAManagerImpl.java:1245)

at com.pega.pegarules.generation.internal.PRGenProviderImpl.get(PRGenProviderImpl.java)

Suggested Approach

The DB2 JDBC driver version 4.0 has been changed to support the JDBC 4.0 standard. One of the changes involves aliases.

  1. Read the Reference cited to understand how the IBM® Data Server Driver for JDBC and SQLJ Version 4.0 and later versions changes to conform to the JDBC 4.0 standard, compared to the IBM Data Server Driver for JDBC and SQLJ Version 3.50 and earlier JDBC drivers.
    The values returned for ResultSetMetaData.getColumnName and ResultSetMetaData.getColumnLabel are different.
  2. If you plan to use DB2 JDBC driver version 4.0 or later version, set the connection property as follows:

    <connection-property name="useJDBC4ColumnNameAndLabelSemantics">2</connection-property>

  3. Alternative to Step 2: Return to using the DB2 JDBC driver version 3.5.

Reference

ResultSetMetaData returns different values for the IBM Data Server Driver for JDBC and SQL Version 4.0

Did you find this content helpful?

100% found this useful

Have a question? Get answers now.

Visit the Collaboration Center to ask questions, engage in discussions, share ideas, and help others.