IBM Toolbox for Java - JTOpen version

Copyright (C) 1997-2005 International Business Machines Corporation and
others. All rights reserved.

File: CHANGES
Last updated: October 27, 2005


The term "JTOpen" refers to the open source software product
"IBM Toolbox for Java" (formerly "AS/400 Toolbox for Java") plus any additional
enhancements provided by the open source community. JTOpen, which is governed
by the IBM Public License, as well as its Java source code, is contained in the
open source repository located off of:
http://jt400.sourceforge.net/.

The terms "Toolbox" and "Toolbox LPP" refer to the IBM Licensed Program
Product "IBM Toolbox for Java" (formerly "AS/400 Toolbox for Java") which is
supported by IBM and can be obtained from the IBM Toolbox for Java web site:
http://www.ibm.com/servers/eserver/iseries/toolbox.

Contents

Fixes and enhancements in JTOpen 5.0
Fixes and enhancements in JTOpen 4.9
Fixes and enhancements in JTOpen 4.8
Fixes and enhancements in JTOpen 4.7
Fixes and enhancements in JTOpen 4.6
Fixes and enhancements in JTOpen 4.5.1
Fixes and enhancements in JTOpen 4.5
Fixes and enhancements in JTOpen 4.4
Fixes and enhancements in JTOpen 4.3.1
Fixes and enhancements in JTOpen 4.3
Fixes and enhancements in JTOpen 4.2
Fixes and enhancements in JTOpen 4.1
Fixes and enhancements in JTOpen 4.0


Fixes and enhancements in JTOpen 5.0 (released 2006-01-16)

- Various: Eliminated potential NullPointerExceptions.
- Build: Include the AboutToolbox class in the native JAR.
- Data conversioon:  Updated mappings for certain characters.
- JDBC:  Added delimited name support. 
- JDBC:  Added 'XA loosely coupled support', 'keepAlive', 'sendBufferSize', and 'receiveBufferSize' connection properties.
- JDBC:  Eliminated possible hang in AS400JDBCConnection.cancel().
- JDBC:  Updated DatabaseMetaData.getMaxTablesInSelect() to return correct value by release.
- JDBC:  Added support for ALIAS table types.
- Job:  Eliminated possible division-by-zero error.
- RFML:  Eliminated possible division-by-zero error.

Fixes and enhancements in JTOpen 4.9 (released 2005-10-28)

- Various: J2SE 5.0 compatibility: Added append() method, required by Appendable; renamed variables named 'enum'.
- Various: Updated javadoc and code comments.
- Build: Removed Unix domain sockets from jt400.jar
- Build: Removed flawed check in build.xml for existence of 'cvs.exe'.
- Connection: Fixed JTOpen bug 1224014: PasswordExpirationDate inexact when NOMAX.
- Data conversion: Add Euro and Circled R.
- Data queue: Fixed garbage in sender information.
- FTP: Eliminated hang in get() if file member not found.
- IFS: Fixed 'File In Use' error from IFSFileReader and IFSFileWriter.
- IFS: Handle reading more that 16 megabytes of data.
- JDBC: Accept 'Character' instance as argument to PreparedStatement.setObject() when setting CHAR column.
- JDBC: Added 'char' to list returned by DatabaseMetaData.getStringFunctions().
- JDBC: Added support in AS400JDBCInputStream for mark/reset.
- JDBC: Avoid possible deadlock in AS400JDBCConnectionHandle.finalizer(). 
- JDBC: Check for null column descriptors in ResultSetMetaData.
- JDBC: Improved handling of delimited names.
- JDBC: Improved handling of return codes 438 and 443 from stored procedures.
- JDBC: Added 'ALIAS' to reported list of supported table type.
- JarMaker: Updated dependency list for 'IFS' component.
- JobList: Fixed JobList sort list field lengths.
- Message queue: Fixed divide by zero when list empty.
- Message queue: Fixed reply type in receive method.
- PCML: Corrected error message in case of insufficient input data.
- Print: Allow SpooledFile constucted with 5 attribute to behave like 8 attribute constructed if server version/release supports additional attributes.
- Print: Do not output SVF or SHF at start of each page unless application specifically sets by using method setHorizontalFormat() and setVerticalFormat().
- Print: Fixes to ISeriesPrinter and SpooledFileOpenList.
- QSYSObjectPathName: Selectively uppercase characters when composing *NAME values.
- RFML: Eliminated inaccurate precalculation of required byte array length.
- RLA: Improved description text in NumberFormatExceptions from AS400PackedDecimal and AS400ZonedDecimal.
- Trace: Added support for Java logging (JSR 47).
- User space: Added trace for file server QTEMP.

