Product: IBM CallPath Enterprise Toolkit for Java Technology Edition Version: 6.3.0 Level: J2032 Platform: Windows Date: 20 June 2001 Service File: jtkwnt.exe History: jtkwnt.hst Size: 1428846 (1.4Mb) Installation Instructions: -------------------------- Download the self-extracting file, jtkwnt.exe, into a temporary directory. Execute it from the command line and follow the prompts. This will start an InstallShield Wizard to guide you through the installation process. Fixes contained in this Service Package: ---------------------------------------- Name: APAR IC29823 Date: 09 Mar 2001 Library: 9190 Problem: The JTAPI Daemon will fail to keep up with the telephony activity when using 20+ CPLineResources in an application. The slow down is due to the duplicate provider connections created by calling the .start() method on each CPLineResource. This created redundant connections into the JTAPI daemon and therefore the same event was sent to the application for each CPLineResource started in this manner. Workaround: The application must be recoded to chain the .start() method calls with the .start(event) call as outlined in the CallPath Enterprise Java Programmers Guide and Reference. Solution: To avoid the creation of duplicate provider connections to the JTAPI Daemon, the JtapiPeer class was updated to store all active connections. Therefore, the getProvider calls for the same user will only create a single connection to the JTAPI Daemon instead of a new one for each call. This change will eliminate the need to change applications and greatly improve the performance by avoiding creation of the duplicate event data. Name: APAR IC29817 Date: 07 Mar 2001 Library: 8771 Problem: The CPPhone example application does not take advantage of the Dynamic JTAPI user functionality. CPPhone only works with users with configured telephony resources. This limitation requires the CallPath server administrator to constantly reconfigure the JTAPI daemon in a call center where agents do not use the same phone sets on a daily basis. Workaround: None. Solution: Enhance the CPPhone application to prompt for the dynamic JTAPI user addresses, ACD addresses, and agent data. This impact of this change required an update to the ProfileManager and CPLineResource classes in the JTAPI client. Three new methods were added to the ProfileManager to fill in the telephony resources since the returned data will be empty for a dynamic JTAPI user. Two new methods were added which returns a Vector of all the extension and ACD addresses available in the system. Here are some code examples. // Get user data for calltaker23 from server 7600@cpserver. ProfileManager pm = new ProfileManager( "calltaker23", "7600@cpserver" ); // Get all the phone extensions and ACDs. Each element in the // vector is an object of type JTAPIAddress. Vector exts = pm.getAllExtensionAddresses(); Vector acds = pm.getAllACDAddresses(); // Allocate two phone extensions 1001 and 1002 and use ACD 2001. pm.addDynamicAddressesAndACDs( "1001,1002", "2001" ); // Make phone set 1001 the ACD agent using agent ID 4001, password 9999, // and ACD 2001. pm.addDynamicAgentExtension( "1001", "4001", "9999", "2001" ); // Make phoneset 1002 and skills based routing agent. pm.addDynamicSkbrAgentExtension( "1002" ) Note: These methods will only add the dynamic data if the actual user's profile does NOT contain any resources and the dynamic resources are configured extensions and ACDs in the server. If the user calltaker23 was NOT a dynamic user, these methods would have no effect. The change to the CPLineResource class required the addition of two new bounded properties named dynamicAddresses and dynamicACDAddresses. The values of dynamicAddresses and dynamicACDAddresses are strings. Each string consist of a list of numbers separated by commas. Here is a code segment example. // Create a new CPLineResource CPLineResource cplr = new CPLineResource(); cplr.setUser( "calltaker23" ); cplr.setPassword( "apassword" ); cplr.setLineResourceService( "7600@cpserver" ); cplr.setAddress( "1002" ); cplr.setTerminal( "1002" ); // Set the dynamic addresses and ACD addresses. Must use the complete // list of all resources. cplr.setDynamicAddresses( "1001,1002" ); cplr.setDynamicACDAddresses( "2001" ); // Create a new Agent Resource. CPAgenResource cpar = new CPAgentResource(); cpar.setUser( "calltaker23" ); cpar.setPassword( "apassword" ); cpar.setLineResourceService( "7600@cpserver" ); cpar.setAddress( "1001" ); cpar.setTerminal( "1001" ); // Set the unique Agent Resource properties. cpar.setACD( "2001" ); cpar.setAgentPassword( "9999" ); cpar.setIdentifier( "4001" ); // Set the dynamic addresses and ACD addresses. Must use the complete // list of all resources. cpar.setDynamicAddresses( "1001,1002" ); cpar.setDynamicACDAddresses( "2001" ); Name: APAR IC27960 Date: 21 Sep 2000 Library: 8921 Problem: When using the BlindTransferBean within a DT/NT script, occasional errors could occur that would result in RC 100 on the transfer. Also, occasional nullpointer exceptions could cause DT channels to terminate abnormally. Workaround: None. Solution: BlindTransfer Bean was modified to wait for appropriate TerminalConnection objects to be associated with the call before completing the transfer request. LineResource class was modified to fix the nullpointer exception on the getConnections() method, which could sometimes occur under load conditions. Note: A new feature was also added to the BlindTransfer bean: setAutoRecover(boolean). This feature allows the user to determine whether they want the bean to attempt to retrieve the call if the transfer fails, or leave it in the current state. The default is to attempt to autorecover. Name: APAR IC27960 Date: 21 Sep 2000 Library: 8922 Problem: The problem discovered was that the data structure used to maintain the list of connections associated with an address, under the right circumstances, would begin to grow. Once it started growing it would continue to grow indefinitely, continuing to add new connections but not removing the old connections. Eventually this caused the memory available to be consumed. The cause of this was that the data structure was changing due to connections coming and going at the same time we were enumerating on the structure. This caused the enumeration to not be consistent with the data structure so we were not processing every item in the data structure. Solution: We changed the way we process the data structure to copy it into an array and process the array rather than just enumerating on the original data structure. Name: APAR IC29835 Date: 21 Sep 2000 Library: 9419 Problem: The toolkit does not allow disconnection of call parties (connections) outside the provider space. Solution: Allow such parties to be disconnected. Files contained in this Service Package: ---------------------------------------- ibmcctl.jar ibmcpath.jar readme.jtk