How to access DB2 as a Server platform / Data Source from CA-IDMS 3GL and CA-ADS?
There are multiple ways to access DB2 from CA-IDMS using our product suite:
(1) Call Attachment Facility (CAF) when both DB2 and CA-IDMS are running in the same LPAR
(2) LU6.2 (APPC) to access a remote DB2
(3) DRDABack to Top
What do I need to access DB2 through a COBOL modules or from CA-ADS programs by using the CAF?
You need the following components:
(1) VG-IDMS Client
(2) VG-IDMS/DB2 ServerThis allows accessing/updating DB2 from DC-COBOL.
To use embedded SQL in CA-ADS process code you also need the VG-ADS Precompiler.Back to Top
Do I need VG-COBOL Precompiler to access DB2 through a COBOL modules?
The VG-COBOL Precompiler is used only to access ODBC data.
For IDMS/COBOL/DB2 programs it is not needed - you just use DB2 precompiler.Back to Top
After upgrade from IDMS V14.0 to V15 I get stuck in the "Precompile Process" screen and can't get out.
In your case it is R14-style TCF queue records that caused the odd behavior.
Run the IDMSQCLN job to clean up queues between IDMS versions 14.0 and 15.0.
This is all covered in the CA technote QI06611.Back to Top
After upgrade from IDMS V14.0 to V15 hitting PF3 on Vega Main Menu caused a D003 with DC027001 message?
Apply CA PTF QO07579 (PGM CHECK ON 'POP' FROM MAIN MENU IN ADSA APPLICATION), which is most probably the remedy to your Menu/PF3 problem.
Back to Top
Which of your applications combine XML and IDMS (directly or indirectly)?
The VEGA Web Server.
Back to Top
IDMS VG003405 V100 CAF INTERFACE FUNCTION ERROR: INVALID EXTENDED SQLCA (EYE1)
The message "INVALID EXTENDED SQLCA (EYE1)" indicates that the SQLCAX area followed by SQLCA is not correct.
The called program should receive SQLCAX from the calling program.DB2-precompiler generates field "77 SQL-INIT-FLAG PIC S9(4) COMP-4 VALUE +0. ".
It controls how the addresses of SQLCA and host variables are refreshed at run-time.
If the same COBOL working-storage is used in the consecutive calls of called program then SQL-INIT-FLAG retains its value and the addresses of SQLCA and host variables may be incorrect.There are two possible solutions:
1. Execute "MOVE 0 TO SQL-INIT-FLAG" at the beginning of called program. Or
2. Define "IS INITIAL" in the PROGRAM-ID called program. clause. This initializes the whole WS of called program..Note that this is not VEGA specific problem but can occur also in batch (sub)programs if the addresses of host variables are subject to change between consecutive calls.
Back to Top
Do I have to replace the options table and server control table modules in the IDD when upgrading Vegasoft ADS-DB2 product from V2R6 to V2R7?
Existing server control table and options table can be used as such.
Back to Top
What is the significance of version numbers such as v 907 of options table and server control table modules added in the install?
DC system system number <x> uses module version <x>.
Versions 90n are just example SCT's.Back to Top
How to detect timeout situations while waiting for a response to avoid the IDMS inactive interval timeout abort?
You can do it using the Select API before the Read API.
The example below is COBOL. The ADS LINK PROGRAM is similar, but you need to define the 10 level SELECT-COMMAND-ARGUMENTS below as separate records in IDD.*****************************************************************
* SELECT ARGUMENTS START
*****************************************************************
05 SELECT-COMMAND-ARGUMENTS.
10 LOM PICTURE 9(4) USAGE COMP VALUE 4.
10 NUM-FDS PICTURE 9(8) USAGE COMP SYNC VALUE 32.
10 TIME-SW PICTURE 9(8) USAGE COMP SYNC VALUE 1.
10 RD-SW PICTURE 9(8) USAGE COMP SYNC VALUE 1.
10 WR-SW PICTURE 9(8) USAGE COMP SYNC VALUE 0.
10 EX-SW PICTURE 9(8) USAGE COMP SYNC VALUE 0.
10 TIMEOUT.
15 TIMEOUT-SS PICTURE 9(8) USAGE COMP VALUE 20.
15 TIMEOUT-MS PICTURE 9(8) USAGE COMP VALUE 0.
10 RD-MASK PICTURE S9(8) USAGE COMP VALUE -1.
10 WR-MASK PICTURE S9(8) USAGE COMP VALUE 0.
10 EX-MASK PICTURE S9(8) USAGE COMP VALUE 0.
10 R-R-MASK PICTURE S9(8) USAGE COMP VALUE 0.
10 R-W-MASK PICTURE S9(8) USAGE COMP VALUE 0.
10 R-E-MASK PICTURE S9(8) USAGE COMP VALUE 0.
*****************************************************************
* SELECT ARGUMENTS END
*****************************************************************
...
*****************************************************************
* SELECT WAIT FOR INCOMING DATA
*
* MAX WAIT TIME (SECONDS) IS TIMEOUT-SS
*****************************************************************
CALL 'MTCPHLI' USING WTCPTOKEN CMD-SELECT LOM NUM-FDS
TIME-SW RD-SW WR-SW EX-SW
TIMEOUT RD-MASK WR-MASK EX-MASK
DZERO R-R-MASK R-W-MASK R-E-MASK
ERRNO RC.
IF RC = 0
*****************************************************************
* TIMEOUT OCCURRED
*****************************************************************
MOVE WS-TIMEOUT-MESSAGE TO
DATABASE-ERROR-TEXT
GO TO CLOSE-SOCKET
END-IF.
*****************************************************************
* TCP/IP READ API
*****************************************************************
*
...
The logic should flow as follows:
1. Call MTCPHLI using select arguments.
2. Check Return code passed as part of select call.
3. If the Return code from (2) is zero then timeout has occurred.
4. Else Execute Read API.Back to Top
How to check if the java side is finished reading the data that was written by the ADS dialog prior to executing the close socket command?
ADS side does not get information about Java read operation. This is a TCP/IP design issue.
We suggest that you add TCP/IP read operation before socket close in the ADS side. It should get return code zero indicating that Java side has closed the socket. After that you can safely close the socket in the ADS side.
Back to Top
Should I update my xdb2-options-table version nnn?
Although the updated xdb2-options-table version 901 has the following additional lines:
*+ !SQL FORMAT PROFILE 3 FOR IDMS SQL-OPTION
*+ DBMS_TYPE_3=I
*+ SQL_STRING_DELIMITER_3='
*+ SQL_DP_3=.
*+ SQL_DATE_3=01.01.1992
*+ SQL_TIME_3=01.01.01
*+ SQL_TIME_STAMP_3=1991-01-01-01.01.01.123456
*+ STATIC_SQL_1=Ncompared to your older initial install table you can still use existing xdb2-options-table asis.
Back to Top
Does a transaction abend in between the CA-IDMS commit and the end of the cleanup of the DB2 synchronisation table cause a replay operation?
If a transaction abends after the CA-IDMS commit task but before the end of the cleanup DB2 synchronisation table then the replay task sees that both syncronisation table row and the related IDMS queue record exists (indicating that both databases are committed) and therefore the replay operation is not needed.
Note that the replay mechanism must be activated by an optional PTF vegasoft.srclib(ICZAP01)..
Back to Top
VG-IDMS Gateway TCP/IP connect fail when MAXTASK and task single thread after waiting
A free subtask (TCP LTE) is selected by linear search. If a free subtask is not found then the LAST subtask (TCP LTE) is enqued (=waited) until it is available. In a case where the first n concurrent tasks found a free subtask but the next n+ tasks did not - all those later n+ tasks enqued the last subtask n and therefore single threaded.
This situation is an indication that the number of subtasks is *much* less than the number of concurrent tasks using TCP/IP services. If you see this condition in your production environment then just increase the number of subtasks.
When MAXTASK is encountered the Listener rejects the connection request even though MAXTASK is (normally) a temporary error. The main reason for this is that otherwise the Listener gets invoked all the time by that connection request until MAXTASK is not encountered. But this kind of processing is like a loop that most probably prevents other tasks to process and end normally. Therefore for the sake of the overall performance it is better that the Listener immediately rejects those connection requests and there is some kind of retry logic on the client side (if needed).
Back to Top
What field contains the Client IP Address in VG-IDMS Gateway TCP/IP Option?
Use Getpeername call (see Programmer's Guide page 49) to get the IP address.
The WTCPPARM structure contains the Client address for Server applications.
It is defined by the IDD record WTCPPARM. The element WPARM-ADDR contains the IP address.Back to Top
Number of TCP/IP InitApis , TCP/IP EndApis and Abend Requests usage figures varies
When an abend occurs (either task abend or missing EndApi) then the related MVS subtask is detached, a new subtask is attached and the Usage # is reset to zero.
In summary
- The total count of InitApis , EndApis and Abend Requests is calculated beginning from the previous SR2LOAD
- The LTE Usage # is calculated beginning from the start of the subtask.Back to Top
Output truncated due size of record WTCPOBUF
Make your own record instead of WTCPOBUF to avoid overlays in future installs.
Back to Top
How many tasks can queue on the last LTE?
The number tasks that can queue on the last LTE is IDMS_MAXTASK - NUMBER_OF_VEGA_LTEs - 1. The -1 comes form the VEGA task SR2C.
The best way to see if there are potential problems is to perform TCPLIST at the end of a day. If the USAGE # of the last LTE is much over 0 (e.g. several hundreds or more) then there is a potential problem of queues. In that case increase the number of LTEs.
Back to Top
IDMS VG003857 V13 ALL SOCKETS IN USE
The message "IDMS VG003857 V13 ALL SOCKETS IN USE" comes when the dialog attached by the Listener does not execute Takesocket (e.g. because the dialog was disabled). We have addressed this situation in the most current maintenance level V2R7.1 (tape V20501) so that the Listener frees/reallocates the socket table instead of stopping.
Back to Top
Re-use of the Java Socket to make a subsequent request (connection pooling) get no reply from VG-IDMS Gateway TCP/IP
The close function call in the IDMS program closes the socket and the endapi/termapi function releases all socket resources.
Starting a socket connection at the IDMS end is very fast. Connection pooling would not bring any substantial throughput/performance increase.Back to Top
Does your VEGA product run under VSE or is it MVS only?
Vegasoft is MVS only.
Back to Top
Does Vegasoft support HTTPS (SSL)?
The HTTPS (SSL) is indirectly supported via firewall or VPN software. You can use e.g. Netscape software on the OS/390 firewall. It uses SSL when sending and receiving data from browser and unencrypted format with Web Server.
Implement SSL by installing a Netscape proxy server between the firewall and the VG-IDMS/Web Server. This solution provides and encrypted session between the browser and the proxy server without additional client software.
Back to Top
How to split the ADS/DB2 transactions going over many CICS environment instead of one?
You have to replace the new CICS VTAM LU in the VEGA Server Control Table (xdb2-control-table v <sysversion>). The SCT parameter is R=<cicslu>.
You also need to define the same CICS VTAM LU as a PTE/LTEs in a VTAMLU line in IDMS sysgen.
Back to Top
Is DB2 version 7 supported by Vegasoft V2R5.4 or do they have to upgrade to V2R7.0?
There is no need to upgrade because of DB2 version 7.
Back to Top
In backing out the new release c
an I just go back to the V90101 Loadlibs and keep IDD with the V11101 components?You can just go to V90101 loadlibs if the backout is required.
Back to Top
Any guidelines for setting the I= value (MVS-subtasks) for IDMSMQS on the Server Control Table statement?
Start with a small value (e.g. I=05) and use MQSLIST to see (e.g. at the end of the day) if the LAST MQSeries LTE is used (Usage # > 0).
If yes, increase the value of I little by little until Usage # is (near) zero.
Back to Top
Any way to stop the MQSC and SR2C and LISTEN from abending after shutdown?
The most probable reason is that the SR2MOFF and SR2TOFF is executed in the shutdown script.
It takes some time that other VEGA tasks (LISTEN, MQSTGM etc) terminate.At the same time the shutdown script is executed and causes conflict with terminating LISTEN, MQSTGM etc.
In the shutdown clist replaceSR2MOFF
SR2TOFFwith
SR2TOFFW
SR2MOFFW
..This causes that all VEGA tasks are terminated before the shutdown script is continued.
Back to Top
How to write IDMS COBOL programs to access DB2?
To access DB2 we use C(all) A(ttachment) F(acility) in the IDMS address space. The CAF operations are executed in MVS subtasks allowing the execution of other IDMS tasks while accessing DB2.
See the attached Programmers Guide (Progr26.pdf) section 1 how to write IDMS COBOL programs to access DB2. You use DB2 syntax and precompiler. The only major difference with IBM DB2 program preparation is that VEGA stub is link-edited with the program instead of DSNHLI. These COBOL/DB2 programs are typically used as I/O modules that are called by ADS dialogs.
In addition we provide an additional tool VG-ADS Precompiler (see ADS.pdf) that allows you to write DB2 SQL statements in ADS Process code. Precompiler generates the necessary code and work records to access DB2 (via CAF).
Back to Top
Is it possible to have 2 versions of the VEGA software on one NT machine?
You cannot have two versions in the same box because:
(1) The uninstallation routine would be overwritten.
(2) Registry entries pointing to the installation directory would be overwritten.The latest build cannot directly upgrade your existing build, because of the change in the InstallShield installation engine.
Please review the ReadTCPIP.txt for how to upgrade and preserve your existing listener definitions.
Back to Top
How to monitor the activity of an active VEGA ODBC connection like trace messages etc?
You can start the local client, click the STATUS button and several statistics will be displayed, including the number of active conversations and number of active processes.
Back to Top
What are those configuration minimum outnumbered idle ODBC worker processes VGODBCSPT?
The process dispatcher (VGODBCPPT.EXE) dynamically adjusts the number of running worker processes (VGODBCSPT.EXE) based on the load and within the limits (initial and maximum). At a peak time then number of worker processes may increase. After the peak time the dispatcher conservatively decreases the number of running workers one at a time to eliminate rapid stopping and restarting processes. So, you may see idle worker processes just sitting there for a while until they are stopped.
Back to Top
Does the VEGA software run on UNIX SOLARIS platforms?
The only VEGA software component running on Unix is the VG-Java Client for CA-IDMS.
Tested also on LINUX/390 platform with SuSE and TurboLinux.
Back to Top
Does VG-ODBC Server run on Windows 2000?
Yes.
Back to Top
What is the optimal way to return a row count in select?
01 GLOBAL-VARIABLES.
05 WS-ROWCOUNT PIC X(10).
Instead of usingEXEC VEGA
SELECT COUNT(*)
INTO :WS-ROWCOUNT FROM
...
WHEREuse to_char in order to return the value of count into a PIC X(10) field
EXEC VEGA
SELECT TO_CHAR(COUNT(*),'09999')
INTO :WS-ROWCOUNT FROM
...
WHEREBack to Top
What components do I need to connect to IDMS from a Windows with TCP/IP?
You need only two components; VG-Windows Client + VG-IDMS Gateway TCP/IP Option.
VG-IDMS Client is only required if ODBC access to DB2 is needed. It is free for the Windows Client with IDMS database.
Back to Top
Does Vegasoft provide tools for database conversion from IDMS to DB2?
We do not have any conversion tools for that purpose.
Our tools allow DB2 access from IDMS online applications including ADS/O.
Back to Top
Do you have tools to split up ADS/O on-line screens/maps without any recoding?
We have a windowing tool VG-ADS/WINDOW. Please see the manual for details.
Back to Top
Module MQSERPL in our loadlib it does not reflect our CV information.
If you are going to implement the Consistent Update Method, i.e. you want to synchronize MQ updates and IDMS updates you have to implement the Installation Manual step 6.7.
See also VEGA Programmer's Guide, Section 5: Consistent Update Method for CA-IDMS and MQSeries for how to use it.The queue names in MQSERPL will be completed with the CV number, if there is anything to REPLAY.
Back to Top
Need info again on Java connectivity with IDMS
To access IDMS with SQL you need CA-IDMS SQL Option from CA.
To access IDMS with ODBC/JDBC with stored procedures, i.e. DC-COBOL programs, you don't need SQL Option or CA-Server.
Back to Top
What components do I need for the Java interface to CA-IDMS?
You need the following components:
1. VG-Java Client (this includes VG-Application Server)
2. VG-IDMS Gateway TCP/IP OptionBack to Top
What are the benefits of "VG-Java Client" compared to "CA-IDMS Server Option"?
Although not familiar with all CA-IDMS Server features our product has at least these benefits:
1. In addition to SQL and table procedures we also support stored procedures, i.e. DC-COBOL programs that can be called via JDBC. Stored procedures can use any IDMS services except mapping. These DC-COBOL programs have much simpler design compared to table procedures.
2. Our product contains terminal emulation tool for testing and problem solving. As you know, these kinds of tasks are non-terminal tasks and sometimes a little difficult to debug. With the terminal emulation you can use debuggers, too.
3. The architecture is less complex.
Back to Top
VG003543 (Vnn THE STATEMENT IS NOT SUPPORTED BY THIS RELEASE OF THE TARGET SQL DBMS)
after migrated DB2 from V5.1 to V6.1DB2 Release in the Options Table is incorrect. Please define DB2_RELEASE=0610 in the module
xdb2-options-table v sysversion in the DEFAULT dictionary and perform:Dcuf set dbname ' '
Op2loadAfter this op2list should show DB2 Release: 0610
Note also that the Precompiler session should be ended (Action: QUIT) and restarted so that the Precompiler reads the updated DB2_RELEASE from the Options Table.
PS: VEGA tape V91101 do not allow 0610 in the Options Table (but supports 6.1 otherwise). Having that define DB2_RELEASE=0510 (it accepts the SET statement).
Back to Top
Data length problem with sending data string back from the listener to ADS.
TCP/IP socket read operation reads anything between 1 byte and requested_length (the actual amount is in the RETCODE) . The same applies to the write operation. You have to execute read/write until all data is read/written. This applies to the Unix C-program as well (you have to ensure that all data is written!). If the length of read/write data is not constant then I suggest that you have a length field at the beginning of data.
In ADS you should do as follows (very crude example):
move max-length to NBYTE <-- requested length
link mtcphlia tcpip-read NBYTE-record data-buffer-record RETCODE-record
move rc to total-length
while (RETCODE > 0 and total-length < max-length)
NBYTE = NBYTE - RETCODE <-- new requested length
link mtcphlia tcpip-read NBYTE-record temp-buffer-record RETCODE-record
if (RETCODE > 0) then
move concat(subs(data-buffer,1,total-length),subs(temp-buffer,1,RETCODE)) to data-buffer.
add RETCODE to total-lengt
end.
end.
if (RETCODE < 0) then error.
else if RETCODE = 0 then error-closed-socket. <--- UNIX has closed the socketBack to Top
Do you have an ADS example using MQSeries?
Attached is an ADS MQSeries client example. More examples are in vegasoft.srclib(mqiddf2).
REPLACE
PROCESS NAME IS PQSESAMPLE-CLIENT VERSION IS 1
DESCRIPTION IS 'MQSERIES SAMPLE ADS CLIENT'
PUBLIC ACCESS IS ALLOWED FOR ALL
'COMPONENT' IS PDB2
PROCESS SOURCE FOLLOWS
#------------------------------------------------------
# ADS CLIENT EXAMPLE -
# Sends one queue record to the server and -
# waits for response in a dynamic response queue -
#------------------------------------------------------
INIT (WR-RESPONSE).
MOVE SPACE TO AGR-MESSAGE.
#------------------------------------------------------
# OPEN SENDING QUEUE -
#------------------------------------------------------
MOVE MQOPEN TO MQFN-FUNC.
INIT (WQSE-CMQODV).
MOVE MQOO-OUTPUT TO MQOPT-OPTIONS-OPEN.
MOVE 'appl.send.queue' TO MQOD-OBJECTNAME.
LINK PROGRAM 'MQSEHLIA' USING (WQSE-CMQFNV
WQSE-CMQHCV WQSE-CMQODV WQSE-CMQOPTV-OPEN WQSE-CMQHOV-PUT
WQSE-CMQCCV WQSE-CMQRCV).
CALL MQSERR.
#------------------------------------------------------
# OPEN (DYNAMIC) RESPONSE QUEUE -
#------------------------------------------------------
MOVE MQOPEN TO MQFN-FUNC.
INIT (WQSE-CMQODV).
MOVE MQOO-INPUT-EXCLUSIVE TO MQOPT-OPTIONS-OPEN.
MOVE 'appl.response.queue' TO MQOD-OBJECTNAME.
LINK PROGRAM 'MQSEHLIA' USING (WQSE-CMQFNV
WQSE-CMQHCV WQSE-CMQODV WQSE-CMQOPTV-OPEN WQSE-CMQHOV-GET
WQSE-CMQCCV WQSE-CMQRCV).
CALL MQSERR.
#------------------------------------------------------
# SEND REQUEST -
#------------------------------------------------------
MOVE MQPUT TO MQFN-FUNC.
MOVE nn TO MQBFL-BUFFERLENGTH-PUT.
INIT (WQSE-CMQMDV, WQSE-CMQPMOV).
MOVE 278 TO MQMD-CODEDCHARSETID.
MOVE MQPMO-NO-SYNCPOINT TO MQPMO-OPTIONS.
MOVE MQOD-OBJECTNAME TO MQMD-REPLYTOQ.
LINK PROGRAM 'MQSEHLIA' USING (WQSE-CMQFNV
WQSE-CMQHCV WQSE-CMQHOV-PUT WQSE-CMQMDV
WQSE-CMQPMOV WQSE-CMQBFLV-PUT wr-request
WQSE-CMQCCV WQSE-CMQRCV).
CALL MQSERR.
#------------------------------------------------------
# READ RESPONSE -
#------------------------------------------------------
MOVE MQGET TO MQFN-FUNC.
MOVE mm TO MQBFL-BUFFERLENGTH-GET.
INIT (WQSE-CMQMDV, WQSE-CMQGMOV).
COMPUTE MQGMO-OPTIONS = MQGMO-WAIT + MQGMO-CONVERT.
MOVE 278 TO MQMD-CODEDCHARSETID.
#------------------------------------------------------
# NO WAIT LIMIT -
#------------------------------------------------------
MOVE MQWI-UNLIMITED TO MQGMO-WAITINTERVAL.
MOVE MQMI-NONE TO MQMD-MSGID.
MOVE MQCI-NONE TO MQMD-CORRELID.
LINK PROGRAM 'MQSEHLIA' USING (WQSE-CMQFNV
WQSE-CMQHCV WQSE-CMQHOV-GET WQSE-CMQMDV
WQSE-CMQGMOV WQSE-CMQBFLV-GET wr-response WQSE-CMQDLV
WQSE-CMQCCV WQSE-CMQRCV).
CALL MQSERR.
#------------------------------------------------------
# DISCONNECT -
#------------------------------------------------------
MOVE MQDISC TO MQFN-FUNC.
LINK PROGRAM 'MQSEHLIA' USING (WQSE-CMQFNV
WQSE-CMQHCV
WQSE-CMQCCV WQSE-CMQRCV).
CALL MQSERR.
RETURN.
DEFINE SUBR MQSERR.
IF MQCC-COMPCODE = MQCC-FAILED THEN DO.
INCLUDE PQSEXPL-CALL.
RETURN.
END.
MSEND
.
Back to Top
Tried to change my system specific VEGA Server Control Table parameters but found only default values
Obviously you are trying to change modules added in the install. The correct options table and server control table module version is <dcsystem_version> in the default dictionary.
DC system system number <dcsystem_version> uses module version <dcsystem_version>.
Versions 90n are just VEGA supplied model SCT's.Back to Top
Can I from a ADSO Dialog call a DC Cobol program (no VEGA ), and have that DC Cobol call another DC Cobol with VEGA?
You can do that kind of call.
Back to Top
Should we run the MQINS02 for each application dictionary that wants to call MQSeries?
You need to run MQINS02 against the SYSTEM dictionary only if you write ADS/Online MQSeries applications in the SYSTEM dictionary (normally you do not need).
You need to first run GWINS02A and then MQINS02A against all dictionaries that are used to write ADS/Online MQSeries applications.
If you want to create Options Table, you must put the Options Table in the DEFAULT dictionary (see inst guide 4.5) i.e.
Sig dict system.
Dis mod xdb2-options-table version 901 as syn. <-- model
Change the version to the IDMS system version and save it in the DEFAULT dictionary.
Then perform
Dcuf set dbname ' '
Sr2load
Yes they are. Please refer to technical notes T2001-09-14 and T2002-07-03 about CA-IDMS release 15 considerations.