Fixes and enhancements in JTOpen 4.8 (released 2005-06-20)

- Various: Call setThreadSafe() only if threadsafe property not set.
- Various: Javadoc fixes and enhancements.
- Various: Native method updates.
- Data conversion: Additional bidi transform options.
- IFS: Tolerate quotes within filenames.
- JDBC: Added support for 2 MB SQL Statements, 128 byte column names, database host server trace, and added the query optimize goal property.
- JDBC: Allow TMRESUME on a start() request if the server supports it.
- JDBC: Allow a Timestamp to be retrieved from a TIME field.
- JDBC: Allow extended column descriptors to be returned for a stored procedure result set.
- JDBC: Allow retrieval of Aliases on a call to DatabaseMetaData.getTables().
- JDBC: Catch ExtendedIllegalArgumentException from AS400PackedDecimal.toBytes() or AS400ZonedDecimal.toBytes(); convert to an SQLException.
- JDBC: Catch StringIndexOutOfBoundsException when constructing a BigDecimal with a String.
- JDBC: Changed the Internal Driver Error to a Data Type Mismatch error in convertToRawBytes().
- JDBC: Fixed JTOpen Bug 1150395. Page backwards using relative() through a result set.
- JDBC: Fixed JTOpen Bug 1155804. Improved collection pool cleanup logic.
- JDBC: Pass the result set type to JDServerRowCache.
- JDBC: Removed the literal space from the strip function.
- JDBC: Reset data lengths and offsets based on the server format, if VLC compression was not used on a subsequent fetch.
- JDBC: Retrieve the most recently used connection from the pool.
- JDBC: Return VARCHAR for the Type Name and 12 for the type for a Long Varchar.
- JDBC: Send a zero length package name when we ask for a normal prepare.
- JDBC: Send empty Package name code point when doing a normal prepare and extended dynamic support is requested.
- JDBC: Turn auto-commit back on and set the commitment control parser option when an XA transaction is ended.
- Job: Added JOB_LOG_OUTPUT property.
- JobList: Joblist.load() hangs with certain selection criteria.
- Message queue: Fixed overflow in calculating receiver variable size.
- Print: Added print attribute ATTR_PUBINF.
- QSYS object types: Added new and missing object types.
- RLA: Added Record.getFieldAsBytes() methods.
- Resource: Deprecated package com.ibm.as400.resource
- System status: Added getters for 4 additional properties.
- System status: Added method getProcessorSharingAttribute().
- System value: Corrected data type for QTHDRSCAFN.
- Utilities: Deprecated class utilities.AS400ToolboxInstaller
- Vaccess: Deprecated package com.ibm.as400.vaccess

Fixes and enhancements in JTOpen 4.7 (released 2005-02-25)

- Various: Deleted unnecessary static "Copyright" string.
- Various: Javadoc updates, including those reported by Jack Woehr.
- Connection: Added SecureAS400 constructor that takes a profile token.
- Connection: Added pluggable signon handler (SignonHandler).
- Connection: Attempt to detect and warn if multiple Toolbox versions on path.
- IFS: Deprecated confusing IFSRandomAccessFile constructor, added a better one.
- JDBC: Added a connect method.
- JDBC: Added support for variable length field compression.
- JDBC: Check for null SocketProperties before setting it on the AS400 object.
- JDBC: Do not resend isolation level if it is same as current value.
- JDBC: Fixed JTOpen Bug 4034. Use job CCSID if column label CCSID is 65535.
- JDBC: Fixed JTOpen Bug 4121.  See if command contains "SELECT" after uppercasing.
- JDBC: Fixed JTOpen Bug 4148. Always close PreparedStatement used to update row.
- JDBC: Make sure serverCommitMode_ always maps to the JDBC isolation level.
- JDBC: Output DISTINCT for TYPE_NAME of distinct column in DatabaseMetaData.getColumns().
- JDBC: Return column name from data format when there is no column label.
- JDBC: Send new isolation level for XA transactions.
- JDBC: Throw SQLException when convert to raw bytes, except in some cases.
- JavaApplicationCall: Added getCommandCall().
- Job: Fixed JTOpen bug 1143395. Update max library list size.
- Job: Throw exception when read-only value is specified on setValue().
- Message queue: Retrieve user's message queue instead of assuming default path.
- ObjectDescription: Added new method getValueAsString().
- Permission: Preserve leading/trailing blanks in filename.
- Print: Add ATTR_AUTOEND to attribute list.
- Print: Added getInputStream() that takes a PrintParameterList as a parameter.
- Print: Clarified that certain attributes are only available when a Writer is active to the Printer.
- Print: Method getAttributeName(): Add AT_READ_BUFFERS_SEQ.
- RFML: Fixed ArrayIndexOutOfBoundsException in RecordFormatDocument.toByteArray().
- RFML: Improved error message when RFML doc is missing header.
- RFML: Relocated excess-input check in setValues().
- RLA: Enable authentication to DDM server with a profile token.
- Security: CPF3C3C message from ProfileTokenCredential.
- Subsystem: Added Subsystem class.

