-
Notifications
You must be signed in to change notification settings - Fork 1
/
Changes.src
2064 lines (1417 loc) · 74.4 KB
/
Changes.src
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
=head1 Introduction
This file documents the changes to each and every release of the
MQSeries perl API, going back as far as the 1.02 release.
=head1 Changes for 1.34
MQClient/typemap.PL will handle MQINT64 like how it handles MQHMSG.
MQSeries/Comamnd/Base.pm: In untraslatePCF, the filters handled
properly. Filters may also apply to MQCFT_INTEGER64 and
MQCFT_INTEGER64_LIST as well as the shorter kinds.
MQSeries/Command.pm : Added support for ChlAuth and Comminfo objects
of mqv7.1.
MQSeries/ErrorLog/Parser.pm: addied a 'ip.ad.dre.ss (port)' parser
for the error log
MQSeries/ErrorLog/descriptions.pl:
Allow single-character hostnames. more likely this is the first
character of an ip address where the first octet is a single digit.
Add AMQ6048 for dbcs error.
MQSeries/Message/RFH2.pm : Modified based CPAN user's input. It
handles NameValueData correctly. Also sets the default Format to
MQFMT_NONE instead of undef.
util/parse_headers:
Some defines are now both compound (ie, they are multiple macros |'ed
together) and the last one ends in L, so the check for the former must
move above the check for the latter so that it works with 7.1
string leading and trailing spaces from or'ed values. This makes the
postponed parsing of or'ed defines work, where the or'ed define has
spaces inside the parentheses.
=head1 Changes for 1.33
=head2 Major work on Statistics messages and PCF types
Support for the decoding of MQ v6 Accounting/Statistics messages was
added to the PCF decoder, along with the new types these messages use.
Though not strictly necessary, support for these types (MQCFT_GROUP,
MQCFT_INTEGER64, and MQCFT_INTEGER64_LIST) is intended to be complete
throughout the PCF framework, so encoding should work as well.
New message subtypes MQSeries::Message::Accounting and
MQSeries::Message::Statistics were added for this, both of which are
derived from the new MQSeries::Message::System class, which mainly
exists to handle the decoding of the messages. The already existing
MQSeries::Message::Event class was reparented to here.
=head2 MQSC and PCF enhancements
The encoding/decoding for KeepAliveInterval has been addressed, and
support for more PCF and MQSC commands have been added, and more MQ v7
items and types were included as well. This should make the
administration of a z/OS queue manager more complete.
Note that as a part of this, the CreateAuthInfo and ChangeAuthInfo
commands now require the AuthInfoType parameter which was previously
optional.
=head2 Minor tweaks
MQSeries::Queue now allows a queue to be called "0". Previously this
was mistaken to be a false value (ok, it is, but it's also a defined
and non-zero-length string, so you should be able to use it).
MQSeries::Command was mixing up the DefinitionType setting on queues
when creating or updating local and model queues. In particular, you
may end up with a PermDyn model queue where this is wrong, or the
failure to delete a dynamic queue, in order to recreate as a local
queue.
MQSeries::QueueManager now explicitly sets the get/put counters it
keeps to 0. This is to eliminate messages of the form:
Currently puts and 3 gets pending
where the number of "puts" is simply missing.
An old bug in MQSeries::Message::PCF was removed (wrt the Header and
Parameters methods) once the new MQSeries::Message::System class was
added. It was completely wrong, so clearly no one had used it before
now. It's better now. An old memory leak in MQEncodePCF in PCF.xs
was also squashed (affected parties may have noticed a slow but
continuing increase in memory size of a process that was sending lots
of PCF messages).
=head2 Important note for MQv5 and perl 5.6 users
With the addition of the MQ v6 Statistics and Accounting support in
this release, as well as the new PCF stuff, the possibility exists
that the MQSeries perl module no longer supports either MQ v5 or perl
5.6. Support for these will be at a best effort kind of basis, but
with the caveat that the maintainers no longer use either of these amy
will likely not be able to replicate anything close to an environment
involving either of this if you have any problems.
=head1 Changes for 1.32
The following fixes are included in the 1.32 release:
=head2 ReasonQualifier Macro Translation
Markus Sonderegger requested MQReasonQualifierToStrings(),
MQReasonQualifierToMacro(), and MQReasonQualifierToText() functions
(and the associated hashes) to translate the ReasonQualifier values to
something more human-friendly.
=head2 SSL Improvements
SSLPeerName is now handled as part of the ClientConn passed to
MQCONNX(), and also when passed as part of a channel definition when
writing a channel table file.
More SSL-related event types are now defined.
=head2 MQSeries::Command fix for InquireChannelNames
Investigation of a problem report with InquireChannelNames led to the
discovery of a gap between the documentation and server-side
implementation of InquireChannelNames. Channel names are now taken
from the last PCF response instead of the first on the grounds that
that one is much more likely to contain the actual answer.
=head2 Portability / Better code
Some types were adjusted to better match the places where they are
used and to avoid compiler warnings from some platforms/compilers.
Similarly, some C++ style comments were changed to C comments so that
pre-C99 compilers will be happy.
The MQHMSG type is now translated to/from a perl type better.
Macros that are defined to enable backwards compatible building
against older MQ installs are now wrapped in #ifdef/#endif to avoid
compiler warnings.
The hex() function is now used to translate stringified hexadecimal
into a number instead of eval(). Fix suggested by an anonymous
well-intentioned problem ticket.
A number of places in the code path for generation of a channel table
could lead perl to emit warnings about undef. Reasonable defaults
have been applied to eliminate these.
The test for MQSTAT() has been updated to match the current state of
the art.
=head2 MQSeries::Command fix for CreateObject
CreateObject() would fail to create a local queue if a dynamic queue
already existed with the same name because they have the same QType (a
previously existing remote queue would be deleted first because the
QType is different). Now we also check the DefinitionType to see if a
dynamic queue should be replaced with a local queue.
=head1 Changes for 1.31
The following fixes are included in the 1.31 release:
=head2 XS code cleanup
Fix support for builds on Solaris, and a few places where filters
weren't completely supported properly. Add some type casts to quiet
some compiler warnings, and a workaround for non-C99 systems.
=head2 Minor bugfixes
Adjust the projected test count for one script to match the number of
tests, fix an undefined variable use warning in MQSeries/Command.pm,
and a parameter validation inaccuracy in MQSeries/QueueManager.pm.
=head1 Changes for 1.30
The following changes are included in the 1.30 release:
=head2 Support for properties (MQ v7)
The low-level API and the MQSeries::XXX classes have been extended
with support for properties. There is a new MQSeries::Properties
class and the existing MQSeries::Queue and MQSeries::Message
classes have been extended with new methods.
=head2 Support for asynchronous put status information (MQ v7)
The low-level API and the MQSeries::QueueManager class have been
extended with support for asynchronous put status information. In the
low-level API, the function is MQSTAT; in the MQSeries::QueueManager
class, the method is StatusInfo.
=head2 MQSeries::Command enhancements for MQ v7
The MQSeries::Command class now supports the new MQ v7 attributes for
PCF commands on distributed platforms, i.e. it supports querying and
modifying the new queue manager, queue and channel attributes
introduced with MQ v7. Support for Topic and Subscription objects has
been added to MQSeries::Command.
=head2 MQSeries::Command enhancements to support filter commands
The MQSeries::Command class now supports filter commands for MQ v6 and
above. This allows Inquire commands to include a filter that is
evaluated by the queue manager and reduces the result set to items
matching the filter (query).
=head2 XS code cleanup
Significant cleanups in the low-level XS code should make it possible
to run with warnings enabled without getting large numbers of "use of
uninitialized value" messages at run-time.
=head2 Updated examples
The example scripts have been updated; most notably, a new set of
request/reply scripts demonstrates handling syncpoint, poison
messages, and dynamic queues.
=head1 Changes for 1.29
The following fixes are included in the 1.29 release:
=head2 Initial support for MQ v7
The module now compiles with MQ v7 and new constants are supported.
Support for new and enhanced APIs is not yet in place. During
configuration, some warnings will occur for unknown datatypes. This
is expected and can be ignored.
Feedback on which MQ v7 features should be supported in the next
module release is welcome.
=head2 MQSeries::Command fixes
Minor changes for queue-sharing groups and for the
HeaderCompression/MessageCompression attributes.
=head2 Support SecurityParms in MQCONNX
Duke Nguyen contributed support for the SecurityParms data structure
with the MQCONNX call
=head2 SSL tutorial
Morten Bjoernsvik contributed a cookbook on using SSL with the
MQSeries client and server.
=head2 Minor bugfixes
Morten Bjoernsvik contributed a bugfix to the MQSeries::Queue module,
avoiding a call to MQCLOSE if no queue manager connection exists.
=head2 ChannelTable fixes
Recent V6 client releases are more picky in how they parse v4 channel
table files (the format native to the MQ 5.0 client release). The
MQSeries::Config::ChannelTable file has been updated to reflect this.
=head2 MQSeries::Command fixes
Add the missing ChannelStatistics attribute for Channel commands.
=head1 Changes for 1.28
The following fixes are included in the 1.28 release:
=head2 Compilation fixes when used with MQ v5
The changes for release 1.27 broke MQSeries::Command when used with
an MQ v5 client.
=head2 Fix client/server detection on Windows
Patrick Lanners supplied a patch to improve the testing for the client
or server API on Windows.
=head1 Changes for 1.27
The following fixes are included in the 1.27 release:
=head2 New entries in the AMQERR0x.LOG parser
A number of additional message descriptions have been added to the
configuration file for the AMQERR0x.LOG parser
(MQSeries::ErrorLog::Parser). The newly supported messages are
specific to MQ v6 on Linux/Unix/Windows.
The AMQERR0x.LOG parser does not yet support all new MQ v6 messages.
Error reports (including AMQERR0x.LOG files) are welcome.
=head2 Other changes made:
=over 4
=item *
Updated MQSC command attributes for OS/390 WMQ6 queue managers.
=item *
Added/Updated PCF commands/attributes for both Mainframe and Distributed queue managers.
=item *
Added support for BYSTRING parameters like ConnectionId.
=back
=head1 Changes for 1.26
The following fixes are included in the 1.26 release:
=head2 Updated entries for AMQ9001 and AMQ9002
IBM has changed the AMQERR log format for the above codes.
Updated descriptions.pl file in the Errorlog directory.
=head2 Correct the RequestParameterOrder for SetAuthorityRecord
Thanks to "Jean-Yves Baudy [[email protected]]" for pointing this out.
Corrected the RequestParameterOrder file to expect the correct order.
=head2 Fix the InquireChannelStatus PCF command
Updated the ChannelStatus block in RequestParameters file with
all the necessary optional parameters.
=head1 Changes for 1.25
The 1.24 release, though long-delayed, was plagued by glitches. Our
only excuse is that it had been too long since the last release and we
were out of practice. Let's hope the 1.25 release is better.
=head2 Add missing generated files
The MQSeries 1.24 release accidentally went out without the required
generated files. This has been corrected.
=head2 Fix link RPATH glitches on 64-bit Linux
The RPATH for 64-bit linux systems ended up as /opt/mqm/lib6464 due to
duplicate addition of the '64' postfix. This has been fixed.
=head2 Remove vestigial MQ v2 and OS/390 support
Support for the MQ v2 release has been removed. The lowest supported
MQ release is now 5.2 and the lowest supported perl release is now
perl 5.6.
In a similar manner, the incomplete and known to be broken OS/390
support is removed. The module will still work with z/OS queue
managers; it just won't try and compile on OS/390 anymore.
=head2 Remove outdated PubSub support
Support for the outdated pre-MQSI v2 publish/subscribe classes
(MQSeries::PubSub, MQSeries::Message::RulesFormat) has been removed.
=head2 Switch to Params::Validate
The VerifyNamedParams method in the MQSeries::Utils has been dropped
and is replaced by the use of the Params::Validate module. This is a
new dependency that must be installed before the MQSeries module.
=head1 Changes for 1.24
=head2 Add support for MQ v6 in MQSeries::Command
Support for all new parameters in PCF and MQSC commands; support for
mainframe PCF commands; and several new PCF commands such as
C<InquireQueueManagerStatus>, C<InquireUsage> and the
authority-related commands.
=head2 Fix a bug in MQSeries::Config::QMgr
Monique Diaz reported a bug in MQSeries::Config::QMgr, where
re-parsing a changed queue manager config file would lead to an
incorrect method invocation.
=head2 Fix documentation for Carp parameter
Herb Williams reported that the examples for the 'Carp' parameter were
broken. They should now make more sense and actually work.
=head1 Changes for 1.23
=head2 New MQSeries::Message::RFH2 class
A new class to support RFH2 messages; this allows interaction with JMS
clients and the various WMQ Integrator products.
This message type is experimental and lightly tested (bugreports and
patches welcome). Thanks to Tim Kimber for working on this.
=head2 Support for NonPersistentMsgClass
The new queue attribute C<NonPersistentMsgClass>, which is available
for Local and Model queues starting with WMQ 5.3 CSD06, is now
supported by MQSeries::Command::PCF and MQSeries::Command::MQSC.
=head1 Changes for 1.22
=head2 Support for the MQ Client on Linux / Itanium
Add 64-bit client support for Linux / Itanium. This should also make
it easy to add support for other 64-bit clients - but note that each
scuh platform will need to adjust the util/parse_headers script.
Patches for other platforms are welcome.
=head2 Support for SCO OpenServer / MQSeries 5.0
Leonid Lisovskiy contributed patches to make the MQSeries module
compile on SCO OpenServer 5.0.6 using the WillowTech MQSeries 5.0
client.
=head2 MQSeries::Command fixes
Support IndexType "GroupId" for shared queues on z/OS in
MQSeries::Command::MQSC.
=head1 Changes for 1.21
=head2 Fixes for MQSeries::Message::IIH
Jeff Dunn contributed patches to the IMBS Bridge Header class
MQSeries::Message::IIH that make it work on both little-endian and
big-endian platforms. By default, the module assumes client and
server will run on platforms with the same endian-ness; this can be
overridden if this is not the case.
=head2 Fix for MQSeries::Queue Get() failure with MQRC_FORMAT_ERROR
When a message has format MQFMT_NONE; sender and receiver run on
platforms with different endian-ness; and the receiver specifies
Get-Message Option MQGMO_CONVERT; then MQ returns completion code
MQCC_WARNING and reason code MQRC_FORMAT_ERROR.
The MQSeries::Queue Get() method used to treat this as an error. In
this particular case (Format MQFMT_NONE), the warning can be ignored.
The method now treats this as a succesful read.
=head2 Use version 2 of MQMD, MQGMO, MQPMO by default
The MQGET, MQPUT and MQPUT1 functions now use MQMD version 2 and MQGMO
version2 by default; MQPUT and MQPUT1 now use MQPMO version2 by
default if a distribution list is specified. Applications using
message grouping, segmentation, or distribution lists no longer have
to specify the MsgDesc, GetMsgOpts or PutMsgOpts version explicitly.
It is still possible to set a higher MQMD, MQGMO or MQPMO version
explicitly. Note that this change will break use of older (pre-5.0)
queue managers, but as these are over 5 years out of date, this should
not matter.
=head2 Handle too-short input data
Howard Muten noted that specifiying a too-short correlation id on
MQPUT resulted in garbage bytes written to MQ. This turned out to be
a generic problem, where user-supplied data that was too short was
copied in with whatever memory contenst was following. This has been
fixed in the typemap code.
=head2 Add support for SSL connect options to MQCONNX and MQSeries::QueueManager
Brian Bumpass contributed XS code to add support for the SSLConfig
options to the C<MQCONNX> call, as well as support for the additional
ClientConn parameters introduced in WMQ 5.3. These options have also
been added to the MQSeries::QueueManager class. Use of these options
obviously requires a WMQ 5.3 client with the optional SSL support
installed and configured.
=head2 MQSeries::Command supports direct mainframe connectivity
The MQSeries::Command class now supports connecting directly to the
mainframe (z/OS) using client connections. As the default syncpoint
behavior on MQPUT for this platform is different, this module now
explicitly specifies MQPMO_NO_SYNCPOINT when writing a message.
=head2 Improve support for WMQ 5.3 queue-sharing groups
On the mainframe (z/OS), WMQ 5.3 supports queue-sharing groups. The
MQSeries::Command::MQSC classes have been extended to support the
following features:
=over 4
=item *
Add the 'Shared' option to the queue DefinitionType parameter values
=item *
In CreateObject(), do not alter the object but delete and recreate it
when either the QSharingGroupDisposition or CFStruct attributes has
changed.
=back
=head2 Support for V7 channel tables in MQSeries::Config::ChannelTable
Mike Surikov contributed further patches to support reading and
writing of channel table files, including fields new with version 7 of
this file (WMQ 5.3). Generation and parsing of the older versions is
still supported.
=head2 Alter link libraries for AIX
James FitzGibbon contributed some configure options for Makefile.PL to
pick the right MQ libraries on AIX.
=head2 Drop deprecated options, methods for MQSeries::Queue
The deprecated option C<NoAutoOpen> for the MQSeries::Queue
constructor C<new> is no longer supported.
The deprecated MQSeries::Queue methods C<Commit>, C<Backout> and
C<Pending> are no longer supported. Obviously, these methods are
still supported on the MQSeries::QueueManager object.
=head2 Drop deprecated option for MQSeries::QueueManager
The deprecated option C<NoAutoConnect> for the MQSeries::QueueManager
constructor C<new> is no longer supported.
=head1 Changes for 1.20
=head2 Improve MQSeries::Command::PCF support for clusters
Minor fixes for the C<InquireClusterQueueManager> command; add support
for C<RefreshCluster> command. At this time, support for
C<ResetCluster>, C<SuspendQueueManagerCluster> and
C<ResumeQueueManagerCluster> is not planned (patches are welcome).
=head2 Support file handles in writeFile() for MQSeries::Config::ChannelTable
T. Rob Wyatt requested the ability to write to a caller-supplied
filehandle in the MQSeries::Config::ChannelTable C<writeFile> method;
this allows him to supply channel tables from a CGI script without
having to create temporary files.
Support for this is now provided using the new C<FileHandle> parameter
to the C<writeFile> method.
=head2 Support for V6 channel tables in MQSeries::Config::ChannelTable
Mike Surikov contributed patches to support reading and writing of
version 6 client channel table files. Previous releases did not
handle all fields. The default version of files written is now
version 6, though generation and parsing of the older version format
is still supported.
=head2 New MQSeries::Message::Trigger class
A new class to support trigger monitor messages; this allows you to
write a trigger monitor in perl.
=head2 Alter link libraries for Linux and HP-UX
On Linux and HP-UX, the MQ libraries are different for single- and
multi-threaded programs. The makefile now tries to pick the right
libraries based on the 'usethread' parameter in Config.pm.
=head2 Fix the MQSeries::Command->Escape() method
Mike Surikov supplied a patch that makes the 'Escape' method of
MQSeries::Command work. This is used when sending MQSC commands using
PCF.
=head2 Deprecated parameters generate a warning
The deprecated parameters C<NoAutoConnect> for
C<MQSeries::QueueManager> and C<NoAutoOpen> for C<MQSeries::Queue>
will generate a run-time warning whether -w is enabled or not. In the
next release, the warning becomes a fatal error.
=head2 Deprecated methods generate a warning
The deprecated C<MQSeries::Queue> methods C<Commit>, C<Backout> and
C<Pending> will generate a run-time warning whether -w is enabled or
not. In the next release, the warning becomes a fatal error.
=head2 Drop old platforms and releases
This release drops support for MQSeries 5.0, Solaris 2.5.1 and IRIX.
We have not made any changes to the code that should affect these
platforms and releases, but no longer have hese host types around.
If you care about these platforms, we'll be happy to merge patches to
keep them working.
=head1 Changes for 1.19
=head2 API change for Get/Put methods of MQSeries::Queue
In previous releases, specifying the C<PutMsgOpts> with the C<Put>
method or the C<GetMsgOpts> with the C<Get> method of
C<MQSeries::Queue> meant that C<Sync>, C<Wait> and C<Convert>
parameters were ignored.
This has now changed: the C<Sync>, C<Wait> and C<Convert> parameters
will be honored and be combined with the get/put options specified
with the C<PutMsgOpts> or C<GetMsgOpts> parameters.
The C<Get> method C<Wait> and C<Convert> parameters will override the
C<GetMsgOpts> options flag.
The C<Get> and C<Put> method C<Sync> paramater will check the
C<GetMsgOpts> or C<PutMsgOpts> options flag for compatibility. If a
coflicting syncpoint option is already set, a fatal error will be
raised. If no conflicting option is set (this means the options flkag
either has no syncpoint flag set at all, or has the requested flag set
already), the requested C<Sync> paramater will be added to the options
flag.
This means the following will now work:
my $result = $request_queue->
Get('Message' => $get_message,
'GetMsgOpts' =>
{
'Options' => (MQSeries::MQGMO_SYNCPOINT_IF_PERSISTENT |
MQSeries::MQGMO_FAIL_IF_QUIESCING),
},
'Wait' => '30s',
);
In the past, this would cause the C<Wait> flag to be silently ignored.
This incompatible API change may break your code. As it significantly
enhances the safety of your code, this is deemed a price worth paying.
=head2 New MQSeries::Message::ConfigEvent class
WebSphere MQ 5.3 on z/OS can generate configuration change events that
cannot be read on Unix and NT queue managers - distributed queue
managers are not able to convert PCF version2 messages. The
MQSeries::Message::ConfigEvent class can be used to process such
messages - highly useful to create an audit log.
=head2 New MQSeries::Message::IIH class
A new class to support IMS Bridge Header (IIH) messages. This is due
to Nathan Dupra of Xerox USA. This class is based on reverse
engineering and somewhat experimental - feedback on functionality or
the API is welcome.
=head2 Add support for WebSphere MQ 5.3 on z/OS
A number of minor changes have been made to support MQSeries::Command
with the 5.3 release (now branded WebSphere MQ) on z/OS. Note that
PTF UQ68236 is required - the MQSC output of "Display Queue" is
invalid without that PTF, leading to errors with the C<InquireQueue>
method.
=over 4
=item *
Support for AuthInfo objects in C<MQSeries::Command>, mostly through
changes in the C<MQSeries::Command::MQSC::*> tables.
=item *
Support for CFStruct (Coupling Facility Application Structure) objects
in C<MQSeries::Command>, mostly through changes in the
C<MQSeries::Command::MQSC::*> tables.
=item *
Support for the new Channel attributes in C<MQSeries::Command>, mostly
through changes in the C<MQSeries::Command::MQSC::*> tables. The new
attributes are C<BatchHeartBeat>, C<KeepAliveInterval>,
C<LocalAddress>, C<SSLCipherSpec>, C<SSLClientAuth> and
C<SSLPeerName>.
=item *
Support for the new QueueManager attributes in C<MQSeries::Command>,
mostly through changes in the C<MQSeries::Command::MQSC::*> tables.
The new attributes are C<ConfigurationEvent>, C<ExpiryInterval>,
C<SSLKeyRepository>, C<SSLCRLNamelist>, C<SSLCryptoHardware> and
C<SSLTasks>.
=item *
Support for the new Queue attributes in C<MQSeries::Command>,
mostly through changes in the C<MQSeries::Command::MQSC::*> tables.
The new attribute is C<PageSetId>.
=item *
Support for the new Namelist attributes in C<MQSeries::Command>,
mostly through changes in the C<MQSeries::Command::MQSC::*> tables.
The new attribute is C<NamelistType>.
=back
=head2 New features for MQSeries::Command
The C<MQSeries::Command> constructor now accepts a C<CommandQueue>
parameter. This allows you to open an arbitrary queue with arbitary
options, then use it so send commands.
In addition, a new C<MsgDesc> method for C<MQSeries::Command> can be
used to fine-tune the message descriptor for outgoing commands.
These new features can be used to open an arbitarry queue and override
message persistence, as some users requested; internally, we sue it to
set the accounting options on outgoing messages, which are then
archived by the WMQ 5.3 configuration events on z/OS.
=head2 Better decoding of MQSC results
Mike Surikov pointed out more bugs in the decoding of MQSC result
messages in C<MQSeries::Command>. I've added more fixes...
=head2 Parameter verification for MQSeries::QueueManager
The parameters to the major methods of the C<MQSeries::QueueManager>
class (C<new>, C<Connect>, C<Close>) are now enforced. Specifying
invalid parameter names will lead to a fatal run-time error.
=head2 Parameter verification for MQSeries::Queue
The parameters to the major methods of the C<MQSeries::Queue> class
(C<new>, C<Open>, C<Get>) are now enforced. Specifying invalid
parameter names will lead to a fatal run-time error.
=head2 New 'Convert' option for MQSeries::Queue Get method
The C<Get> method of C<MQSeries::Queue> has a new C<Convert> option.
This is true by default, but can be set to false if conversion is not
required. This is useful when manually converting messages, e.g. WMQ
5.3 configuration events.
=head2 Deprecated parameters generate a warning if -w is enabled
The deprecated parameters C<NoAutoConnect> for
C<MQSeries::QueueManager> and C<NoAutoOpen> for C<MQSeries::Queue>
will generate a warning if -w is enabled. In the next release, the
warning becomes mandatory.
=head2 Deprecated methods generate a warning if -w is enabled
The deprecated C<MQSeries::Queue> methods C<Commit>, C<Backout> and
C<Pending> will generate a warning if -w is enabled. In the next
release, the warning becomes mandatory.
=head1 Changes for 1.18
=head2 Add support for WebSphere MQ 5.3
A number of minor changes have been made to support the 5.3 release
(now branded WebSphere MQ).
=over 4
=item *
The format of AMQERR01.LOG files has changed: the record separator can
now contain a filename and line. Update to C<MQSeries::ErrorLog::Parser>.
=item *
The product name in many message in the AMQERR01.LOG file has changed;
some error messages have been added and others have minor changes.
Update to C<MQSeries::ErrorLog::descriptions.pl>.
=item *
The format of FDC files has changed: the product name at the start of
each record has changed. Update to C<MQSeries::FDC::Parser>, which now
supports both the old and the new product name.
=item *
Support for AuthInfo objects in C<MQSeries::Command>, mostly through
changes in the C<MQSeries::Command::PCF::*> tables.
=item *
Support for the new C<InquireQueueStatus> command, mostly through
changes in the C<MQSeries::Command::PCF::*> tables.
=item *
Support for the new Channel attributes in C<MQSeries::Command>, mostly
through changes in the C<MQSeries::Command::PCF::*> tables. The new
attributes are C<BatchHeartBeat>, C<LocalAddress>, C<SSLCipherSpec>,
C<SSLClientAuth> and C<SSLPeerName>.
=item *
Support for the new QueueManager attributes in C<MQSeries::Command>,
mostly through changes in the C<MQSeries::Command::PCF::*> tables.
The new attributes are C<ConfigurationEvent>, C<SSLKeyRepository>,
C<SSLCRLNamelist> and C<SSLCryptoHardware>.
=back
=head2 Support ChannelTable reading/writing on Windows NT
Jim Wendorf reported that the C<MQSeries::Config::ChannelTable> file
did not reliably read and write channel tables on Windows NT. This
was due to missing binmode() statements and sort order issues and has
now been fixed.
=head2 Improved client/server API detection
Edwin Haswell contributed code for improved client vs server API
support. The plain "use MQSeries;" code should now work again for
client installations.
=head2 Add support for MQSC InquireQueueStatus command
The C<MQSeries::Command> class now supports the C<InquireQueueStatus>
command when using MQSC commands. This works against mainframe queue
managers running MQSeries release 5.2 and up.
=head2 Remove support for perl5.004
The MQSeries module now requires perl5.005. We test internally with
both perl5.005 and perl5.6.
=head2 Strict argument checking for MQSeries::Command constructor
The MQSeries::Command constructor now performs strict parameter name
validation and will throw an exception (using confess()) if an invalid
parameter name is passed.
This has the potential of breaking existing, but buggy, code. Similar
changes will be made to many of the other classes and methods in
upcoming releases.
=head2 Modified message retry handling in MQSeries::Queue Get()
Paul Meekin submitted an interesting bug showing we got message retry
wrong when the initial data buffer is too large and message conversion
is required (reason code MQRC_TRUNCATED_MSG_FAILED). Effectively, we
were re-using the MQMD returned after the warning, which caused the
requested coded character set and encoding to be ignored. This is now
fixed.
However, this bug also showed that some of the retry logic was
non-functional; the non-working code has now been removed. The retry
logic failed in the following (rare) corner-case:
=over 4
=item *
You are getting a string message and requesting conversion
=item *
The data buffer specified is large enough to hold the message before
conversion
=item *
The message expands during conversion (e.g., Latin-1 to UTF-8)
=item *
The data buffer specified is not large enough to hold the message
after conversion
=back
It turns out that in this case (when MQCC_WARNING and
MQRC_CONVERTED_STRING_TOO_BIG is returned) is not retryable. The only
thing the application can do, if the message was read under syncpoint,
is to roll back and try again with a properly sized data buffer.
=head2 Reduced memory usage for MQSeries::Command
The MQSeries::Command module will now delay loading for the
sub-classes MQSeries::Command::PCF and MQSeries::Command::MQSC until
either one is actually used. Under most circumstances, this will save
a substantial amount of memory. Apache mod_perl users may want to
pre-load the relevant sub-class as part of their startup script.
=head2 Support for ClientConn options with MQCONNX
Hirosi Taguti noted that the MQCONNX call did not properly support
client-connection options. After he persisted in his bug reports for
a year, we finally fixed it - which required adding some XS code.
Note that the syntax for the ClientConn options may be different than
expected, as the MQCNO 'versions' and 'Options' flags must also be
accomodated:
$HConn = MQCONNX($QmgrName,
{ 'ClientConn' => { 'ChannelName' => 'FOO',
'TransportType' => 'TCP',
'ConnectionName' => "hostname(1414)",
},
},
$CompCode,
$Reason);
The C<MQSeries::QueueManager> class now uses MQCONNX and supports an
optional C<ClientConn> parameter to specify these options.
=head2 Support MQ 5.2 CSD03 and CSD04
Various people noted that MQSeries 5.2 CSD03 and CSD04 caused a number
of tests to break. This is because the various header files now
provide two different values for various constants, depending on
whether you compile in 32-bit mode or 64-bit mode. As we are not
running a full C pre-processor, that broke the constant parsing.
We now support these changed header files, though we do not yet
support the 64-bit client mode on Solaris (patches are welcome).
=head1 Changes for 1.17
=head2 Parameter order for PCF commands
Jim Hildebrand at MQ Software tried to use the MQSeries::Command suite
on Windows 2000 and discovered that the order in which PCF command
options are specified was dependent on the platform hash key ordering,
even though the PCF command server requires a specific ordering for
some keys. The perl hash key ordering happened to work on Solaris,
but broke on Windows 2000 (and possibly other platforms).
=head2 Final message for mainframe MQSC commands
Joseph Sacco at Starwood Hotels reported that the MQSeries::Command
suite, when run against a mainframe using MQSC commands, gave annoying
errors messages because the terminating response line on his mainframe
queue manager has a different format from ours.
We now accept both formats. If you run MQSeries::Command against a
mainframe and get error messages like:
Unrecognized MQSC buffer: /T2 CSQMDRTS ' DISPLAY QUEUE' NORMAL COMPLETION
then please get in touch and send us the error message.
=head2 Invalid handling of zero-length messages and zero-length PCF strings
Peter Giorgilli reported that we had a bug in the XS code that caused
us to return garbage data when reading zero-length messages. It turns
out a similar issue caused zero-length PCF strings to be misread for
responses from little-endian queue managers (e.g. Linux/ia32 and
Windows). These zero-length string bugs have been corrected
throughout all the XS code.
=head2 Rename NoAutoConnect flag for MQSeries::QueueManager constructor
The NoAutoConnect flag for the MQSeries::QueueManager constructor has
been renamed to AutoConnect (with, obviously, reverse meaning of the
option values). The default behavior remains the same and the next
few releases will support the old flag for backwards compatibility.
=head2 Rename NoAutoOpen flag for MQSeries::Queue constructor
The NoAutoOpen flag for the MQSeries::Queue constructor has been
renamed to AutoOpen (with, obviously, reverse meaning of the option
values). The default behavior remains the same and the next few
releases will support the old flag for backwards compatibility.
=head2 Add QueueManager method to MQSeries::Queue
In retrospect, it was probably a mistake to add Commit() and Backout()
methods to the MQSeries::Queue class and have them delegate these
calls to the queue manager object. Some developers were confused by
this and thought the scope of transactions was per-queue.
However, it is valid to create an MQSeries::Queue object without
creating an MQSeries::QueueManager object first, and Commit() and
Backout() have to be called on something - so it seemed like a
reasonable thing to do.
A new method for MQSeries::Queue, QueueManager(), can be used to
extract the queue manager object from a queue. The documentation has
been updated to reflect that Commit() and Backout() should be called
on the queue manager object, not on the queue. The queue-level
Commit() and Backout() methods will be dropped in a future release.
=head1 Changes for 1.16
=head2 MQSeries::Config::ChannelTable
The SYSTEM.DEF.CLNTCONN definition must be present, or the client can
get upset in certain error conditions, so the code now forces this to
the front of the list, even if you don't specify it.
The physical order of the entries, and the order in which the linked
list pointers binds them together, now patches exactly the same
pattern as IBM uses to generate the file on a queue manager. It is
very possible that noone at Hursley will be able to tell one of my
files from one of theirs. ;-)
And that's a challenge....
=head2 MQSeries::Queue->Set was horrible broken
This was one of those 'how did this ever work?' problems. The core