BASE24-eps - UIS Developers Guide
BASE24-eps - UIS Developers Guide
BASE24-eps - UIS Developers Guide
All information contained in this documentation, as well as the software described in it, is
confidential and proprietary to ACI Worldwide, Inc., or one of its subsidiaries, is subject to a
license agreement, and may be used or copied only in accordance with the terms of such license.
Except as permitted by such license, no part of this documentation may be reproduced, stored in
a retrieval system, or transmitted in any form or by electronic, mechanical, recording, or any other
means, without the prior written permission of ACI Worldwide, Inc., or one of its subsidiaries.
ACI, ACI Worldwide, and the ACI product names used in this documentation are trademarks or
registered trademarks of ACI Worldwide, Inc., or one of its subsidiaries.
Other companies’ trademarks, service marks, or registered trademarks and service marks are
trademarks, service marks, or registered trademarks and service marks of their respective
companies.
2
TABLE OF CONTENTS
1. DOCUMENT PREFACE.............................................................................. 6
3
TABLE OF CONTENTS
2.7.5 root.config......................................................................................... 23
2.7.6 SCH.................................................................................................. 23
2.7.7 Contingency Properties .................................................................... 23
5.1 Formatter................................................................................................ 68
5.1.1 es.server.formatter.xml.ESXMLFormatter ........................................ 68
5.1.2 com.aciworldwide.common.formatter.NullFormatter......................... 71
5.2 Command............................................................................................... 72
5.2.1 Single Data Source Action................................................................ 73
5.2.2 Multi-Data Source Action (related) ................................................... 74
5.2.3 Multi-Data Source Action (unrelated)................................................ 74
5.2.4 Data Source Action with Continue Conditionals ............................... 75
5.3 Command-Level Filtering ....................................................................... 76
6. Components/Services ............................................................................... 77
4
TABLE OF CONTENTS
7.3 Create a New Data Source..................................................................... 92
7.4 Modify an Existing Data Source ............................................................. 93
7.5 Create/Modify Data Validations .............................................................. 94
7.6 Create a Custom Data Component ........................................................ 95
7.7 Create a Custom Data Source Service .................................................. 96
7.8 Implement Different Input Protocols/Message Formats.......................... 97
7.8.1 New Protocol Support....................................................................... 97
7.8.2 New Message Format Support ......................................................... 97
7.9 Implement Pass-Thru Processing .......................................................... 99
7.9.1 Straight Pass-Thru............................................................................ 99
7.9.2 Straight Pass-Thru w/ USEC Support..............................................101
7.9.3 Integrated Workflow.........................................................................103
7.10 Solve Various Development Issues ....................................................105
7.10.1 Code/Configuration Check List .....................................................105
7.10.2 Task ID/Function ID Specification.................................................106
7.10.3 Data Type Conversion between DALCI/SIS and UISs .................107
7.10.4 Customizing Data Components/Services w/ Copy Files...............108
7.10.5 Customizing Request/Response Data Handling...........................109
7.10.6 Maximum Number of Data Rows Retrieval...................................111
7.10.7 Updating of Primary Key Fields ....................................................112
7.10.8 Implementing Filtering Support.....................................................114
7.10.9 Implementing Dynamic SQL Table Access Support .....................115
7.10.10 Start/End Key Data Retrieval Support .......................................116
8. Appendix ..................................................................................................117
5
1. DOCUMENT PREFACE
1.2 Overview
The primary focus of this document is to discuss how to configure and code the
BASE24-eps UIServer (here-in referred to as UIS) environment and build additional
processing components with the architecture. Areas covered include:
XML Usage
o Usage and rules for message processing
o Usage and rules for data validations
Formatter/Command configuration
Data access components/services
How-to Guidelines
The following reference documents should be used to support UIS development efforts:
Version : Document:
1.0 ACI Java Framework Development Guide
6
2. BASE24-eps UIS Startup/Runtime Configuration
The following subsections will discuss startup and runtime properties in the
config.properties file and APPLCNFG database table that have a direct impact on the
UIS implementation. This includes existing JSF properties as well as UIS properties.
The JSF provides auditing services to the UIS environment. To manage the user audit
log file contents, several settings are required. These settings are discussed in the
following subsections.
2.1.1 cleanup.userauditlog.retention.days
[Required - APPLCNFG] This property is used by the audit cleanup task. It defines the
number of days to leave records in the audit log.
2.1.2 cleanup.userauditlog.cleanup.starttime
[Required - APPLCNFG] This property defines the time of day to start the audit
cleanup task.
2.1.3 cleanup.userauditlog.timeperiod.hours
[Required - APPLCNFG] This property defines the time period (in hours) between audit
cleanup processing. If the cleanup process should be run more frequently, this value
should be set lower.
2.1.4 timertask.function.#.classname
[Required – config.properties] This property contains the class name of the Java
component that performs the audit log cleanup. If additional timer task-based classes
are implemented, the numeric value must be incremented from 0 by 1. For BASE24-eps
audit cleanup, a property will be set as follows:
timertask.function.0.classname=
com.aciworldwide.common.timertask.UserAuditLogCleanup
7
Note: If additional product or CSM processes are required to execute based on timer
functionality, they can be added under additional entries of this property, however, those
classes must implement the JSF interface class of:
com.aciworldwide.framework.TimerTaskInterface
2.1.5 timertask.manager.processid
8
2.2 Database Startup Properties
The JSF provides DBService and CacheManager processes that work in tandem to
provide high-performance data access. To support configuration of these 2 services, an
array of db.* properties are supported that cover configuration of the following areas:
Auditing
Database access
JDBC driver details
2.2.1 db.connection.wait.time
db.connection.wait.time=1000
2.2.2 db.datasource
db.datasource=jdbc:JDAL:-MDBV=CSV:-AI=ES:-STRT=/G/system/nw01data
2.2.3 db.driver
[Required – config.properties] This property specifies the class name of the JDBC
driver to use for all database connections. The whole package name, as it is found in
the jar containing the driver, should be specified. Refer to specific vendor
documentation for supporting information.
db.driver=com.aciworldwide.jdbcdriver.jdal.JDALDriver
Note: For a BASE24-eps DALCI controlled database, the db.driver and db.datasource
specifications will be made using the ACI JDAL database driver.
9
2.2.4 db.max.connections
db.max.connections=10
2.2.5 db.static.connections
db.static.connections=2
2.2.6 db.type
DB2
JDAL
JDAL2
MSSQL
ORACLE
SQLMX
db.type=JDAL
2.2.7 db.user.id
[Required – config.properties] This property indicates the user ID that should be used
to securely access the underlying database. A Database or a Security Administrator will
typically establish the user ID.
db.user.id=myuser
10
2.2.8 db.user.password
[Required – config.properties] This property indicates the user password that should
be used to securely access the underlying database. A Database or a Security
Administrator will typically establish the user password with the user ID.
db.user.password=c67834a7b2e28c4e
Note: If database passwords are stored in the config.properties file they must be
encrypted. The encryption process requires both the user ID and the password values
to generate the encrypted password. The utility to perform the encryption is available via
the JSF. The user password value can also be left blank for access that does not
require a user ID and/or password.
11
2.3 Event/Trace Logging Properties
Event Logging
Trace Logging
Both of these mechanisms are further described in the ACI Java Framework
Development Guide. The config.properties entries that will require configuration in all
UIS installations follow.
2.3.1 event.config
[Required – config.properties] This property identifies the fully qualified URI location
of where the EventConfig.xml configuration file resides. The EventConfig.xml
configuration file provides further configuration details to the JSF EventManager
service.
event.config=file:///C:/ESWeb/ESConfig/EventConfig.xml (Windows)
or
event.config=file:///user/ESWeb/ESConfig/EventConfig.xml (UNIX)
2.3.2 trace.config
[Required – config.properties] This property identifies the fully qualified URI location
of where the TraceConfig.xml configuration file resides. The TraceConfig.xml
configuration file provides further configuration details to the JSF TraceManager
service.
trace.config=file:///C:/ESWeb/ESConfig/TraceConfig.xml (Windows)
or
trace.config=file:///user/ESWeb/ESConfig/TraceConfig.xml (UNIX)
12
2.4 Initialization Properties
The UIS implementation of the JSF currently supports services that can be started at
initialization by the JSF InitializationManager. The InitializationManager will retrieve 0
or more entry sets of initialization properties that identify the Java class to be started and
its initialization entry method.
Currently, the UIS implementation supports services that can be started by the JSF
InitializationManager. These services are:
es.server.common.DataValidatorManager
es.server.formatter.xml.MessageSchemaManager
es.server.framework.TransactionMapManager
com.aciworldwide.framework.TransactionMapManager
usec.common.USECManager
es.server.common.OLTPAssignManager
com.aciworldwide.framework.pools.SAX2ParserManager
com.aciworldwide.application.audit.formatter.jaxb.JAXBContextManager
com.aciworldwide.common.MessageRouterService
initialization.function.0.classname=
es.server.common.DataTypeValidationManager
initialization.function.1.classname=
es.server.framework.TransactionMapManager
initialization.function.2.classname=
com.aciworldwide.framework.TransactionMapManager
initialization.function.3.classname=
es.server.common.DataValidatorManager
initialization.function.4.classname=
es.server.formatter.xml.MessageSchemaManager
initialization.function.5.classname=
com.aciworldwide.application.security.USECManager
initialization.function.6.classname=
es.server.common.OLTPAssignManager
initialization.function.7.classname=
com.aciworldwide.framework.pools.SAX2ParserManager
initialization.function.8.classname=
com.aciworldwide.application.audit.formatter.jaxb.JAXBContextManager
initialization.function.9.classname=
com.aciworldwide.application.pci.masking.formatter.jaxb.JAXBContext
Manager
13
initialization.function.10.classname=
com.aciworldwide.common.MessageRouterService
2.4.1 initialization.function.#.classname
[Optional - APPLCNFG] This property identifies the fully qualified Java package and
class name to be started. Each class name entry must set the # to a number starting at
0 and incrementing by 1.
initialization.function.0.classname=
es.server.framework.TransactionMapManager
14
2.5 BASE24-eps Properties
Miscellaneous
config.home
Note: File locations in the UIS implementation are handled as direct file specifications.
However, throughout the config.properties and APPLCNFG entries that are being
discussed and throughout the XML Schema support discussed in Section 4, all file
specifications are handled as relative URIs. To resolve the relative URIs to file
specifications, all UIS-based applications will append the config.home property, found
in the config.properties file and discussed in Section 2.5.1, to each relative URI. This
2
was done so that configuration files could be more easily managed and configured from
a central location.
2.5.1 config.home
Note: The value established for this field must follow one of the example entries listed
below and must end in a forward slash /.
config.home=C:/ESWeb/ES044/ESConfig/
(Windows)
or
config.home=/user/mydir/ESWeb/ESConfig/
(UNIX)
15
2.6 APPLCNFG Properties
Additional UIS configuration properties exist in the APPLCNFG database table. The
JSF ConfigManager looks in both the config.properties (first) and the APPLCNFG
(second) to locate requested property settings. An attempt to retrieve a property is first
made based on the current system process ID (i.e. BASE24-EPSUI). If the property is
not found, a second attempt is made to locate the property based on a default process
ID (*).
The properties and values listed in this sub-section reflect those that will be managed
under the APPLCNFG table for BASE24-eps.
The JSF provides DBService and CacheManager that work in tandem to provide high-
performance data access. To support configuration of these 2 services, an array of db.*
properties are supported in the config.properties file that cover configuration of the
following areas:
Auditing
Database access
JDBC driver details
2.6.1.1 db.audited
Delete
Insert
Update
View
This setting is initially loaded into the APPLCNFG data source from the load file
scripts/ESAPPLCD load script.
16
2.6.1.2 db.audited.[service name]
[Optional] This property identifies the level of auditing to be performed against a data
source. The lowercase <service name> should be set to an actual data source service
name and there can be multiple occurrences of this property, 1 for each data source
service requiring auditing support. Valid values are:
The current list of supported 8.2 UIS services is covered in the <get manual name>.
[Optional] This property indicates that database access performed on the specified
service is to utilize the database service caching mechanism (CacheManager). All SQL
queries, except the fetchbyDataObject method, will first search the database services
cache for data. If the data is not found, it will update the cache with the data source
information retrieved. This functionality should be used for tables that are updated
infrequently, or read frequently and contain a small number of rows. The lowercase
<service name> should be set to an actual data source service name and there can be
multiple occurrences of this property, 1 for each data source service requiring caching
support.
The current list of supported 8.2 UIS services is covered in the <get manual name>.
17
2.6.2 Event/Trace Logging Properties
Event Logging
Trace Logging
Both of these mechanisms are further described in the ACI Java Framework
Development Guide. The APPLCNFG entries that will require configuration in all UIS
installations follow.
2.6.2.1 trace.enabled
[Required] This property identifies whether trace messages are enabled for
components/services executing with the JSF. Tracing of messages is configured within
the TraceConfig.xml file that is used by the JSF TraceManager service.
Note: Only set this property to true during development, debugging, or to uncover
production problems; do not run production environments with trace unless necessary.
This setting is initially loaded into the APPLCNFG data source from the load file
scripts/ESAPPLCD load script.
2.6.2.2 trace.dataobject.enabled
[Optional] This property identifies whether trace messages are enabled for data object
output from the JSF. Tracing of messages is configured within the TraceConfig.xml file
that is used by the JSF TraceManager service. When set to true, the UIS
MessageSchema class will dump traces of the contents of the primary data object
during request message processing and response message building.
Note: Only set this property to true during development, debugging, or to uncover
production problems; do not run production environments with trace unless necessary.
This setting is initially loaded into the APPLCNFG data source from the load file
scripts/ESAPPLCD load script.
18
2.6.3 BASE24-eps Properties
The UIS implementation of the JSF supports additional configuration properties. At this
time, these properties are primarily associated with BASE24-eps, and fall under the
following categories:
Application Management
amptc.connectionID
Data Support
db.upshiftdata
Filtering Support
filter.field.[task].#
Miscellaneous
process.id
ptc.connectionID
ptcf.connectionID
report.userauditlog.loc
Note: File locations in the UIS implementation can be handled as direct file
specifications. However, throughout the APPLCNFG entries that will be discussed in
the following sub-sections and throughout the XML Schema support discussed in
Section 4, all file specifications are handled as relative URIs. To resolve the relative
URIs to file specifications, all UIS applications will append the config.home property,
found in the config.properties file and discussed in Section 2.5.1, to each relative URI.
2
This was done so that configuration files could be more easily managed and configured
from a central location.
2.6.3.1 amptc.connectionID
amptc.connectionID=APPLICATION-MGMT
2.6.3.2 db.upshiftdata
[Required] This property indicates if application level support of upshifting string data
should be performed. Upshifting of data needs to be handled at the app level when
working with Enscribe or VSAM data. Otherwise, a respective SQL database may
handle upshifting requirements in which case this property could be set to false.
19
Valid values are true and false.
This setting is initially loaded into the APPLCNFG data source from the
scripts/ESAPPLCD load script.
2.6.3.3 filter.field.[task].#
[Optional] This property indicates field filter support for specific task Ids ([task]). If field
level filtering is being performed on behalf of a specific task, then 1 or more property
settings will be established for that task ID and its filtered field(s) with multiple entries
being identified with incrementally numeric (#) values starting at 0. This property guides
the UIS implementation to map incoming data values from logical elements to a field ID
understood by the filtering implementation from USEC. Values are depicted as 3 parts
(semi-colon separated):
1. Identifier of: F – filter only; M – USEC maintenance only; and B – both filter and
maintain.
2. The field ID known to USEC for filtering
3. The logical element in the message that contains the data.
filter.field.InstitutionConfiguration.0=F;InstitutionID;instdInstitution
ID
Filtering support also requires transmap filter class specification. Refer to Section 3.1.1
for further transmap filtering discussion.
2.6.3.4 ptc.connectionID
ptc.connectionID=BASE24-eps/C++XMLServer
This setting is initially loaded into the APPLCNFG data source from the
scripts/ESAPPLCD load script. Additional product or CSM settings could be loaded in
from other similar files.
20
2.6.3.5 ptcf.connectionID
ptcf.connectionID=BASE24-eps/C++XMLServer Formatted
This setting is initially loaded into the APPLCNFG data source from scripts/ESAPPLCD
load script. Additional product or CSM settings could be loaded in from other similar
files.
2.6.3.6 report.userauditlog.loc
[Optional] This property indicates the directory location where requested User Audit
Log reports will be placed. The directory must already exist; the UIS will not create the
directory.
This setting is initially loaded into the APPLCNFG data source from the
scripts/ESAPPLCD load script.
Note: When setting the value for this property, use of “\” for NT environments versus “/”
for Unix environments must be observed.
21
2.7 System Properties
The system properties identified in this section are configured at the Web Server level as
additional JVM arguments.
The following system properties are required to execute the Web Server environment for
the UISs:
2.7.1 config.filename
[Required] This property identifies to the UIS environment where the primary
config.properties file is located. Most configuration properties are maintained in the
JSF APPLCNFG table; however, core properties necessary for system startup are
maintained in the physical properties file. Hence, the location of that file must be
specified with this system property.
The config.properties file can be located under the default directory for the user’s
machine (i.e. C:\Document and Settings\User 1) or it can be located elsewhere and
specified to the framework environment at startup via the following system property:
The config.properties file contains a handful of key/value pairs that are used
throughout various framework services. Components and services request property
value information from the JSF ConfigManager service.
2.7.2 jdal.trace
[Optional] This property identifies if jdal level tracing is turned on or off. When set to
true, additional trace messages will be echoed to the standard out file for each database
function performed that goes through jdal. To turn this tracing off, set the property to
false.
NOTE: This property should not be set to true for production environments and should
only be used in extreme error evaluation situations.
2.7.3 jdal.trace.method
[Optional] This property identifies if jdal method level tracing is turned on or off. When
set to true, additional trace messages will be echoed to the standard out file for each
jdal method access. To turn this tracing off, set the property to false.
NOTE: This property should not be set to true for production environments and should
only be used in extreme error evaluation situations.
22
2.7.4 process.id
[Required] This property identifies the key value into many JSF tables containing
configuration information (i.e. APPLCNFG). Use of this system property allows multiple
configurations/Web Servers to share the same JSF database implementation while
maintaining unique processing requirements.
2.7.5 root.config
[Required] This property identifies the root location of where the Modules.lst,
Global.cfg, and the GlobalPrefs.cfg files reside. These files are used by specific UIF
components that are shared from the UIS.
2.7.6 SCH
Note: Support of this feature from the ES desktop client requires the configuration file of
../ES/desktop/DesktopLauncher.lax to include the system property setting of –
DSCH=true.
The following properties, when added, will implement the UIS contingency support.
2.7.7.1 cjsaf.enabled
[Optional] This property turns the contingency support on or off. To turn contingency
support on, set the value to true. To disable contingency support, set the value to false
or remove the property.
2.7.7.2 cjsaf.sleep
[Optional] This property identifies, in seconds, the amount of time for the
ContingencySAFProcess to wait between processing runs. When the process begins,
it will continue until all SAF records have been processed before returning to the
wait/sleep state.
2.7.7.3 cjsaf.retry
[Optional] This property identifies the number of times a SAF record will be retried for
processing before being deleted from the SAF. If a send failure does occur,
informational and record details will be written to the critical event log.
23
3. BASE24-eps UIS Code/Configuration
With the exception of the config.properties configuration file, all other configuration files
used within UIS are managed via XML files. Configuration files provided by the UIS
implementation include:
<transmap>.xml
<XML message schema>.xml
<Data Source>Gen.xml
Additionally, there are two other XML-based configuration files, used within the
environment, that are provided by the JSF. Those files:
EventConfig.xml
TraceConfig.xml
The use and configuration of these files is discussed in the ACI Java Framework
Development Guide.
Note: All XML usage within the UIS environment follows the current W3C 2001 XML
Schema standards and guidelines found at http://www.w3.org/XML/Schema.
24
3.1.1 < Transaction Map>.xml
The location of the XML message schema to use for processing the message
The data component(s), and required method, that will be accessed to process the request
The continue and stop conditionals associated with multiple commands and/or multiple
transactions
BASE24-eps Note: Naming of these files should match the naming of the *.cfg file
located on the UI side.
25
3.1.1.1 XML Syntax
<transactions>
[Required] One <transactions> tag entry allowed.
<entry>
[Required] Multiple <entry> tags are allowed.
<tag>
[Required] Must contain the request identifier that will be
found in the root tag of the XML request message. One <tag>
tag entry allowed per <entry> group.
</tag>
<task>
[Optional] Must contain an associated UI task ID value. The
<task> and <function> values will be used to verify a user’s
security permissions to perform the configured actions.
This is specific to the ES UI environment. One <task> tag
entry allowed per <entry> group. For BASE24-eps, this
value will also serve as the file name of the transaction
map file.
</task>
<filter>
[Optional] One <formatter> tag entry allowed per <entry>
group.
<class>
[Required] Must contain the fully qualified Java filter
component name. The filter class is responsible for
providing database layer list filtering. One <class>
tag entry allowed per <filter> group.
</class>
</filter>
26
<formatter>
[Required] One <formatter> tag entry allowed per <entry>
group.
<class>
[Required] Must contain the fully qualified Java
formatter component name. The formatter class is
responsible for directing other components to break
request messages down into internal DataObject values
and for building response messages from internal
DataObject values. One <class> tag entry allowed per
<formatter> group.
</class>
</formatter>
<command>
[Required] Multiple <command> tag entries are allowed.
<contconditions>
[Optional] One <contconditions> tag entry allowed
per <command> group.
<class>
[Required] Must contain the fully qualified Java command
component name. The command class is responsible for
directing access to data or business components to that
will perform the required work. One <class> tag entry
allowed per <command> group.
</class>
27
<transaction>
[Required] Multiple <transaction> tag entries are
allowed.
<contconditions>
[Optional] One <contconditions> tag entry
allowed per <transaction> group.
<component>
[Required] Must contain the fully qualified Java
data/business component name. Component classes can
be responsible for directing access to underlying
data sources, directing access to other non-Java
components, and for providing complex business
logic. One <component> tag entry allowed per
<transaction> group.
</component>
28
The maxRows attribute should be used when the number
of data rows retrieved by DBService and returned in
the response message must be restricted (i.e.
because of message size, performance, etc.). This
attribute is only valid for getBy methods; it will
not be applicable to get or getAll methods. If this
attribute is not present, all data rows that meet
selection criteria will be retrieved. If this
attribute is present with a valid numeric value,
only that number of rows will be retrieved and
returned. In this latter case, the response code
that will be returned to the client will depend on
the presence of more rows. Those codes are:
File_OK - more data rows exist
File_Exhausted - all data rows returned
29
3.1.1.2 Example Configuration
30
<function>Save</function>
<formatter>
<class>es.server.formatter.xml.ESXMLFormatter</class>
</formatter>
<command>
<class>es.server.command.ESTransCommand</class>
<transaction>
<component>es.server.datasource.ContextCfgComponent
</component>
<method>update</method>
</transaction>
</command>
</entry>
<entry>
<tag>ContextConfigViewRq</tag>
<task>ContextConfiguration</task>
<function>View</function>
<formatter>
<class>es.server.formatter.xml.ESXMLFormatter</class>
</formatter>
<command>
<class>es.server.command.ESSimpleCommand</class>
<transaction>
<component>es.server.datasource.ContextCfgComponent
</component>
<method>get</method>
</transaction>
</command>
</entry>
</transactions>
31
3.1.2 <Data Source>Gen.xml
Configuration of data source tables/files including column/field names, data types (internal
and external), overriding constraints, and primary and alternate keys
Configuration of common processing actions (add, delete, update, etc.) and extended
processing actions (alternate fetches and deletes) that will be created in the generated
component or service code
Configuration of custom code that can be included in the generated component or service
code
These configuration files are used as input into the following generators:
ServiceGenerator
The ServiceGenerator is used to create the data source specific access code that buffers
application components from data access handling. Service components typically have a
one-to-one relationship with the underlying data source.
ComponentGenerator
The ComponentGenerator is used to create the data component source that is used to
access functionality from the generated service components. Data components also provide
ancillary support such as data validation handling and field requirement checking.
ESConfig/
32
ESConfig/datasource
This directory contains a master batch file for calling all individual data source
creation batch files from lower level directories.
ESConfig/datasource/gens/<data source>
Although not enforced with the code generation, it is highly recommended that
each method written as copy code be represented in its own Java Copy File (jcf).
Hence, the <method name> would be set to the actual method name with the file
extension being jcf. The jcf file should contain the JavaDoc header information,
the method declaration, and all supporting code. A jcf file can also be created to
contain just import statements (set <method name> to something like import),
just additional global variables (set <method name> to something like
globalVariables) or a combination of global variables and a method – a jcf should
never contain import statements combined with anything else as the import
statements are placed outside of the component class definition.
Additional jcf files, which can be referenced by 2 or more data source code
generations, may also exist under ESConfig/datasource/gens/common
33
3.1.2.1 XML Syntax
<table>
One <table> entry allowed per configuration file.
<name>
Contains the name of table or file in data source. For
BASE24-eps, this is the assign name equivalent of the data
source as implemented under DALCI/SIS (i.e. Context
Configuration (ctxcd) would be CONTEXT_CONFIGURATION).
</name>
<columns>
One <columns> entry allowed per <definition> configuration
file.
<column>
Multiple <column> entries allowed, 1 per each column.
34
set to true. This specification should NOT be put
on primary key columns as they are not updateable by
default. Doing so will disable usage of
<sqldefault> settings for primary key columns.
<logicalname>
Internal data name applied to this column or field.
<physicalname>
Identifies actual table/file column/field name.
</physicalname>
<javatype>
Identifies internal Java data type of this column or
field. Valid types are (lower-case required):
boolean
byte[]
double
float
int
long
short
string
string_no_trim
timestamp
</javatype>
35
<sqltypesize>
[Optional] Used by the ComponentGenerator. Required
if the pad attribute was specified for the column
and set to true. If <javatype> is defined as String
or a type that requires a size value (i.e. (32)),
the numeric size should be indicated with this
element.
</sqltypesize>
<sqldefault>
[Optional] Used by the ComponentGenerator to
establish data validation checks. Contains default
value of this column or field as used by the data
source. Valid values are:
NULL
NOT NULL (default if this element is not
supplied)
Or specific value (i.e. 1234; encasing quotes
should NOT be supplied)
</sqldefault>
</column>
</columns>
<prikey>
One <prikey> entry allowed per configuration file.
<colnumber>
Contains column number, from <columns> group, included
in primary key. Multiple entries are allowed but they
must be in desired key order.
</colnumber>
</prikey>
</table>
<abbreviation>
Contains an abbreviation for the table or file. One
<abbreviation> entry allowed per configuration file. For
BASE24-eps, this value should be set to the short DDL name of
the data source (i.e. for Context Configuration this would be
ctxcd). This is used to name element map and message elements
files under ESConfig/elmtmaps and ESConfig/schemas/lib
respectively. This value should also match the gens directory
name and the prefix portion of the *Gen.xml file name.
</abbreviation>
<constants>
One <constants> group allowed per configuration file.
<file>
Contains the package location of a constant file (i.e.
com.aciworldwide.CommonConstants) to be included in the
generated code. Multiple <file> entries are allowed and
will be included as import statements in both Component and
Service generated code.
</file>
</constants>
<service>
36
One <service> group allowed per configuration file.
<name>
Contains the name of the data source service to be
generated.
</name>
<package>
Contains the Java qualified package location where the
generated data source service code will be placed (i.e.
es.server.datasource.database).
</package>
<type>
Contains the type of service to be generated. Valid values
are:
<component>
One <component> group allowed per configuration file.
<name>
Contains the name of the data source component to be
generated.
</name>
<package>
Contains the Java qualified package location where the
generated data source service code will be placed (i.e.
es.server.datasource).
</package>
</component>
<commonfunctions>
[Optional] One <commonfunctions> group allowed per
configuration file. If not specified, no add, delete, or
update methods will be generated.
37
[Optional] Set to true to indicate add functionality should
be provided in component and service.
<addmulti>
[Optional] Set to true to indicate multi-add functionality
should be provided in component and service.
</addmulti>
<deletemulti>
[Optional] Set to true to indicate multi-delete
functionality should be provided in component and service.
</deletemulti>
<getcolinfo>
[Optional] Set to true to indicate getcolinfo functionality
should be provided in component and service.
</getcolinfo>
<readnext>
[Optional] Set to true to indicate that a full primary key
read next capability should be provided in component and
service. This should only be used if the primary key has
more than 1 key field AND progressive read nexts are
required (i.e. x number of rows at a time with last key data
sent in subsequent requests).
</readnext>
<updatemulti>
[Optional] Set to true to indicate multi-update
functionality should be provided in component and service.
</updatemulti>
</commonfunctions>
<deleteby>
[Optional] One <deleteby> group allowed per configuration file.
38
<entry>
Multiple <entry> groups are allowed for <deleteby>.
<name>
Contains the name that will be appended to the generated
method name:
<multi>
[Optional] Set to true to indicate multi-delete
functionality should be provided in component and
service for this deleteBy entry.
<multi>
<wherecolumns>
One <wherecolumns> group allowed per <entry>.
<suffix>
[Optional] Contains additional SQL requirements that
will be appended to the SQL query generated. One
<suffix> group allowed per <entry>.
</suffix>
</entry>
</deleteby>
<fetchby>
[Optional] One <fetchby> group allowed per configuration file.
<entry>
Multiple <entry> groups are allowed for <fetchby>.
<name>
Name to be appended to the generated method name:
<timestampcolumn>
[Optional] Indicates the Timestamp column number, from
<columns> group, to use for ‘>=’ and ‘<’ time checks in
WHERE clause.
39
If <wheresets> are being configured, the value provided
by this tag will be applied to ALL <wheresets>
configured.
</timestampcolumn>
<orderbycolumns>
[Optional] One <orderbycolumns> group allowed per
<entry>.
<colnumber>
Contains the column number, from <columns> group, to
include in this specific fetch by instance.
Multiple <colnumber> entries are allowed and will be
used in an ORDER BY clause that will be appended to
the generated SQL statement.
</colnumber>
</orderbycolumns>
<retrievecolumns>
[Optional] One <retrievecolumns> group allowed per
<entry>.
<wherecolumns>
[Optional] One <wherecolumns> group allowed per <entry>.
Not allowed if <wheresets> is present.
<wheresets>
[Optional] One <wheresets> group allowed per <entry>.
Not allowed if <wherecolumns> is present.
<entry>
40
Multiple <entry> groups are allowed for <fetchby>.
<name>
Extension name of <wheresets> entry.
</name>
<orderbycolumns>
[Optional] see <orderbycolumns> definition above.
<colnumber>
...
</colnumber>
</orderbycolumns>
<retrievecolumns>
[Optional] see <retrievecolumns> definition
above.
<wherecolumns>
[Optional] see <wherecolumns> definition above.
<suffix>
[Optional] see <suffix> definition below.
</suffix>
</entry>
</wheresets>
<suffix>
[Optional] Contains additional SQL requirements that
will be appended to the SQL query generated (i.e. GROUP
BY fld1). One <suffix> group allowed per <entry>.
</suffix>
</entry>
<grouping>
Multiple <grouping> groups are allowed for <fetchby>.
<name>
Name to be appended to the generated method name:
<method2>
41
Name of second fetchBy method to use in logic
processing. Do not specify fetchBy as part of name;
only specify <name> value from specific fetchBy entry
configured.
</method2>
<colnumber>
Contains the column number, from table <columns> group,
to include in this specific grouping. Multiple
<colnumber> entries are allowed and will be used in the
conditional list generated.
</colnumber>
</grouping>
</fetchby>
<updateby>
[Optional] One <updateby> group allowed per configuration file.
<entry>
Multiple <entry> groups are allowed for <updateby>.
<name>
Name to be appended to the generated method name:
<multi>
[Optional] Set to true to indicate multi-update
functionality should be provided in component and
service for this updateBy entry.
<multi>
<setcolumns>
[Required] One <setcolumns> group allowed per <entry>.
<colnumber>
Contains the column number, from <columns> group, to
include in this specific order by set instance.
Multiple <colnumber> entries are allowed and will be
used to identify the column set list for the
generated SQL UPDATE statement.
<wherecolumns>
[Optional] One <wherecolumns> group allowed per <entry>.
42
Contains the column number, from <columns> group, to
include in this specific update by instance.
Multiple <colnumber> entries are allowed and will be
used in the WHERE clause of the generated SQL
statement.
<compcodeblock>
[Optional] Used by ComponentGenerator to generate component
code. One <compcodeblock> group allowed per configuration
file.
<import>
[Optional] One <import> group allowed per <compcodeblock>.
<value>
Multiple <value> entries are allowed per <import> group.
Each entry identifies a Java import statement to include
in generated service code. For example:
import java.sql.Timestamp;
</value>
<include>
Multiple <include> entries are allowed per <import>
group. Import statements can be be placed in a jcf file
and included in the code generation. The <include>
should specify the relative file/directory location that
will be appended to the config.home property from the
config.properties file.
</include>
</import>
<static>
[Optional] One <static> group allowed per <compcodeblock>.
<include>
Multiple <include> entries are allowed per <static>
group. Private static global variables should be placed
in a jcf file and included in the code generation. The
<include> should specify the relative file/directory
location that will be appended to the config.home
property from the config.properties file.
</include>
</static>
<code>
[Optional] One <code> group allowed per <compcodeblock>.
43
<include>
Multiple <include> entries are allowed per <code> group.
Each entry identifies code to be included in the
generated service; the code should exist in a jcf file.
Each custom method provided should reside in its own jcf
file and should include the physical source code to be
added including comments, blank lines, and code. The
<include> should specify the relative file/directory
location that will be appended to the config.home
property from the config.properties file.
</include>
</code>
<gendbcode>
[Optional] One <gendbcode> group allowed per
<compcodeblock>.
<include>
One <include> entry is allowed per <gendbcode> entry.
The entry identifies code to be included in the
generated service; the code should exist in a
genCstmDBObject.jcf file. The custom gen method
provided should include the physical source code to be
added including comments, blank lines, and code. The
<include> should specify the relative file/directory
location that will be appended to the config.home
property from the config.properties file. A skelton
genCstmDBObject.jcf file is provided in the templates
directory as indicated earlier.
</include>
</gendbcode>
<genrespcode>
[Optional] One <genrespcode> group allowed per
<compcodeblock>.
<include>
One <include> entry is allowed per <genrespcode> entry.
The entry identifies code to be included in the
generated service; the code should exist in a
genCstmRespObject.jcf file. The custom gen method
provided should include the physical source code to be
added including comments, blank lines, and code. The
<include> should specify the relative file/directory
location that will be appended to the config.home
property from the config.properties file. A skelton
genCstmRespObject.jcf file is provided in the templates
directory as indicated earlier.
</include>
</genrespcode>
<genrespmulticode>
[Optional] One <genrespmulticode> group allowed per
<compcodeblock>.
<include>
One <include> entry is allowed per <genrespmulticode>
entry. The entry identifies code to be included in the
44
generated service; the code should exist in a
genCstmRespMultiObject.jcf file. The custom gen method
provided should include the physical source code to be
added including comments, blank lines, and code. The
<include> should specify the relative file/directory
location that will be appended to the config.home
property from the config.properties file. A skelton
genCstmRespMultiObject.jcf file is provided in the
templates directory as indicated earlier.
</include>
</genrespmulticode>
</compcodeblock>
<svccodeblock>
[Optional] Used by ServiceGenerator to generate service code.
One <svccodeblock> group allowed per configuration file.]
<import>
[Optional] One <import> group allowed per <svccodeblock>.
<value>
Multiple <value> entries are allowed per <import> group.
Each entry identifies a Java import statement to include
in generated service code. For example:
import java.sql.Timestamp;
</value>
<include>
Multiple <include> entries are allowed per <import>
group. Import statements can be be placed in a jcf file
and included in the code generation. The <include>
should specify the relative file/directory location that
will be appended to the config.home property from the
config.properties file.
</include>
</import>
<static>
[Optional] One <static> group allowed per <svccodeblock>.
<include>
Multiple <include> entries are allowed per <static>
group. Private static global variables should be placed
in a jcf file and included in the code generation. The
<include> should specify the relative file/directory
location that will be appended to the config.home
property from the config.properties file.
</include>
</static>
<code>
[Optional] One <code> group allowed per <svccodeblock>.
<include>
Multiple <include> entries are allowed per <code> group.
Each entry identifies code to be included in the
generated service; the code should exist in a jcf file.
Each custom method provided should reside in its own jcf
45
file and should include the physical source code to be
added including comments, blank lines, and code. The
<include> should specify the relative file/directory
location that will be appended to the config.home
property from the config.properties file.
</include>
</code>
</svccodeblock>
</definition>
46
3.1.2.2 <wheresets> Usage
To reduce the amount of generated code when numerous, similar <fetchby> entries
are configured in a *Gen.xml file, support for a <wheresets> tag group has been
provided.
Standard WHERE clauses primarily consist of equals (=) checks and ‘AND’
processing. Custom WHERE clauses can be generated by using any of the following
<attribute>s = “<value>” options:
Parenthesis
lp = # [generates # number of left parens '(']
rp = # [generates # number of right parens ')']
Equalities
eq = true [default; provides ‘=’ check]
gt = true [provides ‘>’ check]
gte = true [provides ‘>=’ check]
lt = true [provides ‘<’ check]
lte = true [provides ‘<=’ check]
ne = true [provides ‘!=’ check]
Conditionals
and = true [default; provides SQL AND clause]
or = true [provides SQL OR clause]
Note: Only 1 'eq', 'gt', 'gte', 'lt', 'lte', ‘ne’, or 'like' can be used for each <colnumber>
entry.
Note: Only 1 'and' or 'or' can be used for each <colnumber> entry.
47
Example Usage
The desired WHERE clause of an SQL SELECT that looks like this:
SELECT *
FROM tableA
WHERE ( ( fieldA > ? ) OR
( fieldB <= ? ) )
Note: For data sources managed under DALCI/SIS/MetaMan, the use of ‘lp’, ‘rp’,
‘like’, and ‘or’ are not supported as DALCI/SIS does not support processing for “or”,
parens, and “like” at this time. For true SQL-based data sources, these options can be
used.
DALCI has the following restrictions in place that must be observed when creating
*Gen.xml files for data sources that can/will be managed by DALCI/SIS:
Support requirements for any of the above restrictions must be provided for in custom
code (*.jcf methods, additional business components, etc.) at this time.
48
<colnumber>1</colnumber>
<logicalname>ctxcdServerContext</logicalname>
<physicalname>LastUpdtTm</physicalname>
<javatype>timestamp</javatype>
<constraint>ServerContextType</constraint>
</column>
<column>
<colnumber>2</colnumber>
<logicalname>ctxcdDataSourceAssign</logicalname>
<physicalname>ctx_asgn_nam</physicalname>
<javatype>string</javatype>
<sqltypesize>32</sqltypesize>
<sqldefault>NULL</sqldefault>
<constraint>DataSrcAsgnType</constraint>
</column>
<column>
<colnumber>3</colnumber>
<logicalname>ctxcdComments</logicalname>
<physicalname>descr</physicalname>
<javatype>string</javatype>
<sqltypesize>400</sqltypesize>
<constraint>CommentsType</constraint>
</column>
</columns>
<prikey>
<colnumber>0</colnumber>
</prikey>
</table>
<abbreviation>ContextCfg</abbreviation>
<constants>
<file>es.server.ESConstants</file>
</constants>
<datavalidation>true</datavalidation>
<service>
<name>ContextCfgService</name>
<package>es.server.datasource.database</package>
</service>
<component>
<name>ContextCfgComponent</name>
<package>es.server.datasource</package>
</component>
<commonfunctions>
<add>true</add>
<addmulti>false</addmulti>
<delete>true</delete>
<deletemulti>false</deletemulti>
<update>true</update>
<updatemulti>false</updatemulti>
</commonfunctions>
</definition>
49
4. BASE24-eps UIS XML Schemas
XML schemas are prevalent throughout UIS for providing the following items:
To accomplish the improved use of XML schemas in this environment, however, has
meant that a more rigid hierarchy of rules and relationships be put into place. This was
necessary to help ensure the integrity of XML usage and to help maintain the generic
ability of the processing components.
The hierarchy of XML Schema Definitions that has been put into place is as follows:
The layers of definitions, beginning with the low level Data Type Definitions and working
up through the high level Message Schema Definitions, are intended to be building
blocks of each other and to enable better extensibility for custom work.
50
4.1.1 Data Type Schema Definitions
The lowest level of the XML Schema Definitions consists of Data Type Schema
Definitions. Data type schema definitions define data items, their type, and any
restrictions to apply to them such as lengths, ranges, or enumerations to name a few.
4.1.1.1 Rules
The following rules and guidelines must be adhered to when creating data type
definitions:
3. Every XML simple type specified must closely match the underlying data source data
type if the element is to be stored in a database.
4. Every data type definition must be a restriction of any type found in Section 8.1 or an
extension of any other previously defined data type definition.
5. When extending existing data types, restriction facets cannot be looser than they
have been defined in the base data type. For example, if the base data type has
defined a restriction facet for maxLength of say 16 characters, then data types that
extend this type cannot set the same restriction facet greater than 16 characters;
they can only restrict the facet further (i.e. go less than 16). The maximum depth of
data type extension supported is 5 levels.
6. Data type definitions in one file can extend data types found in another file, but
require the inclusion of
[Product].[Std/CSM].[Data type].[Name/generalization].[Name]
where:
[Data type] is set to the appropriate XML data type represented such as
Integer, Long, Short, or String.
51
[Name/generalization] is set to either a final data type name, if it is unique, or
a generalization if dealing with any of the following examples:
Enum
Range
Size
With the exception of the final [Name] part, all other parts of a data type name are
required.
8. Best Practices:
<xsd:pattern value="[^\s]+"/>
52
4.1.1.2 XML Syntax
<xsd:[restriction]>
[Required] Must contain a type of restriction to apply
to this simple type. Multiple restrictions can be
applied to a simple type. The valid [restriction]
values, and the types they can be assigned to, are
indicated in the table in Section 8.1. The overall list
of XML restrictions supported includes:
53
enumeration minExclusive
fractionDigits maxInclusive
length minInclusive
maxLength pattern
minLength totalDigits
maxExclusive whiteSpace
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
54
4.1.1.3 XML Examples
<xsd:simpleType name="ES.Std.Integer.Generic">
<xsd:restriction base="xsd:integer"/>
</xsd:simpleType>
<xsd:simpleType name="ES.Std.Integer.Range.0To999">
<xsd:restriction base="ES.Std.Integer.Generic">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="999"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ES.Std.Long.Generic">
<xsd:restriction base="xsd:long"/>
</xsd:simpleType>
<xsd:simpleType name="ES.Std.Short.Generic">
<xsd:restriction base="xsd:short"/>
</xsd:simpleType>
<xsd:simpleType name="ES.Std.Short.Range.0To1">
<xsd:restriction base="ES.Std.Short.Generic">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="1"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ES.Std.String.Enum.0To1">
<xsd:restriction base="ES.Std.String.Generic">
<xsd:enumeration value="0"/>
<xsd:enumeration value="1"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ES.Std.String.Generic">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="ES.Std.String.HexType">
<xsd:restriction base="ES.Std.String.Generic">
<xsd:pattern value="[0-9A-Fa-f]+"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ES.Std.String.Size.0To1">
<xsd:restriction base="ES.Std.String.Generic">
<xsd:minLength value="0"/>
<xsd:maxLength value="1"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ES.Std.String.Size.0To1NoES">
55
<xsd:restriction base="ES.Std.String.Size.0To1">
<xsd:pattern value="[^\s]+"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
56
4.1.2 Element/Group Schema Definitions
The next level of the XML Schema Definitions consists of Element/Group Schema
Definitions. These definitions build upon the data type schema definitions by defining
usable element and group names.
4.1.2.1 Rules
The following rules and guidelines must be adhered to when creating element and group
definitions:
3. There are no additional rules for naming element/group entries other than to follow
Java conventions and ACI guidelines.
5. Element groups MUST appear in the XML messages received and sent by the
system.
6. When naming <xsd:group> entries, please attach a suffix of Group to the end of
the name.
57
8. The following XML tag setting:
<xsd:annotation>
<xsd:appInfo>appName</xsd:appInfo>
</xsd:annotation>
[Optional] This setting should be specified for those instances where element
names are not unique within a message and reside under 2 or more groups. If
this value is present, the message formatter will append the group name to all
immediate element names and place the associated value in the internal data
object. The message formatter will also look for this combined name internally in
order to properly build response messages. This setting only applies 1 level
deep (to the immediate group’s elements and must be reflected on
request/response message sets faced with multiple common element names.
Additionally, the combined group/element name must be reflected in the
appropriate <Data Source>Gen.xml file, but does NOT need to be reflected in
any XML elements definition file; only the distinct group name and distinct
element names must appear in an XML elements file.
58
4.1.2.2 XML Syntax
The core XML syntax for the element/group definition file is as follows:
<xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema>
[Required] One <xsd:schema> tag entry allowed per element/group
definition file. The xmlns:xsd attribute is also required and must
specify the year version of the XML Schema namespace to be applied
to this schema. The value listed above is the current supported
level, 2001, by the UIS implementation.
<xsd:choice> or
<xsd:sequence>
[Required] The group must be defined as an xsd:choice or an
xsd:sequence entry. See applicable rules listed prior in
Section 4.1.2.1. One primary type of identification is
allowed per <xsd:group>, but there can be further embedded
<xsd:choice> or <xsd:sequence> entries below the primary.
</xsd:choice> or
</xsd:sequence>
59
4.1.2.3 XML Examples
<xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema>
60
4.1.3 Message Schema Definitions
The top level of the XML Schema Definitions consists of Message Schema Definitions.
These definitions build upon the element/group schema definitions by defining usable
request/response message elements.
4.1.3.1 Rules
The following rules and guidelines must be adhered to when creating message
definitions:
1. Elements used must exist in either the message schema file itself or in
element/group schema definition file(s) under ESConfig/schemas/lib.
2. All rules from Section 4.1.2 apply to element/group definitions placed in a message
schema definition file.
3. XML message layouts can consist of element and groups. All elements and group
elements are handled as single level elements; except for multi-occur elements and
multi-occur groups that are handled as multi-row element sets.
4. The XML tag <xsd:element> can specify an optional default attribute and value to
use when the actual element is not found in the request or response information.
Example default configuration:
<xsd:element ref = "Comments" default = “No comments provided.”/>
7. All BASE24-eps response messages will contain a RespStat attribute in the root tag
that identifies the success or failure of the requested action(s). Supported values are
discussed in Section 8.2.
61
8. Data validation and field requirement errors encountered in the UIS implementation
will be returned to the requesting UI with specific error group tagging as discussed in
the next sub-section. In these cases, the RespStat attribute should contain the
overall processing error and specific field errors will be included under the error
group information.
9. All request element definitions must end in the suffix Rq. All response element
definitions must end in the suffix Rs. The allowed combination is therefore Rq/Rs.
XML tags of <xsd:choice>, <xsd:sequence>, <xsd:element>, and <xsd:group>
can all use minOccurs and maxOccurs as follows:
minOccurs
[Optional] This setting identifies the minimum number of occurrences that will be
supported for the respective XML tag. Valid values start from 0. The value of
unbounded for this setting is not supported. If this setting is not specified, a default
value of 0 is assumed; this makes the XML tag entry optional. For <xsd:choice>, this
will control the suppression of warning messages on response message generation
when no data elements were found in the message and this option is set to 0.
Additionally, it will only apply to top-level <xsd:choice> tags; if an <xsd:choice> is any
descendent of an <xsd:group>, the minOccurs setting will not apply.
maxOccurs
[Optional] This setting identifies the maximum number of occurrences that will be
supported for the respective XML tag. Valid values start from 1. The value of
unbounded is supported for this setting. If this setting is not specified, a default value of
1 is assumed. Currently, this does not apply to <xsd:choice>.
62
4.1.3.2 XML Syntax
The core XML syntax for a message schema definition file is as follows:
<xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema>
[Required] One <xsd:schema> tag entry allowed per message schema
definition file. The xmlns:xsd attribute is also required and must
specify the year version of the XML Schema namespace to be applied
to this schema. The value listed above is the current supported
level, 2001, by the UIS implementation.
<xsd:complexType>
[Required] One <xsd:complexType> tag allowed per
<xsd:element>.
<xsd:choice>
<xsd:sequence>
Rules governing these 2 tags are discussed in
Section 4.1.2.1. Ending tags of </xsd:choice> or
</xsd:sequence> must be supplied as required. Use
of min and max occurs is previously discussed under
rules in Section 4.1.3.1.
63
messages will have a RespStat attribute returned
that identifies the success or failure of the
processed request. Refer to Section 8.2 for valid
response values.
</xsd:complexType>
</xsd:element>
Whenever data validations or field requirement checks fail in the UIS implementation,
error group information will be returned to the requesting UI. Guidelines for error group
XML syntax are as follows:
<xsd:choice>
<xsd:group ref = "ErrorGroup"/>
</xsd:choice>
There can be additional XML tags contained within the bounds of the start and end
<xsd:choice> tags, however, for response message identification, this example
configuration should be the first entry in the response message definition. See the
following sub-section for further examples of this.
64
4.1.3.3 XML Examples
65
</xsd:choice>
<xsd:attribute ref = "RespStat"/>
</xsd:complexType>
</xsd:element>
<xsd:element name = "ContextConfigUpdateRq">
<xsd:complexType>
<xsd:sequence>
<xsd:group ref = "TicketGroup"/>
<xsd:element ref = "ctxcdProfile"/>
<xsd:element ref = "ctxcdDataSourceAssign"/>
<xsd:element ref = "ctxcdComments"/>
<xsd:element ref = "ctxcdServerContext"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name = "ContextConfigUpdateRs">
<xsd:complexType>
<xsd:choice>
<xsd:group ref = "ErrorGroup"/>
<xsd:element ref = "ctxcdServerContext"/>
</xsd:choice>
<xsd:attribute ref = "RespStat"/>
</xsd:complexType>
</xsd:element>
<xsd:element name = "ContextConfigViewRq">
<xsd:complexType>
<xsd:sequence>
<xsd:group ref = "TicketGroup"/>
<xsd:element ref = "ctxcdProfile"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name = "ContextConfigViewRs">
<xsd:complexType>
<xsd:choice>
<xsd:group ref = "ErrorGroup"/>
<xsd:sequence>
<xsd:element ref = "ctxcdProfile"/>
<xsd:element ref = "ctxcdDataSourceAssign"/>
<xsd:element ref = "ctxcdComments"/>
<xsd:element ref = "ctxcdServerContext"/>
</xsd:sequence>
</xsd:choice>
<xsd:attribute ref = "RespStat"/>
</xsd:complexType>
</xsd:element>
<!-- Elements -->
<xsd:element name = "Profiles" type = "ProfileType"/>
<xsd:element name = "StartKey" type = "ProfileType"/>
</xsd:schema>
66
4.2 Data Validations
Runtime data validation mechanisms are provided within generated data component
code (refer to Section 3.1.2). Configuration of actual data validations is supported via
the data type schema definition file(s) as discussed previously in Section 4.1.1.
Data validations in the UIS environment are NOT specifically tied to XML message
handling. When the need arises to handle other external message formats (i.e. ISO or
ANSI or other), data validations can still be performed using the same data type schema
definition files. The intent of server-side data validations is to provide a consistent
mechanism for ensuring validations are performed in a common manner across varied
components to ensure proper handling of data elements in the underlying data source.
Through global data type schema definition files, a user has the ability to alter the type or
size or other facet of an existing data type and have the take effect within the
environment.
Customization of the data validations is achieved through the use of the element maps.
During component generation, all constraint mapping information in relation to logical
name elements is written out to element map properties files located under
ESConfig/elmtmaps/<Data Source>Map.properties. If customization of a data type is
required, the user can create a new data type file that extends the existing
ESXMLDataTypes file (if desired), create the new data type, and then create a new,
csmMap.properties file and provide the new element-to-constraint mapping.
67
5. Formatter/Command Configuration
5.1 Formatter
The basic principle of the formatter layer is to translate external message data into
internal data objects and then back again.
5.1.1 es.server.formatter.xml.ESXMLFormatter
The UIS implementation utilizes a generic XML formatter infrastructure. All request and
response messages are required to be in XML format following the guidelines outlined in
Section 4.
The generic aspect exists in that the primary BASE24-eps XML format handler,
ESXMLFormatter, in conjunction with the UIS MessageSchemaManager service
(using the MessageSchema class) can break down any XML request message into
internal DataObject elements (see Section 8.3), and can format any XML response
message from internal DataObject elements.
BASE24-eps Note: Message schema definition files should be named according to the
<task> values contained within the files that represent individual UIs.
Developing the message layouts and generating the message schema definition files
(and any supporting element/group or data type definition files) is just the first aspect of
the formatter environment.
The next part of the formatter environment involves flow configuration such that the UIS
components can properly access the correct message schema definition file during
processing and be directed to the correct formatter handler (the ESXMLFormatter is the
current default BASE24-eps XML formatter supported, however, other formatters for
other types of message handling could be developed in the future).
68
The specific configuration to assist the formatter processing is maintained in the
<Transaction Map>.xml files; see Section 3.1.1. Within the <Transaction Map>.xml
configuration files, every request message tag that is supported must be configured in
this file to help direct the environment through both formatting and command processing.
Once the appropriate formatter is called, that formatter will then utilize the UIS
MessageSchemaManager to perform the actual break down of the request message
into values that are placed in the primary DataObject. The rules and actions governing
this break down process were previously discussed in Section 4.1.3.1.
Once the command level processing has been performed, the ESFormatterController
and the ESXMLFormatter are again called upon to generically format an XML response
message from data values contained in the primary data object. The
MessageSchemaManager is used to call upon the correct MessageSchema object
(accessed by taking the root request message name and switching the ending Rq to Rs)
that will then attempt to format the response message.
69
5.1.1.1 Message Customization w/ es.server.formatter.xml.ESXMLFormatter
In some instances, it may be necessary to massage incoming data such that it can more
accurately reflect how the underlying data source components or other internal business
components require the data to look. This could include, for example, combining 3
incoming elements into 1 logical element or perhaps generating a length element based
on the size of 1 or more incoming elements.
One ability to provide this support could be at the generated data source component via
the *Gen.xml files. The consideration of this, however, should be limited as messaging
issues could impact the flexibility of the generated component.
The preferred ability to provide support for this data massaging should be with extending
the default formatter and providing customized data handling as necessary.
The ESXMLFormatter class is an extendable class that provides 4 custom exits for
writing data massaging code. Those custom exits and their use are:
cstmBuildRequest
This method should be overridden in the extended class when implementing pass-thru
support whereby the UIS implementation will be formatting and sending requests to an
external entity and the data represented in the primary data object does not reflect all of the
messaging requirements (i.e. additional element names, 1-to-1 mapping of elements, etc.).
Data massaging provided with this method should be done to data contained in the primary
data object and will be done prior to any actual request message building.
cstmBuildResponse
This method should be overridden in the extended class when the UIS implementation will be
formatting and sending response messages to the originating client where the data
represented in the primary data object does not reflect all of the messaging requirements (i.e.
additional element names, 1-to-1 mapping of elements, etc.). Data massaging provided with
this method should be done to data contained in the primary data object and will be done
prior to any actual response message building.
cstmParseRequest
This method should be overridden in the extended class when the UIS implementation will be
receiving request messages from a client and the data represented in the primary data object
does not reflect all of the internal processing requirements (i.e. additional element names, 1-
to-1 mapping of elements, etc.). Data massaging provided with this method should be done
to data contained in the primary data object and will be done after the original request
message has been parsed.
70
cstmParseResponse
This method should be overridden in the extended class when the UIS implementation will be
receiving response messages from an external entity and the data represented in the primary
data object does not reflect all of the internal processing requirements (i.e. additional element
names, 1-to-1 mapping of elements, etc.). Data massaging provided with this method should
be done to data contained in the primary data object and will be done after the original
response message has been parsed.
Each of the overridden methods must return a true/false indicator that identifies the
success or failure of the custom processing.
When working with the custom exits, the developer should also be aware that the
custom formatter may process for more than 1 request/response root tag and must take
that into consideration when writing the custom code handling.
The UIS implementation requires that developers adhere to the following conventions:
When extending the ESXMLFormatter class, the new class should simply be called
XMLFormatter.
5.1.2 com.aciworldwide.common.formatter.NullFormatter
The JSF provides a generic NullFormatter. The intent of using the NullFormatter class
should be in cases where straight pass-thru support is required of incoming requests. In
these cases, incoming request messages will not be parsed since the UIS
implementation will not be included in directly processing any of the data. However,
because of the flow of processing through the UIS implementation, a formatter class is
required. Hence, the NullFormatter can be used as the <formatter><class>
specification in the <Transaction Map>.xml request configuration entry.
71
5.2 Command
At the first layer of command processing the ability exists to do single command actions
or multi-command actions. The CommandController component is the primary director
of command processing at this level. The CommandController also provides primary
data validation support of data received from any request.
At the next layer, request processing in this environment can be done with simple
commands or transactional commands. The implementation provides 3 support classes,
ESSimpleCommand, ESTransCommand, and ESPassthruCommand. Each of the
command classes should be used as follows:
ESSimpleCommand
This command class should be used for simple component processing that does not require
transactional support (i.e. insurances of data integrity). This would typically be evident of
simple data retrieval actions (i.e. reads or list retrievals). This class should be used only
when the UIS implementation is participating in the workflow. USEC and audit processing
are also supported with this command class.
ESTransCommand
This command class should be used if data integrity is important. This would be the case if
multiple related inserts, deletes, and or updates are being performed; if one action fails, the
entire action set will fail and the data source is returned to its original start state. This class
should be used only when the UIS implementation is participating in the workflow. USEC
and audit processing are also supported with this command class.
ESPassthruCommand
72
5.2.1 Single Data Source Action
Single data source actions are those where a single action is being performed against a
certain data or business component. The <Transaction Map>.xml configuration file
supports this at the <command> tag level. If a single component is to be acted upon,
then an example tag configuration might be:
<command>
<class>es.server.command.ESSimpleCommand</class>
<transaction>
<component>es.server.datasource.ContextCfgComponent</component>
<method>add</method>
</transaction>
</command>
<command>
<class>es.server.command.ESTransCommand</class>
<transaction>
<component>es.server.datasource.ContextCfgComponent</component>
<method>addMulti</method>
</transaction>
</command>
<command>
<class>es.server.command.ESSimpleCommand</class>
<transaction>
<component>es.server.datasource.ContextCfgComponent</component>
<method>get</method>
</transaction>
</command>
Note: When performing multiple command sets, the command environment will perform
the commands in the order they are represented in the configuration file.
Additionally, the configuration for request processing can include a mix of single data
source processing and multiple data source processing through the configuration of
multiple <command> tag sets. See examples of this in the following topics.
73
5.2.2 Multi-Data Source Action (related)
Multi-data source actions are those where multiple actions are being performed against
1 or more data or business components. The <Transaction Map>.xml configuration file
supports this at the <command> and at the <transaction> tag level. If multiple
components are to be acted upon, then an example tag configuration might be:
<command>
<class>es.server.command.ESTransCommand</class>
<transaction>
<component>es.server.datasource.ContextCfgComponent</component>
<method>add</method>
</transaction>
<transaction>
<component>es.server.datasource.PrefixCfgComponent</component>
<method>add</method>
</transaction>
</command>
In the prior example code, for related multi-data source actions, the actions performed
are considered related as far as data integrity is concerned. If the actions to be
performed were not considered related, then the configuration could be depicted as
follows:
<command>
<class>es.server.command.ESSimpleCommand</class>
<transaction>
<component>es.server.datasource.ContextCfgComponent</component>
<method>add</method>
</transaction>
</command>
<command>
<class>es.server.command.ESSimpleCommand</class>
<transaction>
<component>es.server.datasource.PrefixCfgComponent</component>
<method>add</method>
</transaction>
</command>
74
In this case, both actions are unique and separate. The CommandController would
manage the processing flow, in this example.
The ability to help control conditional flow through multiple <command> and/or multiple
<transaction> sets in a <Transaction Map>.xml configuration file is controlled with the
use of <contconditions><code> as previously outlined in Section 3.1.1.
<command>
<class>es.server.command.ESSimpleCommand</class>
<transaction>
<contconditions>
<code reset = “DBS_FILE_OK”>DBS_NOT_FOUND</code>
</contconditions>
<component>es.server.datasource.ContextCfgComponent</component>
<method>get</method>
</transaction>
<transaction>
<component>es.server.datasource.PrefixCfgComponent</component>
<method>get</method>
</transaction>
</command>
In the above example, a continue conditional was placed on the get processing of the
ContextCfgComponent such that if that action returns a DBS_NOT_FOUND error
condition, the result would be that the error code would be reset to null, a positive
response of DBS_FILE_OK would be placed in a RESP_STAT key/value in the primary
data object, and processing would then continue into the PrefixCfgComponent’s get
method.
Note: It is important to remember that when a continue condition is specified, the error
code will always be reset to either null or the reset attribute code specified (unless the
reset code is an approval code of DBS_FILE_OK or DBS_FILE_EXHAUSTED in which
case the error code is set to null and a RESP_STAT key/value in the primary data object
is used to indicate the approval code).
Note: The code and reset values that are specified must be internal JSF codes, not
BASE24-eps return codes.
75
5.3 Command-Level Filtering
¾ Delete
¾ Save (update)
¾ View
This processing will be performed against delete, save (update), and view processing.
At this time, filter processing is not performed on add processing. All add requests from
a UI will be allowed to be performed, however, if the user has no further rights to view,
delete, or update that information they will not be permitted access to the new data.
After all command and transaction processing has been satisfied for the designated
workflow, the CommandController will perform a callback to USEC, via the USECIF,
when the processing involved was an add or a delete and filterable fields were present.
The USEC table of FieldValues (FldVals) maintains field value information that can be
applied to any filter. The addition and removal of field data to this table is initiated during
this final phase of filter processing.
Note: Data that is added to the FldVals table is not immediately implemented within
any new or existing filter. The process of associating the value(s) to a filter requires
manual intervention from a system or security administrator.
76
6. Components/Services
In the UIS implementation, lower-level components and services are responsible for
performing the data related work. Components can consist of business or data
components. Services are primarily data access services that act upon the data in the
underlying data sources. Comparisons between the components and services can be
made as follows:
Data Components and Services are typically one-to-one relationships. Both are created to
access a single, underlying data source. The service takes care of shielding direct access
requirements from the components while the data component takes care of validations and
requirement checks.
For Data Components and Services, the UIS implementation utilizes code generators to
create usable Java code. At this time, business components must be manually
developed.
Aspects of the code generation infrastructure will be discussed in the following sub-
sections.
Data access in the UIS environment is currently being performed through the use of
Java JDBC. Customer’s can provide their own selection of many available JDBC drivers
for respective databases transparently from our environment.
77
6.1 Generators
6.1.1 ServiceGenerator
The service classes generated help shield the data components, business components,
and other classes from lower-level data access issues. Every data source directly
accessed by the environment must have an applicable service class.
As was discussed in Section 3.1.2, configurations for services are very flexible. Users
can establish common function support as well as customized support in the form of
various, flexible retrieval functions. Additionally, custom Java code can also be included
in the gen files that the generator will place into the service class.
Note: When adding custom code into a gen file to be placed into a service class, any
methods that will be identified for direct access within the TransMap.xml flow must use
a single internal data object as the only parameter. Passing of any processing details
between classes requires those details be appended to the primary data object rather
than passing individual arguments.
All generation files will typically exist under the ESConfig/datasource/gens directory.
Generated code will be named as indicated in the gen file and will be placed in the
package location also identified in the gen file. Once a service class is generated, it can
then be compiled and tested. It is recommended that data service classes be placed
under the following structure:
es/server/datasource/database/<service>
Note: Java service classes that are generated by the ServiceGenerator should NOT
be modified directly. If modifications are made to the existing code, regeneration of that
code will result in the loss of your changes. Modifications to the functionality needed in
the service classes should be handled by altering the gen configuration file and
regenerating the service class code, or by enhancing the ServiceGenerator to provide
new service functionality and then regenerating the service class code.
78
6.1.2 ComponentGenerator
The data component classes generated help provide access to lower-level data
services. Every data source directly accessed by the environment must have an
applicable service class.
As was discussed in Section 3.1.2, configurations for data components are very flexible.
Users can establish common function support as well as customized support in the form
of various, flexible retrieval functions. Additionally, custom Java code can also be
included in the gen files that the generator will place into the data component class.
Note: When adding custom code into a gen file to be placed into a data component
class, any methods that will be identified for direct access within the TransMap.xml flow
must use just a single internal data object as the only parameter. Passing of any
processing details between classes requires those details be appended to the primary
data object rather than passing individual arguments.
All generation files will typically exist under the ESConfig/datasource/gens directory.
Generated code will be named as indicated in the gen file and will be placed in the
package location also identified in the gen file. Once a data component is generated, it
can then be compiled and tested. It is recommended that data components be placed
under the following structure:
es/server/datasource/<data component>
Execution of this generator will also result in the creation of the element maps under:
ESConfig/elmtmaps/<Data Source>Map.properties
These files will contain the constraint mapping information for the logical name elements
in order for data validations to successfully function.
Note: Java data component classes that are generated by the ComponentGenerator
should NOT be modified directly. If modifications are made to the existing code,
regeneration of that code will result in the loss of your changes. Modifications to the
functionality needed in the data component classes should be handled by altering the
gen configuration file and regenerating the data component class code, or by enhancing
the ComponentGenerator to provide new functionality and then regenerating the data
component class code.
79
Note: Customer-based modifications to existing product data component classes
should be avoided. If customer requirements dictate different data component support,
new gen files should be created for the data source and then a custom data component
generated and placed in a different package location. Configuration changes in the
TransMap.xml file would then be made to reflect use of the different data component
and the environment’s classpath updated to ensure the newly generated data
component can be found appropriately.
80
6.2 PassthruComponent Usage
Note: At this time, the current PassthruComponent will only function in a synchronous
mode; it does not support asynchronous processing.
81
o PrtcCd - Protocol Code indicates the protocol used to communicate with this
end-point. Many options exist:
TCPIP
TCPIP-CLIENT
TCPIP-SERVER
HTTP
NONE
CLIENTAUTH
JMS-ASYNC
JMS-SYNC
EJB
SMTP
etc.
and the remaining columns are specific to the protocol chosen. For our test
purposes, TCPIP (or TCPIP-CLIENT) represents TCP/IP, acting as a client
requesting a connection. The remaining fields will be defined as they relate to
the TCP/IP protocol. Keep in mind many other options exist.
PrtcOptnList - Protocol Options List defines how TCP/IP data streams are tied
to messages. HDR2 indicates the TCP/IP stream is prefaced with a 2-byte
binary message length - an XPNET/BASE24-eps C++ Server requirement.
TimeOutNum - Time Out Number defines the amount of time to wait for a reply
on the socket. Values are specified in seconds.
82
MaxConnNum - Maximum Connection Number defines the maximum number of
sockets that this connection pool is allowed.
LastUpdtTim - Last Update Time defines the timestamp of the last update to this
entry.
A BASE24-eps desktop UI will be created in the future to help maintain this file.
Refer to screen prints below for examples of data configuration in the EXTRCNCT
table.
83
External Connection Table Column Definitions:
Install the jms.jar under the lib directory of the Web project. The JSF requires
additional APIs from this jar.
In some instances, it may be necessary to massage outgoing data such that it can more
accurately reflect how the external entity requires the data to look. This could include,
for example, combining 3 data elements into 1 element or perhaps generating a length
element based on the size of 1 or more data elements. The same could occur when
receiving a response from an external entity and needing to massage data in the primary
data object for internal UIS processing.
The preferred ability to provide support for this data massaging should be with extending
the PassthruComponent class and providing customized data handling as necessary.
Packaging of the extended components can follow any defined convention; a convention
has not yet been established for BASE24-eps implementations, as no requirements for
customization yet exist.
84
The PassthruComponent class is an extendable class that provides 4 custom exits for
writing data massaging code and response handling code. Those custom exits and their
use are:
cstmBuildRequest
This method should be overridden in the extended class when implementing pass-thru
support with formatting and sending requests to an external entity and the data represented
in the primary data object does not reflect all of the messaging requirements (i.e. additional
element names, 1-to-1 mapping of elements, etc.). Data massaging provided with this
method should be done to data contained in the primary data object and will be done prior to
any actual request message building. This method should return true or false based on the
success or failure of the data massaging.
cstmParseResponse
This method should be overridden in the extended class when receiving response messages
from an external entity and the data represented in the primary data object does not reflect all
of the internal processing requirements (i.e. additional element names, 1-to-1 mapping of
elements, etc.). Data massaging provided with this method should be done to data contained
in the primary data object and will be done after the original response message has been
parsed. This method should return true or false based on the success or failure of the data
massaging.
cstmPreProcess
This method should be overridden in the extended class when there is a need to pre-
determine if passthru processing should even be performed. The method is called before
any additional passthru configuration is retrieved or message service instantiation is
established. Return true if passthru processing should continue, false if it should not.
evaluateResponse
This method should be overridden in the extended class when receiving response messages
from an external entity and the data represented in the primary data object does not reflect all
of the internal processing requirements (i.e. additional element names, 1-to-1 mapping of
elements, etc.). Data massaging provided with this method should be done to data contained
in the primary data object and will be done after the original response message has been
parsed. This method should return true or false based on the success or failure of the data
massaging.
getExternalConnectionID
This method retrieves the default connection ID key entry from the config.properties file. This
value of the property obtained is used to key into the EXTRCNCT table during end-point
processing. The EXTRCNCT table can have multiple connections defined, hence if the user
requires different connection configuration for additional end-points, the PassthruComponent
class can be extended and this method overridden to provide hard-coding or other
config.properties data retrieval in order to identify the table key to use. The default
config.properties entry used for this class and this method is:
ptc.connectionID
85
getUniqueMessageID
This method retrieves or generates a unique message ID. It should be overridden in the
extended class if the default method of generating a unique message ID must be different for
the end-point processing the request. The default implementation generates this String-
based value by using the JSF class/method of:
UUID.create()
When working with the custom exits, the developer should also be aware that the
custom component may process for more than 1 request/response root tag and must
take that into consideration when writing the custom code handling.
The UIS implementation requires that developers adhere to the following convention:
86
6.3 Database-Level Filtering
¾ List All
¾ Get By
When the respective database service performs one of the above requests, it will
determine if filtering is to be applied to the data before it is returned. The determining
factors will be the presence of the following items in the primary data object:
¾ FILTER_FIELD_MAP
¾ USEC_PERMISSION_DATA
These 2 items are placed in the primary data object by the USECIF during the
authentication and authorization step. Additionally, for a database service to provide
filtering support requires that an appropriate filter class be specified in the respective
transmap configuration data via the <filter><class> tags. If no filter class is specified in
the transmap configuration for the current type of request being processed, then filtering
will not be performed.
For a data row to be successfully filtered requires that all of its filter-related values pass
all assigned filter constraints. If a data row has multiple columns that are being filtered
upon and 1 or more of the column values fail filtering constraints, the data row will not be
returned. The database services also support filtering in conjunction with MAX_ROWS
support such that repeated database retrievals will be performed until all rows have been
exhausted or the service has reached the MAX_ROWS value for returnable data rows.
87
7. How-To Guides
This section provides UIS development scenarios with how-to steps for configuring and
building a functional server-side component environment.
To create support for a new request/response message in the UIS environment, the
following assumptions must be made:
The intended data source to be accessed must already have an available data
component and service to use. If this is not true, please include the steps under
Section 7.3 to create a new data component and service during this process.
If the intended data source already has a data component and service, but does not
have available an appropriate method to process the action(s) necessary, please
include the steps under Section 7.4 to modify the existing data component and
service during this process.
The message formatting being supported is XML based. If this is not true, please
include the steps under Section 7.8 to create a new message formatter during this
process.
To create support for a new request/response message in the UIS environment, use the
following steps as the guideline:
1. Identify any data source(s) that will be accessed. If external components or external
systems are to be accessed, identify the mechanism to be used to access them (i.e.
JNI, RMI, TCP/IP, etc.).
4. Identify if the request/response messages will be XML based. If not, include Section
7.8 with this step. Otherwise, identify the XML message requirements between the
client and the server implementation. All request/response message elements used
must be defined in an element/group schema definition file. Refer to Section 4 for
further information on messaging requirements/rules. This step should result in a
new message schema definition file being created under
ESConfig/schemas/message/<file name>.xml and perhaps modifications to
existing, or creation of a new, element/group schema definition file and to a data type
88
schema definition file. All message schema related files exist under
ESConfig/schemas/message.
5. Create a new <Transaction Map>.xml file to include the new flow processing for the
new request/response messages. Refer to Section 3.1.1 for configuration
requirements and rules pertaining to this file and to Section 5 for examples and
other information. Primarily, every request message identified in the new message
schema definition file must have a flow entry set created in an appropriate
<Transaction Map>.xml file. Ensure that proper simple or transactional command
support has been identified when configuring the flow. This step should result in a
new transmap definition file being created under ESConfig/transmaps/<file
name>.xml
6. Deploy the new/updated configuration files to your work area along with any new or
updated components and services.
7. Test all functionality ensuring valid security processing and auditing functionality in
addition to request/response message handling.
89
7.2 Alter an Existing Request/Response Message
The intended data source to be accessed must already have an available data
component and service to use. If this is not true, please include the steps under
Section 7.3 to create a new data component and service during this process.
If the intended data source already has a data component and service, but does not
have available an appropriate method to process the action(s) necessary, please
include the steps under Section 7.4 to modify the existing data component and
service during this process.
The message formatting being supported is XML based. If this is not true, please
include the steps under Section 7.8 to create a new message formatter during this
process.
1. Identify any data source(s) that will be accessed. If external components or external
systems are to be accessed, identify the mechanism to be used to access them (i.e.
JNI, RMI, TCP/IP, etc.).
90
requirements/rules. This step should result in modification of an existing message
schema definition file from ESConfig/schemas/message/<file name>.xml and
perhaps modifications to existing, or creation of a new, element/group schema
definition file and to a data type schema definition file. All message schema related
files exist under ESConfig/schemas/message.
6. Deploy the new/updated configuration files to your work area along with any new or
updated components and services.
7. Test all functionality ensuring valid security processing and auditing functionality in
addition to request/response message handling.
91
7.3 Create a New Data Source
2. Verify and create, if necessary, appropriate data type schema definitions for
validation support as well as appropriate element/group definitions. Refer to Section
7.5 for data type creation/modification and to Section 4 for further configuration
information on schema definitions.
3. Creation of the data component and data source service generated code from the
Gen file. Refer to Sections 7.6 & 7.7 for information on creating data components
and data source services.
4. Open an existing or create a new <Transaction Map>.xml file and make the
appropriate configuration changes or additions to utilize the newly generated custom
data components and methods for the new data source.
92
7.4 Modify an Existing Data Source
1. Open the existing <table>Gen.xml file or, for custom work, copy the existing file to a
custom directory; placement of file should be according to whether this is a product
data source or a custom data source. It is recommended that the Gen files be
appropriately placed under the ESConfig/datasource/gens directory. Allowable
configuration items are discussed in Section 3.1.2.
2. Make the appropriate configuration changes to the Gen file. Changes could include
column size modifications, data validation changes, internal/external data type
support, primary/alternate key changes, and more.
3. Update of the actual data source or migration to an updated data source. Once the
new table is created, appropriate database tools can be used to transfer data
between the two tables; data type changes may require special handling. If changes
are being made directly to a data source, then use the appropriate database tool to
perform the change(s) manually. Please note that limitations may exist on what
exactly can be changed to existing database tables and flat file data sources may
have even greater restrictions.
4. Modify, if necessary, any appropriate data type schema definitions for validation
support as well as appropriate element/group definitions. Refer to Section 7.5 for
data type creation/modification and to Section 4 for further configuration information
on schema definitions.
5. Re-generate the data component and data source service code from the Gen file.
Refer to Sections 7.6 & 7.7 for information on creating data components and data
source services. If working with custom code, ensure the generated classes are
placed under a custom package.
6. Open an existing or create a new <Transaction Map>.xml file and make the
appropriate configuration changes or additions to utilize the newly generated custom
data components and methods for the new data source.
93
7.5 Create/Modify Data Validations
1. Create a new XMLDataTypes.xsd file and place it under a new, custom directory. It
is highly recommended that unless a data validation change is being made for
product reasons, that all changes be placed in customized files in custom directories
under ESConfig/schemas/. Refer to Section 4.1.1 for data type support
information.
2. If a data validation for an existing message element is being redefined, simply copy
the existing data validation from the above file and place it in the customized file.
Modify the data validation as required. If a new data type is being created for an
existing data element (as defined in the element or message definition files or the
ESXMLCommonElements.xsd), then customization will also be required to the
elements definition file AND related message schema files. Whenever possible, just
copy the existing data type and leave the name intact.
3. For the customized data validation to be implemented, 2 options exist. First, if a new
data type was created the existing data component code must be regenerated from
an updated <table>Gen.xml file. Again, unless the modification is being made for
product reasons, it is recommended that a copy of the appropriate <table>Gen.xml
file be placed in a custom directory and then modified. Second, the associated
elmtmaps file for the data source will need to be modified or a custom map file
established for the element-to-constraint combination.
4. If choosing to modify an existing Gen file, re-generate the data component code with
an appropriate batch file. If the intended target is the existing class file location, then
it is recommended that a backup of the existing product classes be made.
Otherwise, specify a new package location in the Gen file for the data component
class and then re-generate the code.
5. If choosing to update or create a new data source or CSM elmtmaps file, just
provide the element-to-constraint key/value pair and then stop/restart the
environment for the DataValidatorManager to reload the information into memory.
94
7.6 Create a Custom Data Component
Creating custom data components will typically be done in cases where the underlying
data sources have been modified in a customer environment or perhaps where data
validations are being modified or custom code is needed in the data component. As a
general rule, custom components (data or service), should require that copies of existing
Gen files be made to a custom directory and then custom classes generated to custom
package locations.
2. Open the Gen file and make the appropriate changes. Refer to Section 3.1.2 for
Gen file guidelines. Typically, modifications will be made to include custom fetch
retrievals, but could also include custom code blocks. Changes must also be made
to the package location for the data component to place it under a custom directory,
not the product package/directory.
3. Create an appropriate batch file to help generate the new data component.
5. Compile the generated data component. Please note that when creating custom
fetch retrievals, an appropriate custom data service will also need to be generated
and compiled prior to compiling the new data component. Refer to Section 7.7 for
information on creating a custom data service.
95
7.7 Create a Custom Data Source Service
Creating custom data services will typically be done in cases where the underlying data
sources have been modified in a customer environment or perhaps where custom code
is needed in the data source service. As a general rule, custom components (data or
service), should require that copies of existing Gen files be made to a custom directory
and then custom classes generated to custom package locations.
2. Open the Gen file and make the appropriate changes. Refer to Section 3.1.2 for
Gen file guidelines. Typically, modifications will be made to include custom fetch
retrievals, but could also include custom code blocks. Changes must also be made
to the package location for the data source service to place it under a custom
directory, not the product package/directory.
3. Create an appropriate batch file to help generate the new data source service.
96
7.8 Implement Different Input Protocols/Message Formats
TCP/IP, Sockets
HTTP
SOAP
JMS
EJB
The current UIS environment has provided implementations for the following protocols:
HTTP
JMS (in progress)
The UIS environment by default supports XML-based messaging formats, as has been
discussed throughout this developer’s guide. However, it may become necessary in the
future to support additional protocols or additional message formats.
If the addition or replacement of protocol support is required to UIS, the engineer should
seek reference implementations from other user’s of the JSF. The adapter layer of the
JSF provides the protocol support. The UIS implementation for HTTP support utilizes
the es.server.ESHTTPServlet class. Other protocols will require a full component
replacement of the servlet class. The functionality provided by all adapter classes
should be fairly consistent in that they:
Handle the protocol semantics for which they are being created.
Handle the receipt and sending of message data with the client.
And direct the flow of processing as follows:
If the addition or replacement of message formats is required for UIS the engineer
should seek reference implementations from other user’s of the JSF. The formatter
implementation for UIS currently provides all XML handling. For XML handling, the
ESFormatterController is configured, via the transmap XML files, to call upon the
ESXMLFormatter class to direct XML message processing. The ESXMLFormatter
class utilizes the MessageSchemaManager class to process XML request/response
data.
97
Message format addition or replacement enhancements may require modifications to
existing adapters (i.e. ESHTTPServlet) as well as the ESFormatterController. Beyond
that, a new formatter (i.e. similar to ESXMLFormatter) would need to be created in
addition to any other special message handling mechanisms (i.e. similar to
MessageSchemaManager). Data mapping requirements have already been outlined in
this document and must be adhered to by all formatters. The data type and
element/group schema definitions discussed in Section 4 drives internal data element
names. Data names for incoming request and outgoing response messages could be
defined differently, however, the responsibility of mapping requirements from external to
internal values falls on the respective formatter and any of its supporting components.
Additionally, if any new message handling support classes are generated (similar to
MessageSchemaManager), it is recommended that the primary class implement the
JSF InitializationInterface, that it provide an init() method, and that it be configured to
start at process initialization. This also requires additional entries be placed in the
config.properties file (see Section 2.4).
98
7.9 Implement Pass-Thru Processing
The current UIS environment provides a pass-thru implementation that allows requests
to be passed on to other end points for processing. These requests can be straight
pass-thru or they can be part of an integrated workflow involving other UIS processing.
There are various combinations and considerations for establishing pass-thru and/or
integrated support and the sub-sections that follow will detail the steps necessary to
implement this processing.
o XML message root tags and the corresponding details must be configured in an
ESConfig/transmaps/*.xml file(s).
99
Example Process Control transaction map file:
100
7.9.2 Straight Pass-Thru w/ USEC Support
Straight pass-thru processing with USEC support should be implemented when the
following conditions exist:
o XML message root tags and the corresponding details must be configured in an
ESConfig/transmaps/*.xml file(s).
101
o Refer to the example transaction map below.
102
7.9.3 Integrated Workflow
Pass-thru processing with USEC/UAUD support and integrated UIS workflow processing
should be implemented when the following conditions exist:
UAUD processing is required (only UIS implementation processing will be audited; auditing
requirements of external end-points must be fulfilled by those end-points).
o XML message root tags and the corresponding details must be configured in an
ESConfig/transmaps/*.xml file(s).
103
o Refer to the example transaction map below.
104
7.10 Solve Various Development Issues
When doing any custom work previously discussed in this section or in the sub-
sections that follow, it is important to understand the relationships of all configuration
and class files involved and where they typically reside.
The following check list should serve as a guideline for ensuring changes/additions are
properly identified and managed with the cataloged UIS code so that code changes are
not lost.
ESConfig/schemas/lib
Ensure you have generated your <Data Source>Elements.xsd file and that your
message schema file (under ESConfig/schemas/message) properly includes this
file or files.
Ensure all elements files generated and modified data types schema file have been
validated by an XML tool such as IBM Websphere App Developer’s XML validator
or some other XML validator.
ESConfig/schemas/message
Ensure you have created/updated a new/existing message schema file for your
data source. Message identification (by request/response) should be in
alphabetical order in the file. Naming convention requires a file name that matches
the associated task ID (value that would have been set for the <task> tags in the
message schema file).
Ensure the message schema file has been validated by an XML tool; such as IBM
Websphere App Developer’s XML validator or some other XML validator.
105
ESConfig/transmaps
Ensure you have created/updated a new transaction map file for your UI/client,
broken down by task ID. Your transaction map should only contain entry sets for
your request handling, they should be in alphabetical order, and the file name
should be set to the same value as the <task> tag in the transaction map file.
ESConfig/datasource/gens/<data source>
Ensure you have created/modified your <data source>Gen.xml file. Verify all
naming conventions for <logicalname> entries have been adhered to.
Ensure you have included all copy files (.jcf) created for your data source code
generation. These files will exist under your data source directory or under the
ESConfig/datasource/gens/common directory.
Ensure you have provided a new directory, named after the UI message set, and
included the extended XMLFormatter class if customization was provided at the
message-handling layer. Ensure any changes have also been reflected in the
appropriate ESConfig/transmaps file.
When specifying the task ID and function ID for a request, in the transmap
configuration file (via the <task> and <function> tags), the ID values must be
configured in the USEC environment. Failure to do so will result in Not_Authorized
responses being return for the request(s).
106
7.10.3 Data Type Conversion between DALCI/SIS and UISs
When establishing *Gen.xml configuration for a data source (new or existing) that is
created under DALCI/SIS, it is important to properly set the <javatype> tag value for
each column. The <javatype> represents how the UIS implementation will internally
handle the data.
The following table depicts the UIS supported mapping between JDBC (SQL) types
and Java types (please follow the depicted case closely) and what the equivalent
DALCI/SIS data types are (please note that string can also be set to string_no_trim):
* For DB2 implementations, the underlying data source must have the physical type set
as a CHAR(1).
107
7.10.4 Customizing Data Components/Services w/ Copy Files
There may be instances where custom data processing is required at the data
component or database service layer. This could be to help support customized data
validations (i.e. cross-field validations or other external validations), data integrity
support with other data sources, external processing of other components or external
systems, and more.
Where these things cannot be appropriately handled with custom XML formatters or
transmap configuration flow, custom code can be added to data components and
database service class via the use of copy files.
¾ One *.jcf file should be created per method. That *.jcf file may include additional
global attributes although it is recommended that they be established in their own
*.jcf file to be included separately with the code generation. The primary name of the
*.jcf file should represent the method name.
Please refer back to Section 6 on data component and database service code
generation support as well as Section 3.1.2 for *Gen.xml configuration support.
108
7.10.5 Customizing Request/Response Data Handling
Special handling requirements of request data may be required to ensure proper data
source processing. Likewise, special handling of data source information may be
required to ensure proper response handling to a UI/client. To accomplish this, the
desired mechanism to employ is an extended XMLFormatter class (previously
discussed in Section 5.1.1.1).
¾ Request data coming in does not reflect internal logical names of data source
columns that will be involved in processing the request.
¾ Response data being returned to the UI/client does not correspond to internal logical
names of data elements retrieved from a data source.
On the response side, logical named data elements from a data source may need to be
broken down into individual elements or new elements (based on new criteria) created
and placed in the tranObj object. To do this, the cstmBuildResponse method should
be overloaded in the extended XMLFormatter. This method is called BEFORE any
response message build occurs.
¾ New request elements, placed into the tranObj object, must be named appropriately
to map to the required logical name of a data source column or other logical name
required for other component processing.
¾ New response elements, placed into the tranObj object, must be named
appropriately named for the MessageSchema class to use when building the
response message. The names must map to an element name found in the
response message schema definition.
¾ When placing new key/value pairs into the tranObj object, care must be taken to use
the appropriate “put” method of the JSF DataObject class. The “put” method can
be used in all numeric and timestamp instances and in string instances where space
character preservation (at the beginning and end of the value) is not important. If
working with string data and the preservation of space characters at the front and/or
end of the value is important, then the “putNoTrim” method should be used.
109
¾ When establishing processing in the extended XMLFormatter class, it is important
to remember that these overloaded methods will always be called. To ensure that
the extended XMLFormatter class is only used in specific instances, the transmap
configuration should only identify the extended formatter class for those requests
that require some level of custom message/data handling. All other transmap
request configurations should default to the standard class of
es.server.formatter.xml.ESXMLFormatter.
¾ To further the above bullet item, it is possible then that one of the overloaded
methods could be called on say delete and add processing, if so configured, but
each may require their own custom data handling. In these cases, the overloaded
methods may need to perform conditional checking based on the request identifier
as specified in tranObj with the key of XML_INBND_RQ_TRAN_TYPE. A code
example follows:
if ( msgType.equals( "ActiveScriptListRq" ) )
{
...
}
In this example, the conditional processing would only occur if the current request
were for ActiveScriptListRq.
110
7.10.6 Maximum Number of Data Rows Retrieval
There may be an instance where a UI/client can only accept so much data to be
returned in a response message. The UIS implementation works such that on listAll
processing, all data rows (or all filtered data rows) for a data source is returned in a
response message and for getBy processing, all data rows (or all filtered data rows)
satisfying set constraints are returned. In some instances, it may be necessary to
restrict the number of rows returned.
To do this, the respective transmap configuration for the request should be established
such that the maxRows = “#” attribute (via the <method> tag) is supplied with the
appropriate getBy type method specification (some data retrieval methods may not have
getBy type names, but this setting only applies to data retrieval functions); refer to
Section 3.1.1.1. This setting will then restrict the lower-level database services to only
return the specified number of data rows in a response message.
111
7.10.7 Updating of Primary Key Fields
There have been a few instances in work with BASE24-eps files where a requesting
UI/client must perform an update of 1 or more data rows and the data being updated
includes primary key fields. Typically, a database does not allow updates to primary key
fields. To resolve this with the UIS implementation, a workflow combined with various
elements allows update-like actions to occur through delete and insert functionality. This
is performed with the following coding steps:
1. Since a direct update is not typically allowed, delete and insert actions must be
configured in a transmap flow for the specific update request. An example of how
this was done for one request is:
<entry>
<tag>JTS_UpdateRq</tag>
<task>JournalTDESuppression</task>
<function>Save</function>
<formatter>
<class>es.server.formatter.xml.JTS_Config.XMLFormatter</class>
<schema>message/JTS_config.xsd</schema>
</formatter>
<command>
<class>es.server.command.ESTransCommand</class>
<transaction>
<component>es.server.datasource.
JournalTDESuppressionComponent</component>
<method>delete</method>
</transaction>
<transaction>
<component>es.server.datasource.
JournalTDESuppressionComponent</component>
<method>add</method>
</transaction>
</command>
</entry>
112
¾ DELETE_BY_ORIG should be added to tranObj and set to a value of “true”.
¾ ORIG_DATA should be added to tranObj. The value of ORIG_DATA should be
another JSF DataObject and it should contain 1 or more rows of original key value
information to be used for delete processing.
¾ NEW_DATA should be added to tranObj. The value of NEW_DATA should be
another JSF DataObject and it should contain 1 or more rows of new key information
to be used for add processing.
The BASE24-eps implementation for JTS_config provides a full example of this type
of implementation.
113
7.10.8 Implementing Filtering Support
To implement filtering support within UIS processing for a UI/client, the following
configuration steps must be taken:
1. Provide APPLCNFG entries for the filter.field.<tasked> property values, one for
each field that must be filtered from the UI/client. Refer to Section 2.6.3.3 for further
property information. The entries can be manually added to the APPLCNFG
database table or added to the DALCI ESConfig/scripts/ESFILTLD script file.
2. If database level filtering is required for getAll or getBy actions, then the impacted
transmap request configuration(s) must be updated to include a <filter><class>
specification as previously discussed in Section 3.1.1.1. The designated class for
BASE24-eps is the es.server.filter.ESFilter class.
114
7.10.9 Implementing Dynamic SQL Table Access Support
Dynamic SQL table access support refers to 2 or more database tables sharing the
exact same structure and form but having different names. In the BASE24-eps
implementation, an example of this might be the journal perusal files (multiple files
named differently, but each containing the exact same data format). Processing of these
database tables through a common database service is possible by performing the
following steps:
1. Modify the appropriate *Gen.xml file to provide a <type> setting for the <service> to
be of either both or dynamic. If there is 1 generic instance of the database table
and multiple additional copies of it, then use a <type> of both and set the
<table><name> value accordingly. If there are no generic instances of the database
table (only copies of it), then use a <type> of dynamic and do NOT set the
<table><name> value.
2. The use of the generated service will then require that the desired table name to be
processed against be supplied in the working data object via the
DYNAMIC_DS_NAME key with the value set accordingly. This will typically be done
in an extended XMLFormatter class where the dynamic table name or data source
assign is supplied in the request message in some pertinent field.
115
7.10.10 Start/End Key Data Retrieval Support
Start and end key data retrieval typically requires client input that contains the starting
and ending values. In a sense, this acts as a filter against the database to only retrieve
data rows that satisfy the range established by these values.
1. Establish an extended XMLFormatter class for the client and override the
cstmParseRequest method. In this method, the start and end values must be
extracted from the tranObj object and placed back into the tranObj object with the
corresponding logical column names as the key. Additionally, the start value and its
associated logical column key must be placed in row 0 of the tranObj object and the
ending value and its same associated logical column key must be placed in row 1 of
the tranObj object. This is because both keys would have the same name and
hence could not exist in the same data object row. The generated component and
service also expect to find this start/end specification in a row 0/row 1 combination.
2. Modify the appropriate *Gen.xml file to provide a <fetchBy> grouping for the
specialized start/end data retrieval to be done. An example is as follows:
<fetchby>
<entry>
<name>StartEndKey</name>
<retrievecolumns>
<colnumber>0</colnumber>
</retrievecolumns>
<wherecolumns>
<colnumber gte = "true">0</colnumber>
<colnumber lt = "true">0</colnumber>
</wherecolumns>
</entry>
</fetchby>
In the above example, column number 0 under the <wherecolumns> represents the
key column that will be working with start/end values. The use of the attributes gte
and lt, or comparable, is important to ensure whether the start/end values are
included or excluded from the evaluation of row retrieval. The <retrievecolumns>
can then be established to only return specific columns or left out to allow all
columns to be retrieved. For more information on <fetchBy> configuration, refer to
Section 3.1.2.
116
8. Appendix
Data type definitions used for message processing and data validations are supported
through the use of Sun’s XML Data Type library (xsdlib.jar and relaxngDatatype.jar).
The chart listed on the next page identifies the following items:
The list of supported restrictions for each Simple Type AND the processing priority order the
XML Data Type library applies to each Simple Type.
117
118
8.2 UIS Error Handling
The UIS implementation supports the following error responses that are returnable in the
respStat attribute of the root tag of an XML response message.
Rules
119
8.3 UIS DataObject Mapping
The UIS implementation supports the DataObject concept of the JSF. Processing
values and other objects are placed in a primary data object that is passed between
classes. This primary object is referenced throughout various UIS classes as tranObj.
The various object and processing values that are placed in the primary data object fall
under the following categories:
¾ Auditing Context
¾ Data Source Context
¾ Error Context
¾ Filtering Context
¾ Message Context
¾ Miscellaneous Context
¾ Security Context
Each of the categories and their associated objects and processing values are listed in
the sub-sections that follow.
8.3.1.1 AUDIT_DATA
The value associated with this key specifies an audit data object (JSF class
com.aciworldwide.common.datasource.AuditData) that contains audit information from
actions performed against data source data during processing. For AuditService
requests received from UAUD, the UIS converts audit data from the
cef.shared.auditing.AuditData object format to that of the JSF class used.
All insert, delete, and update actions can be audited as well as specific get actions.
Some data list retrieval functions may not be audited.
120
8.3.2 Data Source Context
All data for a data source will be represented in the primary data object as key/value
pairs with the key(s) being the logical name(s) from the data source. The data will be
representative of either request or response data as follows:
Request
All of the respective data elements retrieved from incoming requests are stored as a key
/ string value pairs in the primary data object. Special rules include:
¾ When processing XML request messages containing group elements, the group is flattened
out and only the sub-elements are added to the data object. This places the requirement that
all XML elements contained in a request message must be unique across the entire
message.
¾ When processing XML request messages containing elements or groups that can have
multiple rows (maxOccurs is greater than 1), each row of information will be placed in an
additional row contained in the data object (starting at row 0 (default row) and going to either
the maxOccurs limit or the maximum number of rows found, whichever is less). The first rule
above also applies (flattening of group data).
Response
All of the respective data elements retrieved from data sources or specific field error
information are stored as a String value, under this data object, and is accessed by its
key element name (except in the case of field error processing). The data values will be
used to generate response messages.
¾ When processing multiple rows of retrieved data (maxOccurs is greater than 1), each row of
information will be placed in an additional row contained in the data object (starting at row 0
(default row) and going to either the maxOccurs limit or the maximum number of rows found,
whichever is less).
¾ If there are 1 or more fields that are in error because of requirement and/or data validation
checks, error information specific to each field will be contained in the data object per the
guidelines under the Error Context sub-section that follows.
121
8.3.3 Error Context
If there are 1 or more fields that are in error because of requirement and/or data
validation checks, error information specific to each field will be contained in the data
object as follows:
122
8.3.4 Filtering Context
8.3.4.1 FILTER_FIELD_MAP
The value associated with this key identifies those fields (and their logical name
mappings) that are being filtered for the current task involved. This information is used
to extract information from request messages as well as provide filtering support on data
retrieval at the database layer.
8.3.4.2 FILTER_MAINT_MAP
The value associated with this key identifies those fields (and their logical name
mappings) that are being filter maintained for the current task involved. This information
is used to add/remove filter value information to/from the USEC database..
123
8.3.5 Message Context
8.3.5.1 EXTERNAL_CONNECTION_ID_STR
The value associated with this key indicates the External Connection associated with a
message.
8.3.5.2 EXTERNAL_REQUEST_BYTE
The value associated with this key specifies a byte array (byte[]) containing the original
XML request message or the request message to be sent to an external entity.
8.3.5.3 EXTERNAL_RESPONSE_BYTE
The value associated with this key specifies a byte array (byte[]) containing the
formatted XML response message or the incoming response from an external entity.
8.3.5.4 MESSAGE_UNIQUE_ID_STR
The value associated with this key provides a key to message context stored, retrieved,
and deleted for outstanding messages in the Message Services.
8.3.5.5 XML_INBND_RQ_TRAN_TYPE
The value associated with this key specifies the transaction key value identifying what
the incoming request tag was (keyed by the root tag of the XML request message).
8.3.5.6 XML_INBND_RS_TRAN_TYPE
The value associated with this key specifies the transaction key value identifying what
the response tag will be for replying to the inbound request (keyed by the root tag of the
XML request message).
8.3.5.7 XML_OUTBND_RQ_TRAN_TYPE
The value associated with this key specifies the transaction key value identifying what
the request tag will be for sending an outbound request.
8.3.5.8 XML_OUTBND_RS_TRAN_TYPE
The value associated with this key specifies the transaction key value identifying what
the response tag will be for receiving a response to an outbound request.
8.3.5.9 XML_RESP_ROOT
The value associated with this key stores the XML response message as an XML
document with the beginning root Element.
124
8.3.5.10 XML_RQST_ROOT
The value associated with this key stores the XML request message as an XML
document with the beginning root Element.
125
8.3.6 Miscellaneous Context
8.3.6.1 APP_ROW
The value associated with this key indicates the next row in the primary data object to
append data to. This is only utilized on getAll and getBy functions AND only on
subsequent calls to similar functions. Data appending should only be performed when
retrieving data from multiple data sources containing the exact same pertinent data as
an immediate prior processed data source.
Setting of this key/value comes from the <method> tag of the respective transmap
configuration file entry for the request being processed.
8.3.6.2 BYPASS_UPDATE_LAST_FM
The value associated with this key indicates the update processing for a data source will
NOT include last maintenance timestamp handling. This is primarily supported for
processing of contingency SAF requests on a secondary Web Server.
8.3.6.3 CHANNEL_DATA
The value associated with this key stores the original UIF channel data information
received from the request message.
8.3.6.4 CMND_IDX
The value associated with this key specifies the current <command> set being
processed from the associated transmap configuration file entry.
This is an internal value used by UIS that should not be modified by a user.
8.3.6.5 DATA_VALIDATED
The value associated with this key indicates to the CommandController class (and the
sub-classes it uses) that the data validation step for the current request has been
performed. This helps avoid repeated data validations from occurring.
8.3.6.6 DELETE_BY_ORIG
When present, the value associated with this key specifies a setting of true to indicate
that UIS is performing special delete handling. This is typically used in cases where an
update request has been issued, part of the update includes primary key fields which are
typically not allowed to be updated, and the implementation must perform one or more
deletes followed by one or more inserts to achieve the desired results.
The data component layer expects the NEW_DATA and ORIG_DATA key/values to
also be present when processing this key.
126
8.3.6.7 DYNAMIC_DS_NAME
When present, the value associated with this key specifies the actual data source to be
processed during database actions. This is to be used in cases where multiple tables
sharing the same structure can be accessed from a common database service, provided
the database service is given the name of the data source to access. The value for this
key will typically come from a client, supplied in a request message, and will be loaded
into this key by an extended XMLFormatter class.
8.3.6.8 FIELD_MAINT_MAP
When present, identifies the current field element names for those elements that have
filter requirements in the USEC database. If this map is present near the end of request
processing, additional filter processing will be performed with the USEC environment.
8.3.6.9 FILTER_MAINT_MAP
When present, identifies the current element mapping for those elements that have filter
requirements in the USEC database. If this map is present near the end of request
processing, additional filter processing will be performed with the USEC environment.
8.3.6.10 IN_TRANSACTION
When present, identifies if the current data component processing is being done within
the context of a database transaction. If not present, then standard, non-transactional
support is being performed.
8.3.6.11 MAX_ROWS
The value associated with this key specifies the maximum number of rows that the
database layer will retrieve and return on getAll and getBy processing.
Setting of this key/value comes from the <method> tag of the respective transmap
configuration file entry for the request being processed.
8.3.6.12 MSG_IND
The value associated with this key identifies the type of message processing currently
being (i.e. inbound/outbound request/response). Used to provide proper message
handling in the message layer.
127
8.3.6.13 MSG_TYPE
When present, the value associated with this key identifies the type of message
processing that must be performed for outbound request messages. It is used as a
helper value in instances where the outbound message may be in a different format
other than XML. Currently, we only support XML for all inbound and outbound
messaging.
8.3.6.14 MULTI_ROWS
When present, the value associated with this key specifies a setting of true to indicate
that UIS is performing special original delete row handling.
8.3.6.15 NEW_DATA
The value associated with this key specifies the appropriate named logical data
elements, for the data source, with the new set of values that will be used for INSERT
processing.
This key must be present in conjunction with the DELETE_BY_ORIG and ORIG_DATA
key/values.
8.3.6.16 NUM_RESP_ROWS
The value associated with this key specifies the number of data object rows that actually
contain valid response data. This information is provided by the data source
components and utilized by the MessageSchema class during response building.
8.3.6.17 ORIG_DATA
The value associated with this key specifies the appropriate named logical data
elements, for the data source, with the old set of values that will be used for DELETE
processing.
This key must be present in conjunction with the DELETE_BY_ORIG and NEW_DATA
key/values.
8.3.6.18 RESP_STAT
When present, the value associated with this key specifies the internal approval
response code when the data object’s error code is null. Currently, the only values this
could contain are DBS_FILE_OK (response message value set to FILE_OK on
outbound responses) and DBS_FILE_EXHAUSTED (response message value set to
FILE_EXHAUSTED on outbound responses).
128
8.3.6.19 ROW_ID_MAP
The value associated with this key indicates any received RowID settings received from
a request message. When multiple data rows are received in a request, this map helps
coordinate error data setting and other processing necessary to keep the server and
client display in sync.
8.3.6.20 TRAN_IDX
The value associated with this key specifies the current <transaction> set being
processed from the associated transmap configuration file entry.
This is an internal value used by UIS that should not be modified by a user.
8.3.6.21 TRANSACTION_MAP_ENTRY_STR
The value associated with this key specifies a TransactionMapField object that
contains a single <entry> set of information from a trans map XML script file. The object
is used throughout formatter and command processing to guide request processing.
8.3.6.22 TRANSACTION_MAP_KEY_STR
The value associated with this key specifies the transaction key value (root tag of the
XML request message) used to access the proper configuration map entry in the trans
map files.
129
8.3.7 Security Context
8.3.7.1 SECURITY_VERIFIED
The value associated with this key specifies a true or false value to indicate if the
CommandController class has already performed USEC related authentication and
authorization functions. This processing is performed one time during processing when
the ESTransCommand or ESSimpleCommand classes are invoked.
This is an internal value used by UIS that should not be modified by a user.
8.3.7.2 USEC_PERMISSION_DATA
The value associated with this key is a USEC Permissions data object that provides task
permission and filtering information for a user that is used to provide authorization
support within the UIS environment. This information is used to provide task/function
verification as well as filtering support at both the top level command processing layer
and at the database layer.
This is an internal value used by UIS that should not be modified by a user.
8.3.7.3 USER_SUBJECT
The value associated with this key specifies the USEC user subject data object
containing security data for the current request. This information is used when
performing various security related tasks.
This is an internal value used by UIS that should not be modified by a user.
130