Fixes and enhancements in JTOpen 4.6 (released 2004-10-25)

- Various: Updated OS/400 and AS/400 references in comments, text.
- Various: Minor documentation updates.
- Various: Removed private getCopyright() method.
- Build: Updated readme to refer to build.xml.
- Build: Updated JDK level check in build.xml.
- Connection: Fixed localhost IllegalStateException. (AS400)
- CallStackEntry: Added new class CallStackEntry.
- Data conversion: Fix mixed byte buffering problem. (ConvTableReader)
- FTP: Use separate thread to monitor ServerSocket when in "active" mode.
- IFS: Throw IOException instead of ClosedChannelException. (IFSFileInputStream)
- IFS: Changed name of directory created by IFSFileSystemView.createNewFolder().
- JDBC: Added check for locators when batching.
- JDBC: Set the socket properties on AS400 object before getting a connection.
- JDBC: Minor performance improvement. (JDProperties)
- JDBC: Added "rollback cursor hold" property to hold a cursor over a rollback.
- PCML: Eliminated performance bottleneck in PcmlDocument.
- Permission: Fixed filename character conversion bug.
- Print: Fixed JTOpen bugs 3686 and 3694.  NullPointerException when holding spooled file that is completed.
- Print: Added spooled file attributes ATTR_JOBCCSID, ATTR_JOBCCSID.
- Print: Spooled file save/restore.
- RLA: Synchronized incrementation of DCLNAME. (AS400FileImplRemote)
- User: Added setters to User class.
- User: Added V5R3 "local password management" property.
- User: Added ability to filter by name in UserList.

Fixes and enhancements in JTOpen 4.5.1 (not announced publicly)

- Various: Updated OS/400 and AS/400 references in comments, text.
- Various: Added serialVersionUID where missing.
- Connection: Added ability to specify NLV on AS400.setLocale().
- Connection: Clarified javadoc for AS400.setLocale() method.
- Connection: Specified units for get/set methods of SocketProperties class.
- IFS: Added new classes IFSFileReader and IFSFileWriter.
- IFS: Upgraded IFSFileSystemView class to work with newer JDK's.
- IFS: Corrected behavior of IFSJavaFile.isAbsolute().
- JDBC: Fixed JTOpen Bug 4025.  Accommodate *LIBL not included in list_ array.
- JDBC: Fixed JTOpen Bug 4013.  Don't ignore "thread used" connection property.
- JDBC: Clarified javadoc: "cursor hold" only applies to commits, not rollbacks.
- JDBC: Added more toolbox trace support to data source interface.
- JDBC: Fixed proxy tracing.
- PCML: Added method ProgramCallDocument.serialize(OutputStream).
- Print: Added PrintObject attributes ATTR_DATE_END and ATTR_TIME_END.
- Save file: Added new component to represent "save files".
- Security: Removed unnecessary serializability from AS400Certificate* classes.
- System values: Added new system values.

Fixes and enhancements in JTOpen 4.5 (released 2004-08-06)

- Data conversion: Tolerate multiple versions of Toolbox in classpath (ConvTable1200).
- FTP: Added support for active mode.
- IFS: Improved error messages in IFSFileImplRemote.
- IFS: Added method IFSFile.setCCSID().
- IFS: Fixed behavior of IFSFile.getFreeSpace().
- JDBC: Added new LOB locator support.
- JDBC: Added option to not fully close statement until transaction boundary.
- Job: Added method Job.loadInformation(attributes).
- Object description: Don't automatically uppercase library & object names.

