Table of Contents
- Configuring ActiveMatrix BusinessWorks to Use a DataSource
- Custom DataSource for Unsupported Drivers
- Assumptions and Avoiding Common Errors
- Encountered Issues?
For most applications that need to use JDBC, the default behavior of TIBCO ActiveMatrix BusinessWorks? when creating JDBC connections is to use the DriverManager class to create a connection object. The process involves calling a synchronized method named "getConnection", which could cause performance issues in some cases if the call gets blocked. To avoid such a risk, applications can use the DataSource interface. The DataSource interface was introduced in the JDBC 2.0 Optional Package which is now available as part of the J2SE 1.4.0 FCS.
A JDBC driver that implements the DataSource interface returns connections that implement the Connection interface in much the same way as Connection objects are returned by the DriverManager class. Using the DataSource interface also improves application portability by allowing a logical name for a data source while removing the need to tie down information to a particular driver thereby avoiding the synchronization currently present in the DriverManager class.
Configuring ActiveMatrix BusinessWorks to Use a DataSource
ActiveMatrix BusinessWorks JDBC Shared Connection allows you to configure a DataSource, but it requires a JNDI Server to maintain the DataSources. In cases where is not available and the application needs to use DataSource to get JDBC Connections, ActiveMatrix BusinessWorks provides a property that allows you to switch to DataSource.
By setting the property "bw.plugin.jdbc.connection.useDatasource=true" in the deployed ActiveMatrix BusinessWorks Engine?s .tra file, ActiveMatrix BusinessWorks will attempt to use DataSource to get JDBC Connection. If it fails, an error message will be logged. This should work with all ActiveMatrix BusinessWorks-supported JDBC Drivers.
Custom DataSource for Unsupported Drivers
For unsupported drivers, the user needs to provide the DataSource class name. The property that sets the driver class name is "bw.plugin.jdbc.customDSClass" and is used as follows:
bw.plugin.jdbc.customDSClass.{driver class name}={DataSource Class name}
For example,
bw.plugin.jdbc.customDSClass.com.ibm.as400.access.AS400JDBCDriver = com.ibm.as400.access.AS400JDBCDataSource.
Assumptions and Avoiding Common Errors
An important assumption the user must consider is that all properties specified by the connection URL (name-value pairs) are string-based (i.e. boolean and numeric properties will not work). When using a custom driver/DataSource, ActiveMatrix BusinessWorks typically employs Reflection to call the appropriate APIs to load the DataSource and point it at the URL provided in the JDBC Connection.
Internally the code tries to set the connection URL by calling a 'setURL' API on the loaded DataSource.If this fails, it will break the connection URL and instead call APIs which are specific to the drivers. This behavior is expected by all drivers/DataSources. In the following example, the connection URL is calling the API 'setdatabaseName' with model as its value.
jdbc:microsoft:sqlserver://server:1433;databaseName=model
The API is proven to be wrong, resulting in a 'NoSuchMethodException' because the method name specified in the URL is wrong. The correct method to call is 'setDatabaseName'.
If you change the URL from
jdbc:microsoft:sqlserver://server:1433;databaseName=model
to
jdbc:microsoft:sqlserver:// server:1433;DatabaseName=model
it should work correctly.
To work around the limitation of using only string-based properties, one can write a wapper for the original DataSource. This way, any DataSource can be customized for use in ActiveMatrix BusinessWorks?.
Example:
Microsoft sqlserver driver has a boolean property named 'SendStringParametersAsUnicode'. If you need to set this property with DataSource implementation, it would fail with the error below since only string-based properties are supported in ActiveMatrix BusinessWorks?.
java.lang.NoSuchMethodException: com.microsoft.jdbcx.sqlserver.SQLServerDataSource.setSendStringParametersAsUnicode(java.lang.String)
To work around this error, you must treat the DataSource as a custom DataSource by setting the following:
bw.plugin.jdbc.connection.useDatasource=true bw.plugin.jdbc.customDSClass.com.microsoft.jdbc.sqlserver.SQLServerDriver=com.tibco.example.wrapper.SQLServerDSWrapper
A wrapper class that extends the actual DataSource can be written as the one shown here. Create a jar file of this class and place it under /tibco/tpcl/5.x/jdbc.
Encountered Issues?
Contact support@tibco.com with the following information:
- ActiveMatrix BusinessWorks Project repository
- The deployed engine's .tra fie
- The database and driver versions
- If required, the DB scripts to create the necessary tables
Recommended Comments
There are no comments to display.
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now