# Teiid ${project.version} Release Notes

Teiid ${project.version} adds performance and integration features.

## Overview

Highlights

Compatibility Issues

Configuration Issues

Other Issues

Thirdparty Library Updates

Detailed Release Notes

Additional Docs and Help

Licenses

About JBoss

## Highlights

TEIID-3411 LDAP modeling can now better account for associations defined by multivalued attributes.

TEIID-3323 Vertica translator added.

TEIID-3515 TEIID-3530 Dependent join enhancements in hints and pushdown planning.

TEIID-2883 Actian Vector in Hadoop Translator added

TEIID-3595 TEIID-3594 Logging Enhancements for command and audit logging

TEIID-3546 IS DISTINCT FROM syntax support added for use in procedures.

TEIID-3521 Swagger Support for auto-generated REST web services

TEIID-3652 Additional OUTER JOIN planning to allow more flexibility in join ordering

TEIID-3668/TEIID-3618 OAuth Support with JWT Bearer Access Token and Salesforce SSO using OAuth2 (RefreshToken, JWT)

TEIID-3712 Date/Time Keyword Literal support was added in the parser.

TEIID-3722 Option to not widen comparisons to string was added via the system property org.teiid.widenComparisonToString

TEIID-3327 OSIsoft PI translator added for use with the PI JDBC driver.

TEIID-3727 Salesforce Translator added a translator and resource-adapter based on Salesforce Partner API 34

TEIID-3370 OData4 Translator added new translator to read/write from any compliant OData V4 source

TEIID-3890 Redshift Translator added to account for differences between Redshift and Postgres.

TEIID-3725 JDG Cache/DSL Translator added cache swapping feature to support external materialization.

TEIID-3810 JDG Cache/DSL Translator upgraded support for JDG 6.6

## Compatibility Issues

Support for named parameter syntax using param=value has been deprecated, since it is ambiguous with a comparison predicate boolean value expression. param=>value should be used instead.

decodeinteger/decodestring have been deprecated. A CASE expression should be used instead.

TEIID-2267 The custom appenders for command and audit logging has been changed, now they need to be developed for java.util.logging based Handler.

TEIID-1979 The resource adaptors are now deployed through modules, and have shorter names as identifiers. Connection Factories created with previous versions must be re-configured.

TEIID-2326 By default imported vdb internal materialized views will shared with the importing vdb.

TEIID-2344 non-available JDBC sources in partial results mode or source with connection factories that require an ExecutionContext to obtain a connection will require manual setting of the database version metadata property. The affected sources are: db2, derby, oracle, postgresql, sqlserver, sybase, teiid

TEIID-2477 Most of the JDBC translator static String version constants were replaced by org.teiid.translator.jdbc.Version constants. Use the .toString() method to obtain a version string if needed.

TEIID-2527 The admin method assignToModel has been deprecated. See the updateSource, addSource, and removeSource methods instead.

TEIID-2904 The createMetadataProcessor method on JDBCExcutionFactory has been deprecated. Use getMetadataProcessor instead.

TEIID-3159 The SAP Netweaver Gateway translator (sap-nw-gateway) has been renamed to just SAP Gateway (sap-gateway). Usage of sap-nw-gateway is deprecated.

TEIID-2694 In the autogenerated web service, if a procedure is designed for POST method, and one of its IN/INOUT parameters is either a LOB or VARBINARY then that service can only invoked using "multipart/form-data". This allows user to send large binary files for processing in Teiid

TEIID-3814 In the autogenerated web service, the model name in the path is now case sensitive.

TEIID-3684 The RoleBasedCredentialMapIdentityLoginModule is deprecated, and will be removed in major version. Consider alternative login modules with roles assignments to restrict access to the VDB.

TEIID-3754 The OData2 web service layer has been deprecated and will be removed in a future release. The OData v4 service layer should be instead when possible.

TEIID-4205 By default, the wrapping begin/commit of a UseDeclareFetch cursor will be ignored as Teiid does not require a transaction. Set the org.teiid.honorDeclareFetchTxn system property to false to revert to the old behavior which honored the transaction.

TEIID-4866 For usability with SQLAlchemy and Superset the version() function over ODBC will report ""PostgreSQL 8.2" rather than "Teiid version". You can use the system property org.teiid.pgVersion to control this further.

#### from ${project.version}

TEIID-4418 - Pushdown of a correlated with clause contains wrong correlated reference (fixing pushdown correlation handling)

TEIID-5356 - Infer field metadata from the source columns (logic to infer metadata, rather than use defaults for views)

TEIID-5357 - creating a ddl table with two unique columns fails (correcting the auto-naming)

TEIID-5359 - Resultset metadata defaults to case insensitive (changing the default case sensitive to true)

TEIID-5361 - Column metadata with set queries only reflects projected branch (Column metadata with set queries only reflects projected branch)

TEIID-5369 - enableDependentJoins for Redshift translator (removing the on commit clause from redshift)

TEIID-5410 - Incorrect result from timestampadd with 1 billion or more fractional seconds (correcting timestampadd behavior)

TEIID-5461 - adding parsing/pushdown support for the window frame clause, adding a validation of RANGE and int bounds

TEIID-5525 - add a flag to revert to the prior behavior (TEIID-4557) (adding a flag to optionally enforce the single buffer max, increasing the default estimate of max size, adding details about the system property to the message)

TEIID-5516 - Exclude hidden schemas in metadata (restricting schemas from being seen as well)

TEIID-5564 - Batch removed during large temp table load (removing all potential unchecked exceptions from batch access)

TEIID-5474 - NPE on Complex Query with Procedure Call in SELECT (backport of the changes along with the first commit of TEIID-4449)

TEIID-5532 - Common table projection minimization does not account for usage in a subquery nested in an aggregate or in some view scenarios (fix for inappropriate projection minimizationi, when cte is nested in a view, narrowing narrowing the commands used to determine usage correcting the marking of columns as accessible to be localized)

TEIID-5541 - Incorrect parsing of xml with XmlTable (disabling projection when root() is used, correcting the no projection, but a streaming path case)

TEIID-5550 - DISTINCT pushed down incorrectly in some cases (fix for inappropriate dup node removal over join)

TEIID-5559 - odata4 NPE when accessing VDB including FK relationship across models (allowing fks to cross schemas)

TEIID-5587 - Oracle 11 drivers don't accept NVARCHAR type (refining to allow latin 1 supplement as ascii)

#### from 8.12.16.6_4