Fixes and enhancements in JTOpen 4.4 (released 2004-06-30)

- CommandHelpRetriever: Use relative column widths on syntax summary table.
- Connection: Decoupled JDBC and DDM from AS400 object, to improve effectiveness of AS400ToolboxJarMaker.
- Connection pools: Added getSystemNames(), getUsers(system), and getConnectedUsers(system).
- Connection pools: Fixed JTOpen Bug 3384.  (AS400ConnectionPool unnecessarily creates objects)
- Connection pools: Fixed JTOpen Bug 3863.  (NullPointerException when connection returned to pool)
- Data conversion: Fixed tables for CCSIDs 424, 862, 1200.
- Data conversion: Added ability to return Double objects instead of BigDecimal objects on toObject() calls.
- Data conversion: Allow BidiStringType.None as valid value.
- Data queue: Fixed proxy delete() method.
- Documentation: Various javadoc fixes, additions, and enhancements.
- IFS: Fixed JTOpen Bug 3722. (ClassCastException in IFSFileDescriptorImplRemote)
- IFS: Added IFSFile methods setPatternMatching(), getPatternMatching().
- JDBC: Miscellaneous minor enhancements.
- JDBC: Fixed JTOpen Bug 3605.  (Cleanup after failed creation of prepared stmt)
- JDBC: Fixed JTOpen Bug 3655.  (AS400JDBCConnectionPool.fill())
- JDBC: Fixed JTOpen Bug 3801.  (Check for null values from DatabaseMetaData.getTables())
- JDBC: Fixed JTOpen Bug 3818.  (Normalize DATE milliseconds)
- JDBC: Additional tracing activation method.
- JDBC: Performance improvement in SQL statement parsing.
- JDBC: Return "" for base table name if no column descriptors are returned.
- List: Check the 'list status indicator' returned by QGY* API's.
- Message queue: Fixed RMessageQueue string buffer problem.
- NetServer: Added getters to ISeriesNetServer for pending attribute values.
- PCML: Added ProgramCallDocument.getProgramCall().
- RLA: Performance improvements.
- RFML: Fixed JTOpen Bug 3953.  (Deserializing RecordFormatDocument)
- System values: Improved handling of invalid QDATE values.

Fixes and enhancements in JTOpen 4.3.1 (released 2004-04-27)

- Build: Removed unnecessary -R option on checkout commands in build.xml.
- Connection: Added ability to pass GSS Credential to system object.
- FTP: Update lastMessage value more consistently.
- JDBC: Fixed bug that caused reduced performance and memory leakage.
- PCML: Removed unnecessary Xalan runtime dependency in PcmlSAXParser.

Fixes and enhancements in JTOpen 4.3 (released 2004-04-02)

