Using the DataSource interface is the
preferred way to connect to IMS from
your IMS Universal
JDBC driver
application.
To create and use a DataSource interface
in your IMS Universal
JDBC driver
application:
- Create an instance of the com.ibm.ims.jdbc.IMSDataSource class.
This class is the IMS Universal
JDBC driver
implementation of the DataSource interface.
- Set the following connection properties of the DataSource instance.
- DatastoreName
The name of the IMS data
store to access.
- When using type-4 connectivity, the DatastoreName property
must match either the name of the data store defined to ODBM or be
blank. The data store name is defined in the ODBM CSLDCxxx PROCLIB
member using either the DATASTORE(NAME=name) or
DATASTORE(NAME=name, ALIAS(NAME=aliasname))
parameter. If an alias is specified, you must specify the aliasname as
the value of the datastoreName property. If the DatastoreName value
is left blank (or not supplied), IMS Connect
connects to any available instance of ODBM as it is assumed that data
sharing is enabled between all datastores defined to ODBM.
- When using type-2 connectivity, set the DatastoreName property
to the IMS subsystem alias. This
is not required to be set for the Java™ Dependent
Region run time.
- DatabaseName
The location of the database metadata representing the target IMS database.
The DatabaseName property
can be specified in one of two ways, depending on whether the metadata
is stored in the IMS catalog
or as a static metadata class generated by the IMS Enterprise
Suite Explorer for Development:
- If your IMS system uses the IMS catalog, the DatabaseName property
is the name of the PSB that your application uses to access the target IMS database.
- If you are using the IMS Explorer
for Development,
the databaseName property is the fully qualified
name of the Java metadata class
generated by the IMS Explorer
for Development.
The URL must be prefixed with
class:// (for example, class://com.foo.BMP255DatabaseView).
In a J2C Connection Factory environment, the DatabaseName property
can be overridden for an individual connection without affecting the
default value specified for the resource adapter.
- MetadataURL
The location of the database metadata representing the target IMS database.
This property
is deprecated. Use DatabaseName instead.
The MetadataURL property
is the fully qualified name of the Java metadata
class generated by the IMS Enterprise
Suite Explorer for Development.
The URL must be prefixed with class:// (for example, class://com.foo.BMP255DatabaseView).
In a J2C Connection Factory environment, the MetadataURL property
can be overridden for an individual connection without affecting the
default value specified for the resource adapter.
- PortNumber
- The TCP/IP server port number to be used to communicate with IMS Connect. The port number is defined
using the DRDAPORT parameter on the ODACCESS statement in the IMS Connect configuration PROCLIB
member. The default port number is 8888. Do not set this property
when using type-2 connectivity.
- DatastoreServer
- The name or IP address of the data store server (IMS Connect). You can provide either
the host name (for example, dev123.svl.ibm.com) or the IP address
(for example, 192.166.0.2). Do not set this property when using type-2
connectivity.
- DriverType
- The type of driver connectivity to use (value must
be
IMSDataSource.DRIVER_TYPE_4 for type-4 connectivity
or IMSDataSource.DRIVER_TYPE_2 for type-2 connectivity).
- user
- The user name for the connection to IMS Connect
provided by your RACF® administrator.
Do not set this property when using type-2 connectivity.
- password
- The password for the connection to IMS Connect
provided by your RACF administrator.
Do not set this property when using type-2 connectivity.
- allMetadata
-
Optional. When this property is set to true, the DatabaseMetadata interface
returns information for all resources in the IMS catalog. When the property is set to
false, the DatabaseMetadata interface returns information for the allocated PSB.
The default value for this property is false.
IMS 14 APAR PI62871 (PTF UI40491) is
required for this property.
- initStatusGroup
- Optional. When a connection is made and the PSB is allocated, this property will indicate that
the driver should automatically issue an
INIT STATUS GROUPA or INIT STATUS
GROUPB if a value of 'A' or 'B' is provided. The default will not issue an INIT STATUS
GROUP call.
- sslConnection
- Optional. Indicates if this connection uses Secure
Sockets Layer (SSL) for data encryption. Set this property to
true
to
enable SSL, or to false
otherwise. Do not set this property
when using type-2 connectivity.
- sslKeyStoreType
- Optional. Specifies the format of the file that contains cryptographic
objects needed to establish a secure socket connection. The valid
values are
JKS
and PKCS12
. This value is only used when sslConnection is
set to true
and sslKeyStoreType is not
specified. The sslKeyStoreType parameter defaults
to JKS
.
- sslSecureSocketProtocol
- Optional. Specifies the cryptographic communication protocol for
the new connection. Specify a protocol that is supported by the server
and provides the highest level of security. The valid values are
SSL
, SSLv3
, TLSv1.1
,
and TLSv1.2
. This value is only used when sslConnection is
set to true
. If sslConnection is set to
true
and sslSecureSocketProtocol is not
specified, a default protocol will be determined at runtime by the
JRE and the server.
- sslTrustStoreLocation
- Optional. Specifies the location of the cryptographic trust store
file for the new connection. This value is only used when sslConnection is
set to true.
- sslTrustStorePassword
- Optional. Specifies the password to access the cryptographic trust
store file. This value is only used when sslConnection is
set to true.
- sslKeyStoreLocation
- Optional. Specifies the location of the cryptographic key store
file for the new connection. This value is only used when sslConnection is
set to true.
- sslKeyStorePassword
- Optional. Specifies the password to access the cryptographic key
store file. This value is only used when sslConnection is
set to true.
- loginTimeout
- Optional. Specifies the number of seconds that the
driver waits for a response from the server before timing out a connection
initialization or server request. Set this property to a non-negative
integer for the number of seconds. Set this property to 0 for an infinite
timeout length. Do not set this property when using type-2 connectivity.
- signedCompare
- Optional. When this property is set to
true
, special SSAs
are generated to support ranged queries over signed data types. If
the property is set to false
, standard binary comparisons are
performed based on the binary representation of the data type value.
Setting the value to false
can increase performance but might
result in incorrect results. The default value for this property is true
.
- flattenTables
- Optional. Indicates whether to produce a flattened view of
the database tables. A value of true exposes the sub-elements of a STRUCT or an ARRAY as additional
columns of the table. The default value is false.
- IMS Explorer flattens the copybook structures when you import the copybook. Although the
copybook itself remains unchanged in the IMS catalog, the information about the structure of each
table is altered for that particular connection.
- The the flattenTables property allows you to query the fields in complex structures directly.
For more information about support for flattening complex structures, see Support for flattening complex structures.
Restriction: The flattenTables connection
property supports static arrays and structures only. Dynamic arrays are not altered.
- t2OutputBufferSize
- Optional. The size of the output buffer in bytes for the results
from a SELECT operation for a type-2 connection.
The minimum value
for t2OutputBufferSize is 500000. If any value less than 500000 is
set, this property value will be adjusted to 500000. There is no maximum
bound. The default value is 1280000.
- treatInvalidDecimalAsNull
- Optional. Indicates whether to interpret certain Decimal values
that appear invalid in Java applications
(such as PACKEDDECIMAL and ZONEDDECIMAL with invalid sign bits) as
null. By default, this property is
false
, and a conversion
exception is thrown when the Java applications
are processing invalid values.
- Optional: Set additional connection properties
with the setProperties method of the IMSDataSource object.
- currentSchema
- Optional. Specifies the default schema name that is used to qualify
unqualified database objects in dynamically prepared SQL statements.
- dbViewLocation
- Optional. Specifies the fully qualified path to a databaseView
metadata class. You can use this property to include a metadata class
that is not located in your project path.
- dpsbOnCommit
- Optional. Set this property to true to deallocate
the PSB when a commit occurs.
Recommendation: Do not set this property to true except
in a managed environment with integrated connection pooling.
- fetchSize
- Optional. Gives the client a hint about the number of rows to
get from the database when more rows are needed. The number specified
for this property only affects data retrieved with the current connection.
If the value specified is 0, all of the applicable rows are returned.
The default value for this property
is 0 for both managed and unmanaged connections.
- llField
- Optional. Setting this property to true exposes
the LL field data as a normal column in the result set. You can modify
the LL field value to change the length of a variable length segment
instance.
- maxRows
- Optional. Specifies the maximum number of rows to return in a
query result set. The default value is 0, which returns all of the
applicable rows in the result set.
- traceFile
- Optional. Specifies the name of the trace file for the connection.
- traceFileAppend
- Optional. If the specified trace file exists, setting this property
to true specifies that the trace data for the new connection must
be appended to the existing trace file instead of overwriting it.
This
property is ignored if no value is specified for traceFile.
- traceDirectory
- Optional. Specifies the file system directory where the trace
file is located. By default, this path is the directory where the
application is executed.
This property is ignored if no value is
specified for traceFile.
- traceLevel
- Optional. Specifies which traces are enabled for the connection. The valid values for this
property are defined in the Java API documentation for the
IMSDataSource
class.
By default, all traces are disabled.
This property is ignored if no value is
specified for traceFile.
| Trace level |
traceLevel package value |
traceLevel constant field in IMSDataSource |
traceLevel demical value |
| All |
com.ibm.ims.db.opendb.* |
TRACE_ALL |
-1 |
| DL/I |
com.ibm.ims.db.opendb.dli.* |
TRACE_DLI |
28 |
| DRDA |
com.ibm.ims.db.opendb.drda.* |
TRACE_DRDA |
1 |
| JDBC |
com.ibm.ims.db.opendb.jdbc.* |
TRACE_JDBC |
32 |
| Java EE |
com.ibm.ims.opendb.spi.* com.ibm.ims.db.opendb.cci.* |
TRACE_JEE |
192 |
- Establish a connection to the data source by calling the getConnection method
on the DataSource object.
- After your application has finished with the connection,
close the connection using the close method on
the Connection interface.
The following code example shows how to create
a type-4 connection to an IMS database
from your
IMS Universal
JDBC driver
application using the
DataSource interface:
import java.sql.*;
import javax.sql.*;
import com.ibm.ims.jdbc.*;
Connection conn = null;
// Create an instance of DataSource
IMSDataSource ds = new com.ibm.ims.jdbc.IMSDataSource();
// Set the URL of the fully qualified name of the Java metadata class
ds.setDatabaseName("class://BMP255.BMP255DatabaseView");
// Set the data store name
ds.setDatastoreName("IMS1");
// Set the data store server
ds.setDatastoreServer("ecdev47.svl.ibm.com");
// Set the port number
ds.setPortNumber(5555);
// Set the JDBC connectivity driver typ
ds.setDriverType(IMSDataSource.DRIVER_TYPE_4);
// Enable SSL for connection
ds.setSSLConnection("true");
// Set timeout for connection
ds.setLoginTimeout("10");
// Set user ID for connection
ds.setUser("myUserID");
// Set password for connection
ds.setPassword("myPassword");
// Create JDBC connection
conn = ds.getConnection();
Alternatively,
you can set all of the connection properties as key value pairs in
a Properties object and then set them simultaneously with the IMSDataSource.setProperties method:
Properties props = new Properties();
props.put( "user", "MyUserID" );
props.put( "password", "MyPassword" );
IMSDataSource ds = new com.ibm.ims.jdbc.IMSDataSource();
ds.setProperties(props);
The typical usage of a DataSource object
is for your system administrator to create and manage it separately.
The program that creates and manages a DataSource object
also uses the Java Naming and
Directory Interface (JNDI) to assign a logical name to the DataSource object.
The JDBC application that uses the DataSource object
can then refer to the object by its logical name, and does not need
any information about the underlying data source. In addition, your
system administrator can modify the data source attributes, and you
do not need to change your application program.
Recommendation: For maximum portability,
use only the DataSource interface to obtain connections.
To
obtain a connection using a DataSource object, given that the system
administrator has already created the object and assigned a logical
name to it:
- From your system administrator, obtain the logical name of the
data source to which you need to connect.
- Create a Context object to use in the next
step. The Context interface is part of the Java Naming and Directory Interface
(JNDI), not JDBC.
- In your application program, use JNDI to get the DataSource object
that is associated with the logical data source name.
- Use the getConnection method on the DataSource instance
to obtain the connection.
The following code shows an example of the code that you need
in your application program to obtain a connection using a DataSource object.
In this example, the logical name of the data source that you need
to connect to is jdbc/sampledb
.
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
…
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("jdbc/sampledb");
Connection con = ds.getConnection();