TEIID-4731 - Unable to connect to MongoDB pod from JBoss Data Virtualization (on OpenShift) (changing the default of authentication scheme used for MongoDB to SCRAM_SHA_1 as MongoDB >= 3.0 uses this auth scheme)

TEIID-5013 - Google Spreadsheet Data Sources with custom client_id and client_secret (allowing the client id/secret to be changed)

TEIID-5179 - Upgrade hadoop-core jar (from 0.20.2 to 1.1.2)

TEIID-5329 - Problem with salesforce url (updating salesforce url)

TEIID-5439 - Batch removed during large internal materialization load (ensuring that the original exception is shown, adding a break from unsuccessful undo, TEIID-2465 updating the performance test)

TEIID-5443 - Using RAND() function in a column mask errors on temp table creation (fix for creating an improper view when adding masking)

TEIID-5444 - Upgrade to Olingo-4.5 (Upgrading the OData Olingo library to 4.5.0)

TEIID-5477 - Incorrect results with lead/lag over windows with duplicates (correcting lead/lag over duplicate values)

TEIID-5485 - JOIN of a table and sub-query containing DISTINCT and table function of a procedural call with arguments fails (correcting the wrong output from a nested table join)

#### from 8.12.15.6_4

TEIID-2476 - Exclude hidden tables/columns from metadata (filtering metadata based upon data roles, improving the performance of pg system queries, allowing admin access to see everything, adding a test for properties, expanding the check of key records)

TEIID-4512 - Issue with older drivers and useStreamsForLobs (calling the old method if possible)

TEIID-4520 - Support for Exasol Connector (Support for Exasol translator, Fixed byte conversion and correlated subqueries, adding an exasol release note)

TEIID-4532 - Provide one-way or cryptographic hash functions (add and refining hash functions and removing the overlapping function)

TEIID-4761 - Support lpad/rpad pushdown to sql server (adding lpad/rpad)

TEIID-5317 - Add support for ODBC 3.0 functions (adding odbc date/time functions)

TEIID-5374 - Allow for non-virtual dependent joins to be created over unions (correcting and expanding the logic dealing with dependent joins over unions)

TEIID-5390 - Concurrent repeated add attempts create orphaned blocks (fixing the leak of inode/data blocks)

TEIID-5413 - Make inclusion of DDL schema optional in list-vdbs CLI method (adding includeSchema in get-vdb as option)

TEIID-5417 - Performance degradation with large in predicate against temp table (correcting array typing and producing a set of constants from the dependent criteria processor for temp tables)

TEIID-5422 - Buffer cleaner running too often in some cases (changing the cleaning interval to prevent thrashing)

TEIID-5424 - timestampadd/diff with quarter should not use 91 days (correcting quarter calculations)

TEIID-5426 - For Each processing for instead of triggers should materialize change set before processing (switching to use an intermediate change set table)

TEIID-5430 - Closing Teiid JDBC connection is delayed 5 seconds (making the close wait much smaller)

TEIID-5434 - count(*) returns different nr of rows compared to normal select (correcting the output columns with the distinct operation is moved)

TEIID-5441 - Redshift translator "AS decimal" should have 0 default scale (adding explicit precision/scale to decimal casts)

TEIID-5446 - Retrieving clob values from Exasol prints stacktrace to server log (avoiding getClob for Exasol)

TEIID-5457 - Issues with sybase/ms sql pad pushdown (correcting the lpad/rpad pushdowns)

#### from 8.12.14.6_4

TEIID-3750 - Allow the parsing of an expression (allowing the direct parsing of an expression as a default)

TEIID-4756 - Improve log messages when using an UDAF without the required classes defined in VDB (adding better failure messages)

TEIID-4786 - Report more information with max block exception (adding more context to the exception message)

TEIID-5180 - Execution of stored procedure with parameters failed on Teiid (improving parameter defaults)

TEIID-5184 - Clob not supported in dynamic VDB (accounting for null values)

TEIID-5198 - Procedure names containing . do not resolve properly (allowing for additional partial name resolving for procedures)

TEIID-5235 - Could not find symbol in processing an inline view using except (adding a project node for inline views containing except)

TEIID-5265 - AssertionError: Batch not found in storage (cleanup of exceptions around entering the memory buffer)

TEIID-5270 - Materialization translator infinispan-hotrod inconsistent state

TEIID-5313 - Oracle translator issue with mixing string types and general issues with non-ascii strings (correcting nchar/nvarchar handling , expanding the fix to binding and sqlserver/sybase)

TEIID-5336 - Improve TEIID-5253 (improving the previous fix to add service dependencies)

TEIID-5339 - Vertica join query fails due to unexpected ordering of intermediate results (correcting vertica null sorting and the sort validation)

TEIID-5345 - ClassCastException if multi-column dependent join is pushed to literals (fixing dependent join predicate planning)

TEIID-5353 - Prepared Statement params are not pre-evaluated (allowing select nodes to pre-evaluate)

TEIID-5354 - Different results for a query with GROUP BY and SUM(1) (summation of the number 1) when there is a LEFT or INNER JOIN involved (fixing sum(literal) planning with aggregate decomposition)

TEIID-5373 - Dependent set created from prepared IN predicate fails (correcting prepared dependent behavior)

TEIID-5377 - Type mismatch when issuing recursive common table expression query (correcting rcte typing)

TEIID-5396 - Querying SQL Server variant type for a string fails (expanding the convertmodifier check used to determine pushdown support)

TEIID-5398 - Sybase translator error caused by change in ASCII function pushdown (moving the unicode function specifically to sql server)

#### from 8.12.13.6_4

TEIID-4129 - Wrong results with cross model join on 2 varchar fields (removing the pushdown of a string sort for sort/merge in more)

TEIID-4646 - Add engine support for lead/lag aggregate functions

TEIID-4649 - SybaseIQ translator: different order of arguments in CONVERT function (addressing sybase iq convert issue)

TEIID-4650 - SybaseIQ translator: week function can't be pushed directly (fixing week and locate)

TEIID-4651 - SybaseIQ translator: different order of arguments in LOCATE function

TEIID-4652 - SybaseIQ translator: DAYOFYEAR function not pushed correctly (changes to allow for the jconnect driver)

TEIID-4653 - SybaseIQ translator: Input parameter not set in prepared statement in source command (changes to allow for the jconnect driver)

TEIID-5193 - Osisoft translator - correlated subquery on HAVING clause fails (fixing having placement with subqueries)