- Build: Added BidiConversionProperties to proxy jar.
- Build: Added SystemProperties.class to jt400Servlet.jar.
- CommandHelpRetriever: Added generateHTMLBytes() method.
- CommandHelpRetriever: Set charset to UTF-8 instead of ISO-8859-1.
- CommandHelpRetriever: Javadoc for generateHTML() now indicates the charset is UTF-8.
- Data conversion: Added constant BidiStringType.NONE.
- Data conversion: Fixed possible thread-safety issue with Bidi conversion.
- Data conversion: Various fixes and enhancements related to bidi conversion.
- Data conversion: Added class BidiConversionProperties.
- Documentation: Various javadoc fixes, additions, and enhancements.
- IFS: Fixed bug in IFSFile.mkdirs().
- JDBC: DatabaseMetaData.getColumns(): Allow CHAR()/VARCHAR() FOR BIT DATA to be displayed instead of CHAR/VARCHAR.
- JDBC: Added check for server functional level before setting Ctl timeout and lock wait.
- JDBC: Added method AS400JDBCDriver.connect(AS400 system, boolean clone).
- JDBC: Catch exceptions in the finalize() methods in AS400JDBCStatement and AS400JDBCResultSet.
- JDBC: Allow binary string constants in the form of x'1234' and X'1234'.
- JDBC: Treat the first character in an odd-length String or char[] as the lower nibble of a byte instead of the last character.
- JDBC: Avoid optimization problem with JDK 1.3 BigDecimal.compareTo() method.
- JDBC: AS400JDBCResultSet.updateRow() now uses the base column name instead of the column label.
- JDBC: Changed SQLDBClobLocator.writeToServer() to use number of characters instead of number of bytes for the start offset.
- JDBC: Changed autoCommit to trueAutoCommit to align with connection string property "true auto commit".
- JDBC: JDBCProperties: Changed "bidirectional string type" to "bidi string type".
- JDBC: SQLResultSetTableModel: Removed beforeFirst() call since stored procedures might not return a scrollable cursor if one is requested.
- JDBC: AS400JDBCResultSet now returns null if a data mapping error occurs.
- JDBC: SQLResultSetTableModel will now output "++++++++++++++" when a data mapping error occurs.
- JDBC: Use BidiConversionProperties class instead on only bidi string type.
- JDBC: Added two connection properties "bidi implicit reordering" and "bidi numeric ordering".
- Job: Return -1 on getQueuePriority() if job's status is *OUTQ.
- JobList: Trace a warning message if there are open enumerations returned by a JobList and the JobList is being closed.
- JobList: Invalidate all JobEnumerations created from a JobList which has been closed.
- Object description: Tolerate additional error message in exists().
- Print: Formdef is now handled on the server.
- Print: Maintain lowercase for certain attributes.
- Print: Retrieve AT_SYS_DRV_PGM attribute.  Added ATTR_CHR_RTT_CMDS attribute.
- RFML: Rethrow IOException as SAXException on call to DefaultHandler.resolveEntity(), for compatibility with the IBM JDK.
- RLA: Handle *NONE key field names in logical files.
- SpooledFile: Retrieve ATTR_CHR_RTT_CMDS attribute.
- SpooledFile: Don't retrieve ATTR_DATE_END or ATTR_TIME_END.
- UserSpace: *SYSTEM domain was being sent to the server as *SYSTFM on a create().

Fixes and enhancements in JTOpen 4.2 (released 2003-12-23)

- Build: Created task to insert copyright strings into JTOpen-built class files.
- Build: Added copyright strings to binary class files in CVS.
- Build: Added an IdentityToken stub since we currently cannot ship EIM with JTOpen.
- Connection: Support EIM "identity tokens" for authentication.
- Connection: Added serialVersionUID to SocketProperties.
- Connection: Added AS400.setDDMRDB() method to set the IASP/RDB to use for record-level access (RLA).
- Connection: Added AS400.getSocketProperties().
- Connection pools: Fixed bug #3727 - Don't synchronize the entire pool in order to get one connection out.
- Connection pools: Added socket properties.
- Connection pools: Allow null password.
- Connection pools: Set thread name on maintenance thread.
- Connection pools: Don't start maintenance thread if threadUsed is false.
- Data conversion: Added another variant of CharConverter.byteArrayToString() and stringToByteArray().
- Data conversion: Enhanced bidi algorithms.
- Data conversion: Directly support CCSID 1208 (UTF-8).
- Data queue: Updates to allow user to write to a data queue without having read authority.
- HTML: Properly allow multiple options to be selected in a SelectFormElement.
- IFS: Fixed list attribute calls on files larger than 2GB.
- IFS: Changed VRM check.
- JDBC: Added a JDBC trace category; log to the Toolbox trace, log stream, and log writer separately.
- JDBC: Changed major driver version to 6.0.
- JDBC: Allow read-only sensitive cursors.
- JDBC: Changed exception text for data type mismatches on date, time, and timestamp types.
- JDBC: Support scrollable stored procedure result sets when the server does.
- JDBC: Get the long table names when calling getExportedKeys().
- JDBC: Support new auto-commit and commit levels provided by server.
- JDBC: Updated cursor sensitivity handling; use asensitive cursors as default for ResultSet.TYPE_SCROLL_SENSITIVE.
- JDBC: Added NTS support.
- JDBC: Use underlying column name when updating a row that has a column with an alias.
- JDBC: Minor performance improvements in statement batching.
- Job: Do not allow ELAPSED statistics constants to be retrievable attributes on JobList.
- NetServer: Deprecated NetServer* classes; replaced with new ISeriesNetServer* classes.
- NetServer: Added KERBEROS_OR_PASSWORDS authentication method constant.
- Open list: Added IPP attribute, job system name filter, and date filter to SpooledFileOpenList.
- Open list: Change STATUS_PRINTING constant for SpooledFileOpenList to match what the API expects (*PRINTER).
- Open list: Fixed null job system name on items in SpooledFileOpenList.
- Open list: Status filter on SpooledFileOpenList should have been a String array.
- PCML: Updated class loading scheme so PCML files can be found under Websphere and Eclipse.
- Permission: Updated the way object names and CL command strings are treated to handle NLS issues.
- Permission: Changed thread-safe settings on underlying CL commands so that they will work natively.
- Permission: Added setPrimaryGroup().
- Permission: Support Unicode object path names when the server does.
- Print: Added PrintObject.getSingleAttribute() methods.
- Product: Fixed user space error when calling getPTFs() natively.
- Program call: Fixed no program object with no message option.
- Proxy: Fixed ArrayIndexOutOfBoundsException in ProgramCall.
- PTF: Return message help of "None" for a status of NOT_LOADED.
- PTF: Fixed isPreReq() and isCoReq().
- Resource: Deprecated this package in favor of function in the access package.
- RLA: Updated record format field names to match output from DSPFFD.
- User: Added exists().
- User space: Updated to create with optimum alignment.
- Utilities: Added comment that specifies column widths for CommandHelpRetriever.
- Vaccess: Fix for checkboxes in AS400JDBCDataSourcePaneGUI under JDK 1.4.