TEIID-5224 - Osisoft translator - general lateral join support (restricting lateral to only procedures)

TEIID-5230 - Postgis functions are not resolvable in the public schema (adding a public prefix to postgis functions)

TEIID-5247 - SQL Server translator should support coalesce (adding coalesce pushdown to sybase and sql server)

TEIID-5250 - Duplicate result uid reported when using procedure isFunction=true (fixing duplicate uid issue with index metadata functions)

TEIID-5269 - Odata4 metadata roundtrip is not in place (adding more refinements to odata metadata)

TEIID-5283 - Recursive WITH query results in "java.lang.ClassCastException: org.teiid.query.sql.lang.Query cannot be cast to org.teiid.query.sql.lang.SetQuery" (fixing recursive with planning)

TEIID-5288 - OData4 skiptoken is not pulling from the cached results (fix to ensure the cache entry is reused)

TEIID-5291 - Upgrade the MongoDB Java driver

TEIID-5297 - With MongoDB, null is returned from timestamp functions if the same function is part of WHERE clause(fixes for mongodb with time functions)

TEIID-5301 - With MongoDB, a query with subquery in HAVING clause doesn't return any results (addressing an issue with aggregate projection)

TEIID-5319 - SAP IQ translator wrong pushdown of query with multiple JOINs (adding parens for nested joins)

TEIID-5320 - SAP IQ translator wrong pushdown of dateadd function (changing the adddiffmodifier to output)

TEIID-5326 - SAP IQ timestamp conversion to varchar wrong resulting format (updating the timestamp formating for sap iq and sybase)

TEIID-5328 - regression of org.teiid.padSpace does not affect to the "IN" operator behavior (fix for regression)

TEIID-5330 - FIRST_VALUE/LAST_VALUE/LEAD/LAG functions always try to return integer (fixing analytical resolving)

TEIID-5331 - LEAD/LAG ignores ORDER BY in the OVER clause (fixing lead/lag)

#### from 8.12.12.6_4

TEIID-4834 - Wrong pushdown of ST_Touches to Oracle (regression fixed)

TEIID-4950 - PostgreSQL Linux ODBC driver v09.06.0100 and newer does not work with Teiid Server 9.1.1 (expanding set statement syntax)

TEIID-5130 - Document/refine behavior of treating result parameter as the first parameter (forcing result parameters to be first)

TEIID-5136 - Osisoft translator - NPE when running query with inline view (fixing the handling of guid types with inline views)

TEIID-5172 - Missing message for key "TEIID31262" (fixing the missing message)

TEIID-5176 - Postgresql ODBC driver converts {fn CONCAT()} calls to a "textcat()" function

TEIID-5199 - Infinispan hotrod translator correlated subquery with where criteria issue (addressing issues with false predicates and subqueries)

TEIID-5206 - checking precision and scale on EdmDecimal after denormalization of exponential form (olingo update)

TEIID-5221 - OData4 Translator generates invalid metadata (Correcting the metadata generation for OData V4 sources, correcting column ordering)

TEIID-5222 - Invalid conversion when selecting array (adding general array conversion support)

TEIID-5229 - NoSuchElementException for inherent DELETE with no pk on source table (a better exception/validation for pk and inherent updates)

TEIID-5253 - Timing issue in domain mode with materialization (addressing timing issue when listening for vdb events)

#### from 8.12.13.6_3

TEIID-5020 - Join query results in NullPointerException (fixing predicate issue over nested union)

#### from 8.12.12.6_3

TEIID-4335 - No buffer when close is called (fixing the npe)

TEIID-4947 - Error with Salesforce translator if criteria on outer join on a custom table is from the right side table (fixing the handling of custom relationships)

TEIID-4960 - Problems when using External Materialized Views (fixing an issue with nesting request transactions)

TEIID-4976 - criteria duplicated when criteria includes the same columns as dependent join criteria (removing duplicate criteria)

#### from 8.12.11.6_3

TEIID-4446 - Rationalize precision/scale

TEIID-4663 - Support a more secure block mode for client/server encryption

TEIID-4722 - TEIID30019: java.lang.AssertionError: Assertion failed assertion due to guard against a corner condition.

TEIID-4732 - Teiid Server does not honor columns name in external materialization (using the column names in inserts)

TEIID-4754 - Wrong result with bidirectional relationship (ensuring the right foreign key is used)

TEIID-4755 - WS SOAP Response with WS-A Headers results in ClassCastException (Using the DOM based return in MESSAGE mode as CXF does not allow StAX based Source)

TEIID-4819 - Tree page modifications removing the previous page, don't remove immediately (correcting the buffermanager logic and enabling assertions)

TEIID-4852 - Wrong OData results with multiple self relationships (ensuring the correct fk is used)

TEIID-4859 - OData throws org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException when primary key is bigdecimal

TEIID-4861 - ASSERTION FAILED: expected reference to be not null (fixing partitioned multi-source aggregate pushdown under join)

TEIID-4867 - Loosen up OData4 URL validation or parsing

TEIID-4874 - SQL Server translator should support full outer join by default (changing default support for full outer join)

TEIID-4875 - Planning issue with multiple aggregate decompositions through a join tree (fixing aggregate planning issue)

TEIID-4901 - Add parallel source query handling for when IN criteria values exceed MaxInCriteriaSize for translator (pushing large in as dependent set)

#### from 8.12.10.6_3

TEIID-4468 - Google translator evaluates 0 as not NULL for operator <>

TEIID-4722 - TEIID30019: java.lang.AssertionError: Assertion failed assertion due to guard against a corner condition.

TEIID-4859 - OData throws org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException when primary key is bigdecimal

TEIID-4867 - Loosen up OData4 URL validation or parsing

#### from 8.12.10.6_3

TEIID-4468 - Google translator evaluates 0 as not NULL for operator <>

TEIID-4595 - Wrong pushdown of several spatial functions to Oracle

TEIID-4661 - Subsequent queries hang after materialized view TTL expires. (correcting lazy-invalidate behavior)

TEIID-4666 - Google translator throws SpreadsheetOperationException for query DELETE FROM table (allowing delete/update to work with no predicate)

TEIID-4667 - Oracle translator - parseTime throws exception if string has extra trailing characters after standard time format (adding ltrim/substring to prevent issues with trailing information / narrowing the optimization )

TEIID-4668 - Google translator skips NULL value in INSERT (fixing issues with null inserts/updates)

TEIID-4720 - changes in requiresLeftLinearJoin and useParensForJoins needed for Hive (making hive similar to impala)

TEIID-4726 - "java.util.ConcurrentModificationException" when deploying VDB (catching concurrent modification exceptions)

TEIID-4727 - Aggregation is performed incorrectly for JOIN queries (addressing cardinality dependent aggregates that are not decomposed)

TEIID-4737 - Incorrect work of left join statement (fixing merging of virtual layers under an outer join)

TEIID-4744 - Prior execution is not being closed in transactional secenario (more quickly calling close)

TEIID-4775 - External materialization, after transaction timeout, LoadState continues to be LOADING

TEIID-4778 - External Materialization, When TTL is less than loading time, the scheduling is off

TEIID-4780 - Clone TEIID-4734 (Backwards compatible solution)

TEIID-4782 - Change framework to catch RutineException from translator/connector

TEIID-4793 - Change of class loading no longer requires module dependencies

TEIID-4812 - Processor is not exiting the join as soon as it's determined one side contains 0 rows (addressing issues related to no rows and larger reads from)

TEIID-4817 - Infinispan DSL Resource Adapter: can't query after JDG restart

#### from 8.12.9.6_3

TEIID-4298 - Support in Odata4 for the Partner NavigationProperty attribute

TEIID-4393 - Add new Geospatial functions (adding pushdown support to pg, correcting the function name)

TEIID-4486 - improving the performance of st_extent and allowing for pushdown

TEIID-4511 - st_Intersection not implemented (add st_intersection function)

TEIID-4543 - Rewrite parse/format of standard formats to cast instead (adding rewrite of default formats to cast)

TEIID-4553 - COUNT returns inconsistent results when column statistics are not gathered (updating to check for count(literal))

TEIID-4580 - ST_PointOnSurface returns point on the boundary of the polygon (Fix ST_PointOnSurface)

TEIID-4656 - removing the pushdown of parseTimestamp

#### from 8.12.8.6_3

TEIID-4324 - TEIID30019 Unexpected exception for request ... java.lang.AssertionError: Batch not found in storage (correcting clean up logic)

TEIID-4447 - database service logging for auditlog gives NPE when running a query

TEIID-4448 - Multi-way join predicate inappropriately removed (correcting setting the predicate as optional)

TEIID-4469 - Insert with query expression does not apply source hint to target (applying the source hint)

TEIID-4471 - Assertion error with temp table delete (ensuring better tracking of browsing values)

TEIID-4486 - Improving the performance of st_extent and allowing for pushdown

TEIID-4491 - Refine uniqueidentifier support for SQL Server (updating uniqueidentifier handling)

TEIID-4499 - OData Kerberos cannot access VDB (improving GSS auth with local connections)

TEIID-4588 - Duplicate column occurs when using translator to produce metadata for staging table

TEIID-4590 -Fix the Select ALL logic so that it works when different object types exists

#### from 8.12.7.6_3