Fixes and enhancements in JTOpen 4.1 (released 2003-08-13)

- Build: Include build directory in src.zip.
- Build: Added xpcml.xsd to jt400.jar and jt400Native.jar
- Build: Added com.ibm.as400.access.list package.
- Build: Use old StringBuffer.append() method in RJobLog and HTMLDocument for compatibility with JDK 1.3.
- Comm trace: Added reverse.
- Connection: Open sourced AS400ImplRemote.
- Connection: Support extra GSS/Kerberos option of authentication for portlet environment.
- Connection: Catch socket properties exceptions when tracing is active.
- Connection pools: Moved inner classes to their own external definitions, to avoid possible JIT errors.
- Connection pools: Check for null in AS400JDBCConnectionPool.setDataSource().
- Connection pools: Ensure AS400 object is connected when it is retrieved from the pool.
- Data areas: Cleaned up implementation of subclass delete() methods.
- Data conversion: Added NLV mapping for zh_CN.
- Data conversion: Added getInstanceType() methods to AS400DataType classes for performance.
- Data conversion: Added CCSID 17584 (subset of 1200).
- Data conversion: Removed _en and _en_US resource bundles, they were a performance hit and are not needed.
- Data conversion: Added localeToNLV() methods on NLS class.
- Data conversion: Fixed AS400Text.toBytes() for CCSIDs 13488 and 61952.
- Data conversion: Made BinaryConverter.bytesToString() and stringToBytes() public.
- Directory entries: Default to USER_PROFILE, "*" when no selection IDs are added.
- Environment variables: Fixed problems with service program call.
- FTP: Use APPE instead of APPEND to work with non-OS/400 FTP servers.
- HTML: Throw exception if listener is null on form and table converters.
- IFS: Added copyTo() functionality.
- IFS: Added isSymbolicLink().
- Javadoc: Added doc-files subdirectories and updated references in all source parts.
- Javadoc: Added CCSID list and component list documentation, linked to from utilities.AS400ToolboxJarMaker.
- Javadoc: Minor updates to micro JDBC driver.
- Javadoc: Added example to JobList.addJobSelectionCriteria().
- Javadoc: Minor fixes to FTP classes.
- JDBC: Minor description string updates to AS400JDBCDataSourcePaneGUI.
- JDBC: Post data truncation warning when the database has a mapping error.
- JDBC: Perform case insensitive search for parameter indices to match the JDBC spec.
- JDBC: Pad with correct space character in CLOBs.
- JDBC: Fixed string index in CLOBs when locators are used.
- JDBC: Added loginTimeout and serverTraceCategories properties to data source.
- JDBC: Fixed translateHex property in data source.
- JDBC: Added materialized query table support.
- JDBC: Added static cursor support.
- JDBC: Throw data type mismatch when length on setBinaryStream() is greater than the stream length, except on locators.
- JDBC: Throw data truncation when length on setBinaryStream() is greater than the column size.
- JDBC: ResultSetMetaData.getTableName() now calls getBaseTableName().
- JDBC: Changed how cursor sensitivity is used.
- JDBC: Changed how output parameters are registered and retrieved.
- JDBC: Fixed proxy support for BLOBs and CLOBs.
- JDBC: Alias VARBIN and BINARY VARYING to VARBINARY.
- JDBC: Changed radix from decimal (10) to binary (2) on double, float, and real columns.
- JDBC: Support setting a URL for char and graphic columns.
- JDBC: Changed setBytes() to expect byte[].class instead of Byte.class.
- JDBC: Added proxy support for ParameterMetaData.
- JDBC: Set table name from first SELECT FROM TABLE only, in the case of a subquery.
- JDBC: Changes to how the default schema is added to the library list.
- Jobs: Return empty array when JobList length is 0.
- Messages: Added option to get the user who sent the message as well as the initial user of the job. 
- Messages: Fixed MessageFile.replaceText() to use the correct indices.
- Messages: Support more than 10 messages returned from a remote command or API call.
- NetServer: Added new ISeriesNetServer classes to replace the ones that relied on PCML/Resource framework.
- Object: Only call API on-thread if Toolbox property is set.
- Object: Added ObjectDescription.exists().
- Open list: Added new package com.ibm.as400.access.list.
- Open list: Added SpooledFileOpenList classes to use in place of regular SpooledFile classes for performance.
- PCML: Added support to PCML for XPCML, using XML schemas.
- PCML: Updated xsl and xsd definitions.
- PCML: Removed dependency on XML parser when using serialized PCML.
- PCML: Handle extendable elements in XPCML.
- PCML: Handle non-qualified transform file name.
- PCML: Support PCML/XPCML documents via an InputStream.
- Print: Added ISeriesPrinter class to use remote command server instead of network print server for performance.
- Print: Added more print attributes to print classes such as AFPResource and SpooledFile.
- PTF: Added getRelationship(), fixed pre-req and co-req methods.
- User: Added more constants.
- Utilities: Added AboutToolbox class to utilities package, to determine which version of jt400.jar is used.
- Utilities: Handle old and new tags in gencmddoc.