TEIID-4187 - Extend support for PI OLEDB Enterprise Queries in OSI PI Translator (adding support various missing features, see JIRA notes (#725))

TEIID-4202 - Support Lateral join and procedure pushdown (added the initial mechanics for pushdown - with initial support pg and teiid)

TEIID-4330 - Better planning with chained makedep scenarios (adding an option to make source grouping less aggressive)

TEIID-4344 - OData static context - if resource does not exist then Teiid throws NPE and returns empty page (fixing npe)

TEIID-4366 - Provide CORS support on OData Service (Adding CORS support to the OData web service)

TEIID-4367 - Fail to deploy VDB with TextTable SELECTOR (correcting the to string logic)

TEIID-4405 - delete using in statement does not remove records from temporary table (addressing temp table issues)

TEIID-4410 - ConnectorWorkItem setting of convertIn should be based upon the execution factory (fixing in conversion)

TEIID-4411 - With clauses in subqueries that appear in inline views should be pulled up (pulling up with clauses used in an inline view)

TEIID-4417 - Issues with OData query generation logic (addressing issues with sql generation)

TEIID-4419 - Allow pre-evaluation of uncorrelated scalar subqueries in more circumstances (pre-evaluating scalar subqueries that reference a with clause + ensuring with is associated correctly)

TEIID-4443 - STRING_AGG should not be decomposable (ensuring string_agg is not decomposable)

TEIID-4456 - Enable the abiltiy to support nested and non-nested message descriptors

TEIID-4463 - No results with cross source outer join and offset only (fixing offset only handling)

TEIID-4477 - LDAP connector disconnects intermittently with error "TEIID12002" (ldap updates)

TEIID-4478 - The 1-to-1 relationship currently doesn't work and doesn't error either

TEIID-4492 - When using annotations, add option that specifies all child classes to register as part of the JDG schema

TEIID-4510- - JDG Complex POJO 1-n relationship wrong results when joining parent and child table

TEIID-4518 - Add module dependencies to support JDG 7.1

TEIID-4519 - JDG prevent execution of delete or update on child objects

#### from 8.12.6.6_3

TEIID-4238 - Remove need for quotes around cursor name declarations/fetches (removing the need for quoting)

TEIID-4245 - Add support for fetch syntax "FETCH cursorname" (supporing just fetch cursor name)

TEIID-4247 - OData - support date and time functions (adding date and time functions)

TEIID-4271 - Consume Teiid OData from Salesforce (Providing an option to exclude system metadata from OData schema document)

TEIID-4278 - MySQL 5 should support distinct aggregates

TEIID-4288 - Cancel method against a socket based jdbc query can wait for synch timeout (narrowing the synchronization)

TEIID-4289 - Add transaction command support for syntax BEGIN/ROLLBACK/COMMIT WORK (adding support for the work/transaction keywords)

TEIID-4299 - Object translator null values correctly (added logic and test to handle the schema within a schema after teiid designer materialization generates it. Regarding trying to set a null on a java native type, added to throw an exception)

TEIID-4304 - Correct handling with subquery in on clause

TEIID-4320 - Costing calculation issues (fixing costing issues)

TEIID-4323 - Add support for first/last/absolute/relative "FETCH " syntax

TEIID-4324 - TEIID30019 Unexpected exception for request ... java.lang.AssertionError: Batch not found in storage (correcting clean up logic)

TEIID-4325 - ASSERTION FAILED: expected reference to be not null (fixing planning error with outer join associativity)

TEIID-4329 - Using JDG annotations, unable to provide package name qualification for serialization

TEIID-4330 - Better planning with chained makedep scenarios

TEIID-4335 - No buffer when close is called (fixing the npe)

TEIID-4358 - JDG: Retain supported dependencies in the module.xml for out-of-the-box usage

#### from 8.11

TEIID-3553 Ambiguous OData v2 entity set and function names will throw an exception rather than resolving to the first found.

TEIID-3515 MAKEIND was added as a reserved word.

TEIID-3576 the waitForLoad connection property has been deprecated.

TEIID-2813 a source end event will be sent to the command log when an error occurs rather than being omitted.

TEIID-3736 string literals values matching the date format can be directly resolved as timestamps.

TEIID-3727 The version 22 salesforce translator and resource adapter have been deprecated.

#### from 8.10

TEIID-3380/TEIID-3663 The SecurityHelper interface has changed to allow for easier control over GSS authentication

TEIID-3372 DDL and DDL-FILE metadata repositories have deprecating using the respective ddl and ddl-file model properties.

TEIID-3390 temporary lobs are now cleaned up when the result set is closed - even for local connections.

#### from 8.9

TEIID-3210 Added supportsCompareCriteriaOrderedExclusive, which defaults to supportsCompareCriteriaOrdered, to specifically support < and > pushdown.

TEIID-3282 Changed the WEEK function to compute the ISO 8601 by default (org.teiid.iso8601Week=true) and ensured pushdowns do the same. Changed the dayOfWeek function to be unaffected by the iso8601Week setting.

#### from 8.6

TEIID-2793 Searchability metadata will not prevent more complicated expressions from being pushed down.

TEIID-2794 Schema scoped functions are checked for ambiguity. Schema qualification may be needed to resolve properly.

TEIID-2840 Internal materialized view ttl refresh is now blocking by default. To keep the old behavior of lazy invalidation, use the vdb property lazy-invalidation=true

#### from 8.5

TEIID-2667 The jdbc importer importKeys parameter is now correctly defaulted to true.

TEIID-2737 The 'native' procedure exposed by translators has been renames as the direct query feature. The related ExecutionFactory methods supportsNativeQueries and nativeQueryProcedure name have been deprecated and replaced with supportsDirectQueryProcedure and directQueryProcedureName.

#### from 8.4

TEIID-2580 Both xpathValue and XMLTABLE will return null when retrieving the value for a single element marked with xis:nil="true".

TEIID-2590 Both the source specific and the general hint if present will be included as the source hint for Oracle.

TEIID-2603 TableStats and ColumnStats numeric values are held as Number, rather than Integer.

TEIID-2613 The rowcount is reset to 0 after a non-update command statement is issued.

TEIID-2422 using calendar based timestampdiff by default. See the Admin Guide for using the org.teiid.calendarTimestampDiff to control backwards compatibility.

#### from 8.3

TEIID-2444 The deployment platform for Teiid has been changed to EAP 6.1.Alpha1, older or non-EAP deployments are not supported.

TEIID-2429 Sorts over data sets over a single batch are not guaranteed to be sorted in a stable manor to improve performance. The sort will still be correct with respect to the sort keys.

#### from 8.2

TEIID-2253 the multi-source implementation logic was significantly altered the following changes were introduced.

If not auto-populated, the multi-source column acts as a pseudo-column and will not be selectable via a wildcard SELECT * nor tbl.*

Multi-source inserts must specify a single source as their target.

The join planning behavior in multi-source mode was not consistent and did not work in all situations. To ensure consistency multi-source tables being joined together should specify a join predicate on the source name column - i.e. tbl1.source_name = tbl2.source_name. For backwards compatibility a the system property org.teiid.implicitMultiSourceJoin was introduced to control whether multi-source joins are effectively partitioned by source without a source_name predicate. The property defaults to true, the pre 8.3 behavior - but should be switched to false for later versions unless the issues with implicit join planning are addressed.

TEIID-2317 byte[] char[] and java.util.Date instances returned as object values will be left in tact and not automatically converted to BinaryType, ClobType, and Timestamp respectively. The values may still be cast to those types.

#### from 8.1

TEIID-2149 the subqueryUnnestDefault property no longer influences cost based decisions to treat subqueries as merge joins. In nearly all circumstances this is desirable, but may require the use of nounnest hint to prevent forming the join if desired.

TEIID-2166 array_get will return null if the index is out of bounds rather than raising an error.

TEIID-2175 for 8.0 and 8.1 clients the server will check if serialized date/time values fall outside of 32-bit value ranges (year 1900 - 9999 for dates and times between years 1901 and 2038) and throw an exception. The previous behavior was to truncate. The exception and the use of 32 bit serialization can be avoided by setting the system property org.teiid.longDatesTimes to true.

TEIID-2184 to be consistent with the rest of Teiid's logic the system functions dayName and monthName will return values from the default locale, rather than only the English names. Use the system property org.teiid.enDateNames true to revert to the pre-8.2 behavior.

TEIID-2187 the CONSTRAINT keyword is not correctly used in table DDL. It should be replaced with a comma from scripts to be compatible with 8.2. If desired, 8.2 now supports the CONSTRAINT keyword to provide a name for each constraint.

TEIID-2181 system tables no longer contain valid OIDs. That responsibility has moved to the pg_catalog.

TEIID-1386 the SQLState and errorCode reported by a TeiidSQLException will typically be from the top level nested SQLException. If there is also a nested TeiidException, the TeiidSQLException.teiidCode will be set to the TeiidException.getCode value and the TeiidSQLException.errorCode will be set to the integer suffix of the teiidCode if possible.

TEIID-2226 All statements that return result sets that are executed as command statements in a procedure are validated against the expected resultset columns of the procedure. If the statement is not intended to be returnable, WITHOUT RETURN can be added to the end of the statement.

TEIID-2235 The MetadataRepository.setNext method was removed and MetadataRepository was converted to an abstract class rather than an interface. Also if an instance of a DefaultMetadataRepository is used, it will only affect metadata already loaded in the repository chain.

TEIID-2237 teiid_ is a reserved DDL namespace prefix and the MetadataFactory class no longer throws TranslatorExceptions, instead the unchecked MetadataException is thrown.

TEIID-2243 by default Teiid will not pushdown the default null sort order of nulls low when no null sort order is specified. Set the system property org.teiid.pushdownDefaultNullOrder to true mimic the 8.1 and older release behavior.

#### from 8.0

org.teiid.metadata.Schema holds FunctionMethods by uuid rather than name to accommodate overridden method signatures.

MetadataFactory no longer extends Schema. Use the MetadataFactory.getSchema method to get the target Schema.

DDL created VIRTUAL pushdown functions should be referenced in the ExecutionFactory.getSupportedFunctions by their full schema.function name.

DDL functions/procedures defined without the VIRTUAL keyword are by default VIRTUAL. Use the FOREIGN keyword to indicate that they are source specific.

FunctionMethod.getFullName returns the proper schema, not category qualified name.

VDB.getUrl has been removed.

VDB.Status now has four states - LOADING, ACTIVE, FAILED, REMOVED. To check for validity use the isValid method, rather than checking for the VALID state. FAILED deployments will still be accessible via the admin getVDB methods.

The standalone and cli configuration files specify a setting for the teiid subsystem policy-decider-module. If a module is not specified, then data roles will not be checked.

local connections specifying a VDB version will wait for their VDB to finish loading before allowing a connection, see the waitForLoad connection property for more.

jsonToXml document elements will contain xsi:type attribute values of decimal and boolean respectively for number and boolean json values to allow for differentiation from string values.

Result set cache entries can now have updatable set to false to indicate that updates should not purge the entry.

Datatype default values have been corrected for Teiid built-in types. All datatypes are now nullable by default, only character string types are case sensitive, numeric types have radix 10, and length/precision/scale have been set appropriately.

pg catalog and dynamic vdb created metadata will use a generated Teiid id rather than a random UUID.

transport ssl config no longer uses the enabled attribute. Use mode=disabled to disable the usage of encryption.

TEIID-2105 If a MetadataRepository throws a RuntimeException during load, that will be treated as a non-recoverable error and the VDB will have a FAILED status.

TEIID-2105 It was an undocumented behavior that is a source did not specify a jndi connection that "java:/name" would be assumed. That is no longer the case. It the source needs a connection, then one must be specified.

TEIID-2127 if ExecutionFactory.isSourceRequired returns true (the default) then not obtaining a connection will for an Execution will result in an error. If an ExecutionFactory does not use a source, then no connection-jndi-name should be specified and isSourceRequired should return false (see setSourceRequired). If isSourceRequired returns false and a connection-jndi-name is specified, then Teiid will still attempt to obtain a connection, but no exception will be thrown if a connection isn't available.

TEIID-2138 the odbc layer will report standard_conforming_strings as on, rather than off to better reflect the string literal handling of Teiid.

#### from 7.x

TRANSLATE/HAS CRITERIA has been removed. INSTEAD OF trigger actions should be used instead. ROWS_UPDATED, INPUTS, and INPUT are no longer procedure reserved words.

7.x or earlier VDBs with table cardinalities set the old unknown value 0 will now report that value as -1 via the metadata API or SYS.TABLES.

Exact fixed point literals, e.g. 1.0, are now parsed as decimal/BigDecimal values as per the ANSI specification, rather than as double values. Also the AVG aggregate function will return an exact numeric (BigDecimal) value for integral types rather than returning a double value. Views that were projecting doubles from exact numeric literals or using AVG will need to be updated. There is also a new system property org.teiid.decimalAsDouble to enable the pre-8.0 behavior. The BigDecimal form of the AVG function now uses the same precision and scale logic as the division system function, rather than using a fixed scale of 9.

BigDecimal division that returns a quotient that is equal to zero will have a scale of zero as well. Prior releases would typically return a zero value with a scale of 16.

The env function no longer returns the value for the session id, the session_id() function should be used instead.

The CommandContext no longer provides getEnvironmentProperties()

Unaliased derived columns in the SELECT clause have different default names than prior releases. The name will be exprX where X is the SELECT clause position.

The translator API facilities for iterator/bulk updates were combined and updated. Multi-valued literals were replaced by the Parameter class with an associated value iterator available on the BatchedCommand. The IteratorValueSource class was also removed.

VARBINARY, OPTIONS, and OUT were added as reserved words.

AbstractMetadataRecord and its sub-classes use a case-insensitive map for properties rather than a LinkedHashMap. Thus, property key lookups are now case-insensitive.

Removed the unused ExecutionFactory methods supportsBetweenCriteria and supportsCaseExpression.

allowCreateTemporaryTablesByDefault and allowFunctionCallsByDefault are now set to false. When data roles are in use the user must explicitly grant these options to the user on VDB

#### from 7.7

parse/formatdate and parse/formattime are no longer pushdown functions. They are converted into parse/formattimestamp.

SQLWarning exception chains attached to the ExecutionContext will be returned as a single TeiidSQLWarning rather than as individual TeiidSQLWarnings. See the TeiidSQLWarning javadocs for how to access the underlying SQLWarning chains.

#### from 7.5

Leave was added as a reserved word.

Lob inlining is incompatible with clients older than 7.6. If a 7.6 server will have older clients that use lobs connect to it, then the BufferService property inline-lobs should be set to false in the teiid-jboss-beans.xml file.

Oracle translators assume they are using Oracle supplied drivers. If that is not the case, set the Oracle translator execution property oracleSuppliedDriver to false.

Unordered limits are handled strictly by default. They are longer pushed through conditions, dup removal, or UNION not all - and cannot have conditions pushed through them. Use the NON_STRICT hint to change the behavior to Teiid 7.1 handling.

#### from 7.4

OFFSET and LIKE_REGEX were added as reserved words.

ColumnReference.getName will always return just the element name. Previously it inconsistently returned the qualified and unqualified form depending upon where the ColumnReference appeared.

As per JDBC4, ResultSetMetadata.getColumnName will return the unaliased column name if available rather than return the alias. Set useJDBC4ColumnNameAndLabelSemantics to false to use the alias name as the column name.

#### from 7.3

SYS.PROPERTIES has a new column, ClobValue, to get values exceeding the max string length

SYS.COLUMNS has two new columns to get statistical information: DistinctCount and NullCount

ARRAY_AGG is now a reserved word

The use of an IN procedure parameter with the name "source_name" in a multi-source model, will now be treated the parameter that controls which source the procedure will execute against.

Dynamic VDB functions injected via ExecutionFactory.getPushdownFunctions are now scoped to the SYS schema and have a fully qualified name that includes their source type. For example, instead of oracle_model.relate - which was only valid against the oracle_model source, there is now the SYS.oracle_sdo.relate function that is valid for all Oracle sources. Any fully-qualified reference to these functions will need updated.

#### from 7.2

The default JDBC credentials are user/user - not admin/teiid

Unordered limits are no longer pushed through conditions, dup removal, or UNION not all. This prevents the possibility of getting less results than the logical intent of the limit.

#### from 7.1

Subqueries are no longer allowed to be SELECT INTO.

INSERT/UPDATE/DELETE cannot be used to create implicit return cursors in non-update virtual procedures. You can instead use "UPDATE ...; SELECT VARIABLES.ROWCOUNT;".

The SYSADMIN schema was created to hold procedures and tables that should not be generally accessible. SYS and pg_catalog are now always accessible - permissions do not apply to these schemas. The SYS.getBinaryVDBResource, SYS.getCharacterVDBResource, and SYS.getVDBResourcePaths have been replaced with the SYSADMIN.VDBResources table. The Matviews table and the refreshMatView/refreshMatViewRow procedures were also moved into SYSADMIN.

Overwriting an existing VDB will cause old connections to be terminated. Production systems should rely on VDB versioning.

The jdbc:metamatrix JDBC URL prefix is no longer accepted. Use jdbc:teiid instead.

Model visibility no longer restricts access to tables and procedures. Setting visible to false will only hide entries from system tables. Data roles should be used to restrict data access.

Admin API "getWorkManagerStats" methods renamed to "getWorkerPoolStats". Also, "setRuntimeProperty" and "getProcesses" methods were removed.

By default the "ENV" system function is now turned off. To enable it, edit the teiid-jboss-beans.xml configuration file.

The use of VARIABLES.ROWCOUNT is now reserved.

Exec statements of the form "var = EXEC foo()" are only valid if the procedure foo has a return parameter.

Cache hint now supports "scope" definition. For ex: /* cache(scope:user) */ select * from T1; This hint will override the computed scope based on the query.

#### from 7.0

The term data policy was replaced with data role. The AdminAPI methods for adding role mappings have changed from addRoleToDataPolicy and removeRoleFromDataPolicy to addDataRoleMapping and removeDataRoleMapping respectively.

## Configuration Issues

See the Admin Guide for more on configuration and installation.

#### from 8.11

TEIID-3594 User query command log entries are now logged at the INFO level on the org.teiid.COMMAND_LOG context. This allows command logging of just the user query events by setting the logging level to INFO. The level will default to WARN in the standard install or to DEBUG when running the auditcommand scripts.

#### from 8.9

TEIID-3192 The CXF config is no longer a valid option for the Salesforce resource adapter. Please log an issue if there is feature from the CXF config that you were using that is not present on the new resource adapter.

#### from 8.8

TEIID-3177 ODBC connections will be required to be secure based upon the SSL mode setting. If the mode is enabled, then the client must request an SSL connection. If the mode is login, then the client must use GSS authentication. To revert to the prior behavior, the system property org.teiid.ODBCRequireSecure can be set to false.

#### from 8.4

TEIID-2512 the usage of the metadata element text as the "raw schema text" may not be appropriate in all situations. The ddl and ddl-file metadata repositories will check for the ddl and ddl-file model properties respectively.

TEIID-2707 the org.teiid.joinPrefetchBatches property is no longer used.

#### from 8.3

TEIID-2429 the default for maxProcessingKb has effectively doubled (the old default would use approaximately 4MB), while the maxReserveKb default has been reduced to 70% of the memory past the first gigabyte instead of 75%.

TEIID-2445 the UseConnectorMetadata and supports-multi-source-bindings properties have been deprecated, but will still be respected if present. There is no equavalent to UserConnectorMetadata=true as it is always implied. UseConnectorMetadata=false has been replaced by cache-metadata=false, which can be placed at either the vdb or model level. supports-multi-source-bindings has been replaced by multisource, which no longer needs to be specified if more than one source is configured.

TEIID-2510 the time-slice-in-millseconds has been corrected to be time-slice-in-milliseconds

#### from 8.1

The connector batch size setting is no longer used. Instead a fetch size will be sent to the translator that is 2 times the working batch size or the non-pushed limit, whichever is less.

#### from 8.1

The file translator now defaults to exceptionIfFileNotFound=true, you can set the translator property to false to preserve the old behavior of returning null.

TEIID-2086 TEIID-2168 prepared plan and result set caches are now configured as infinispan caches. See the teiid cache container in the configuration. You may also control the transactional aspects of the result set cache on the resultset and resultset-repl caches via the configuration.

TEIID-1241 the web services connector property ConfigName was deprecated in favor of EndPointName. There were also ServiceName, NamespaceUri, and Wsdl properties added, which are used to point the translator at a specific WSDL.

#### from 8.0

teiid-security-users and teiid-security-roles properties files have been moved under the configuration directory of their respective deployment.

#### from 7.7

The server is now dependent upon AS 7.x. The old configuration and deployment structure is no longer applicable.

#### from 7.4

The configuration for the buffer service now defaults to 256/512 for processor and connector batch sizes respectively. The buffer service also has 4 new properties inline-lobs, memory-buffer-space, memory-buffer-off-heap, and max-storage-object-size. If you were explicitly setting the value for 'max-reserve-kb', you should consider lowering that value to account for the memory buffer and/or explicitly set the memory-buffer-space.

The configuration for authorization has been moved off of the RuntimeEngineDeployer bean and onto separate AuthorizationValidator and PolicyDecider beans.

The configuration for the buffer manager has been simplified to refer to memory sizes in KB, rather than batch columns.

#### from 7.3

The default value for the JDBC dynamic vdb importer setting importer.useFullSchemaName is now true, which matches the expected behavior from the documentation.

The prepared plan cache is now configured via the PreparedPlanCacheConfig bean, rather than through properties on the RuntimeEngineDeployer

SocketConfiguration.maxSocketThreads will interpret a setting of 0 to mean use the system default of max available processors. Both the ODBC and JDBC transports now default to the 0 setting.

maxReserveBatchColumns and maxProcessingBatchesColumns will interpret a setting of -1 to mean auto-calculate acceptable values given the max heap and other information. See the admin guide for more.

The default for org.teiid.useValueCache has changed to false, since typical installations will not greatly benefit from the additional lookup cost.

The property RuntimeEngineDeployer.allowFunctionCallsByDefault was added so that Teiid 7.4 behavior is compatible with Teiid 7.3. Set this property to false to require permissions for function calls when data roles are enabled.

#### from 7.2

Temporary tables can now be restricted by data roles. Use the data-role attribute allow-create-temporary-tables to explicitly enable or disable the usage of temporary tables. There is also a allowCreateTemporaryTablesByDefault property in the teiid-jboss-beans.xml to control whether usage is allowed by default. For compatibility with prior 7.x releases, the default is to allow temporary table access.

#### from 7.1

Teiid clients now allow the usage of anonymous SSL by default. This changes allows the admin port (default 31443) to use anonymous SSL by default, rather than just securing login traffic. Admin clients should therefore use the mms protocol instead of mm. This will encrypt all admin traffic and ensure that any passwords in configuration files will be encrypted in transit. See the Admin Guide to upgrade from anonymous SSL to 1-way or 2-way authentication. The config properties sslEnabled and clientEncryptionEnabled for SSLConfiguration beans have been combined to a single property mode, that can have the values disabled|login|enabled.

Apache CXF is now expected to be used as the web services stack provider through JBossWS-CXF. See the Admin Guide for instructions on installing CXF for use with Teiid's Salesforce and web service connectors. The WS Resource Adapter's -ds.xml files should no longer use WSSecurityConfigURL and WSSecurityConfigName, rather they should be ConfigFile and ConfigName respectively. The property values should no longer refer to jboss-wsse-client.xml, but instead they should reference a CXF Spring configuration file and particular port configuration. See the Admin Guide for more on using CXF configuration files.

The default for data role checking is now "true". However only VDBs with data roles will have roles enforced.

The default prepared plan cache size was increased to 512, since it is targeted by internal plans as well.

#### from 7.0

The property to enable data roles in teiid-jboss-beans.xml has changed from useEntitlements to useDataRoles.

Rar file names no longer contain version numbers. -ds.xml files should be updated from connector-XXX-version.rar to teiid-connector-XXX.rar

Code table relate configuration properties have been removed. Code tables are now implemented as materialized views.

## Other Issues

TEIID-1281 - Negative start indexing is not supported by DB2 and Derby databases. Usage of the Teiid SUBSTRING against these sources should not use negative start values.

TEIID-1008 - Most versions of Oracle and MySQL do not support deeply nested correlated references. There is currently no workaround for this issue.

For compatibility with the 7.0 release if a stored procedure parameter list begins with identifier=, then it will be parsed as a named parameter invocation even if the intent was to use a comparison predicate as the first parameter value. The workaround is to use nesting parens, e.g. call proc((identifier=value), ...), which clarifies that this is positional value. This workaround will not be needed in later releases.

TEIID-586 - Salesforce LIKE pushdown is case insensitive, while LIKE evaluated by Teiid is case sensitive unless an alternative collation is used. Care should be taken to ensure consistent results if mixed case values are being searched.

TEIID-2836 - Data from DB2 on z/OS in EBCDIC may not be represented correctly at runtime. It is recommended that the values are converted to ASCII or another common character set.

TEIID-2998 - Google spreadsheets containing all string data do not detect their row data and labels correctly on the Google backend.

TEIID-3070 - Netty threads may inappropriately take up CPU resources. This affects most EAP releases. Upgrade the AS version of Netty to 3.6.10.Final to address this issue.

TEIID-3289 - The timestamp to string conversion performed in MySQL will produce a string with all of the trailing zeros (up to 6) for the fractional seconds. This differs from the expected Teiid/Java format.

TEIID-3779 - There are a host of Phoenix issues that Teiid is currently not working around for HBase access. If you hit any of these, please let us know so that we can work with the Phoenix community to get it resolved. Generally Phoenix has issues with subquery evaluation and certain datatypes, such as char and timestamp.

TEIID-3772 TEIID-3769 TEIID-3766 are not likely to occur and generate an exception.

TEIID-3774 is unlikely but can return inaccurate results.

TEIID-3768 affects correlated subquery comparison using an aggregate of a char value and can return inaccurate results.

TEIID-3808 - The Informix driver handling of timezone information is inconsistent - even if the databaseTimezone translator property is set. Consider ensuring that the Informix server and the application server are in the same timezone.

TEIID-3805 - SAP Hana returns an empty string rather than null for the substring function when the from index is larger than the string length.

TEIID-3816 - Informix can return incorrect results for subquery comparisons involving a boolean value and a subquery that has only a single row. If you encounter such a scneario and need Teiid to compensate, then please open an issue.

#### from 7.0

Fixed xsd type handling for SQL/XML and XML document models. xsd:date, xsd:dateTime, and xsd:time types will now all be displayed using the GMT timezone (Z). SQL types, such as timestamp, used for an XMLTABLE column will now expect their values to be in the form of the corresponding xsd type.

## Thirdparty Library Updates

The following components have been updated:

#### From 8.12.3

jts2geojson support was updated to 0.7

#### From 8.11

AWS support was updated to 1.10.11

#### From 8.10

The MongoDB client was upgraded to 2.13.1

OData4J support was switched to the OReva fork version 0.8.1

#### From 8.9

JTS 1.13 was added.

#### From 8.8

Saxon was upgraded from 9.2.1.5 to 9.5.1-6

Groovy (and related components) was upgraded from 1.7.4 to 2.3.6

#### From 8.5

the engine xom and the embedded jaxen dependency were replaced with module dependencies

#### From 8.2

json-simple was removed.

#### From 7.4

Saxon was upgraded to 9.2.1.5

nux 1.6, and xom 1.2 were added.

#### From 7.1

json-simple 1.1 was added.

Netty was upgraded to 3.2.1

#### From 7.0

Direct integration of JBossCache jars was removed.

Netty was upgraded to 3.2.0

JDOM was removed.

## Detailed Release Notes

Detailed Release Notes - Teiid - Version ${project.version}

## Documentation and Help

The Teiid community project is hosted on jboss.org. Documentation and help may be obtained from the local distribution under teiid-docs or the following locations.

Online Documentation

Wiki

JIRA

Forums

## Licenses

Teiid is licensed under the LGPL. The license texts for Teiid and the thirdparty components it uses may be found in the teiid-docs/licenses directory of the distribution.

## About JBoss, a division of Red Hat

JBoss, a division of Red Hat, is in the business of providing superior technical support to our customers. Our goal is to make Professional Open Source™ the SAFE CHOICE for you. We accomplish this by backing up our open source Java products with technical support services that are delivered by the core developers themselves. We can help you to train your staff and provide you with support at every stage of the application lifecycle - from development and integration through deployment and maintenance. Visit the JBoss Services page for more information.