Fixes and enhancements in JTOpen 4.0 (released 2003-04-30)

- Build: Compile with JDK 1.4 to eliminate dependencies, target JDK 1.1.
- Build: Updated manifest files with new JTOpen version number.
- Build: Removed PDML task; separated native optimization classes.
- Build: Added class files to repository to avoid SSLight as a build requirement.
- Build: Require JDK 1.4.1 to avoid javadoc and ToolboxME errors.
- Build: Changed SQLData classes to use a getter instead of overridden static to avoid Jikes issues.
- Build: Various javadoc fixes to pacify JDK 1.4.1 javadoc tool.
- Build: Removed calls to StringBuffer.append(StringBuffer) to avoid Sun compatibility issue across JDK levels.
- Command: Add product library to library list before refreshing panel group information.
- Command: Separated getXMLXXX() methods so as not to rely on system command information.
- Command call: Deprecated getJob() in favor of getServerJob().
- Connection pools: Changed ConnectionListEvent.getSource() to always return an AS400 object.
- Connection pools: Added synchronization; throw exception if PooledConnection is in use.
- Data conversion: CCSID 1200 is now UTF-16; CCSID 1202 is now little endian UCS-2.
- Data conversion: Fixed ArrayIndexOutOfBoundsException in ConvTableReader.
- Data conversion: Bidi strings are now padded before conversion algorithm is applied, instead of after.
- Data conversion: Changed packed and zoned decimals to have 63-digit maximum instead of 31.
- Directory entry: Fixed getMailServiceLevel().
- HTML: Support XSL-FO tags.
- HTML: Added FileListElement.list(HTMLTableConverter) method.
- Javadoc: Removed reference to AS400snameFormatter from CharConverter class.
- Javadoc: Fixed PTF.getIPLRequired().
- Javadoc: Fixed AS400ToolboxJarMaker link to Job class.
- Javadoc: Updated SpooledFile.
- Javadoc: Added javadoc regarding QTEMP.LIB to IFSFile.
- Javadoc: Corrected javadoc for DirectoryEntry.getCountry().
- Javadoc: Generate javadoc for com.ibm.as400.util.commtrace package.
- Javadoc: Handle com.ibm.as400.security.auth package.
- Javadoc: Fixed example in DirectoryEntryList.
- JDBC: Update counts now return SUCCESS_NO_INFO on a blocked insert.
- JDBC: Support ROWID column type.
- JDBC: Performance improvement to SQLData types - use integer type instead of instanceof.
- JDBC: Adjusted minimum divide scale property.
- JDBC: Binary types now support Strings of hexadecimal characters.
- JDBC: Workaround for JIT bug in JDk 1.3 while parsing SQL statements.
- JDBC: Changed to report correct maximum precision for various data types according to SQL Reference.
- JDBC: Changed Blob and Clob datastreams to use new host server truncation codepoint for writing.
- JDBC: Changed behavior of mixed case column names to ignore case unless surrounded by quotes.
- JDBC: Fixed NullPointerException in ResultSet.getBytes().
- JDBC: Changed DatabaseMetaData.supportsResultSetType() to return TYPE_SCROLL_INSENSITIVE.
- JDBC: Fixed data truncation bugs and warnings.
- JDBC: Removed limitation of 32K statements in batch.
- JDBC: Added AS400JDBCConnectionHandle.getServerJobIdentifier().
- JDBC: Trace LOB locator handles.
- JDBC: Support retrieving base table name for each column.
- JDBC: Allow length on setXXX(InputStream) methods to differ from actual amount of data in InputStream.
- JDBC: Added QAQQINI library name property.
- JDBC: Handle statements with missing closing parenthetical mark.
- JDBC: Additional tracing for server attributes.
- JDBC: Do extra validation of decimal position and scale properties.
- JDBC: Support 63-digit decimal precision; use UTF-16 for default client encoding.
- JDBC: Fixed typecast and max/min value bugs in SQLBigint.
- JDBC: Support unencoded passwords in a data source Reference object.
- JDBC: PreparedStatement now remains useable after a batch execute.
- JDBC: Trace property no longer turns off Toolbox trace when set to its default.
- JDBC: Handle scientific notation numbers that have no decimal point.
- JDBC: Properly calculate stream length for Unicode Readers.
- JDBC: Trace object ID in SQLExceptions.
- JDBC: Fixes for erroneous commas in SQL statements.
- JDBC: Many fixes for LOB support.
- JDBC: Work around Brazil time zone issue.
- JDBC: Issue warning when 1000 open statements are reached per connection.
- JDBC: AS400JDBCDataSource can now be constructed with an AS400 object.
- JDBC: Ensure LOB classes do not break JDBC 1.0 clients.
- JDBC: Literal prefix for binary strings changed to "X'" instead of "'".
- JDBC: Fixed DatabaseMetaData.supportsTransactionIsolationLevel().
- JDBC: Use 819 (ISO) instead of 13488 (UCS-2) in toAsciiStream().
- JDBC: LOB locators now write to the server when necessary.
- JDBC: Correctly handle LOB locators when executing batch statements.
- JDBC: Added "toolbox trace" property.
- JDBC: Fixed issues with running to a Toolbox ProxyServer.
- JDBC: Added properties for package CCSID, min divide scale, max precision, and max scale.
- JDBC: Avoid rounding errors when parsing big integers.
- JDBC: Issue data truncation warning on a read.
- Job log: Added writeMessage(boolean onThread).
- Messages: Updated tracing; avoid NullPointerException in AS400Message.getPath().
- Panel group: Changed help identifier constructor to not throw an exception if library/object name is blank.
- Panel group: Mark QUHRHLPT API as threadsafe.
- PCML: (Bug #3538) Use context class loader to avoid issues in Websphere.
- PCML: Serializing a PCML file now uses a BufferedOutputStream.
- Print: Extra message information added.
- Program call: Deprecated getJob() in favor of getServerJob().
- QSYS object types: Support TIMZON and PDFMAP.
- Security: Refreshed codebase from Toolbox LPP; open sourced.
- Security: Changes to authentication token generation.
- Servlet: Support XSL-FO tags.
- System values: Support QTHDRSCAFN and QTHDRSCADJ.
- User: Updated javadoc and synchronization in UserList.
- User space: Added constants; allow *USER.
- Utilities: Support specifying alternate panel group to retrieve help text in CommandHelpRetriever.
- Utilities: CommandHelpRetriever now generates UIM template source.
- Utilities: Changed space character generation in CommandHelpRetriever.
- Utilities: Gracefully handle CPF6250 messages in CommandHelpRetriever.
- Utilities: Fixed unnecessary dependencies on the JDBC classes by the AS400 object in JarMaker.
- Utilities: Made CommandHelpRetriever's output directory non-static.