五MQ其他 MQI 主题Word格式文档下载.docx

上传人:b****5 文档编号:18315113 上传时间:2022-12-15 格式:DOCX 页数:39 大小:922.18KB
下载 相关 举报
五MQ其他 MQI 主题Word格式文档下载.docx_第1页
第1页 / 共39页
五MQ其他 MQI 主题Word格式文档下载.docx_第2页
第2页 / 共39页
五MQ其他 MQI 主题Word格式文档下载.docx_第3页
第3页 / 共39页
五MQ其他 MQI 主题Word格式文档下载.docx_第4页
第4页 / 共39页
五MQ其他 MQI 主题Word格式文档下载.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

五MQ其他 MQI 主题Word格式文档下载.docx

《五MQ其他 MQI 主题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《五MQ其他 MQI 主题Word格式文档下载.docx(39页珍藏版)》请在冰豆网上搜索。

五MQ其他 MQI 主题Word格式文档下载.docx

分发列表

先决条件

本教程是为具有应用程序和解决方案设计和实现方面的中级经验的开发人员和架构师编写的。

它假设您具有以下几方面中级知识和技能:

事务管理和数据库产品

系统管理

基本编程概念

数据通信和网络

信息技术安全概念

系统要求

本教程中的示例使用WebSphereMQV6.0forWindows®

和Rational®

ApplicationDeveloperV6.0forWindows开发。

本教程中使用的产品的系统要求可通过以下链接找到:

WebSphereMQ

RationalApplicationDeveloper

[本帖最后由阳春三月于2008-7-718:

09编辑]

搜索更多相关主题的帖子:

SolutionDesignerMQIWebSphere考试SolutionDesignerMQIWebSphere考试

查看详细资料

TOP

阳春三月

版主

帖子141积分1311金钱1000W币注册时间2008-7-7个人空间发短消息加为好友当前离线2#大中小发表于2008-7-718:

05只看该作者

WebSphere入门开窍班第6期:

剪不断理还乱的Portal问题汇总|谁是未来存储架构师?

成就下一代信息架构|《WebSphere中国》杂志免费领取

MQINQ和MQSET

概述

MQINQ谓词允许您查询任何队列、进程、队列管理器或名称列表的所有属性从程序中,您可以使用此调用来发现诸如队列的最大消息长度、进程所指向的应用程序、队列管理器的死信队列或名称列表的属性列表等内容。

MQSET谓词允许您更改属性,但是只能更改队列的属性。

您能够设置的属性主要与触发相关联。

MQINQ和MQSET调用都使用选择器数组来标识您希望查询或设置的那些属性。

您能够处理的每个属性有一个对应的选择器。

选择器名称具有前缀,由属性的性质确定:

[attach]805[/attach]

在使用MQINQ或MQSET调用前,必须将应用程序连接到队列管理器,并且必须使用MQOPEN调用来打开对象以便设置或查询属性。

MQINQ

MQINQ调用可用于了解WebSphereMQ对象的属性设置。

这包括队列、队列管理器、进程和名称列表。

该调用返回一个整数数组和一组字符串,其中包含所请求的属性。

在发出MQINQ调用前,需要首先打开对象以便查询。

MQINQ调用的语法如下:

复制内容到剪贴板代码:

MQINQ(Hconn,Hobj,SelectorCount,Selectors,IntAttrCount,IntAttrs,

CharAttrLength,CharAttrs,CompCode,Reason)

MQINQ(以及MQSET)所需的参数比任何其他MQI调用的参数都多。

其他调用上的常用参数包括作为前两个参数的连接句柄(Hconn)和对象句柄(Hobj)。

与所有MQI调用一样,最后两个参数是完成代码(CompCode)和原因代码(Reason)。

通过将其他参数划分为组,理解它们是相当容易的:

SelectorCount和Selectors

IntAttrCount和IntAttrs

CharAttrLength和CharAttrs

SelectorCountMQINQ中包括的属性总数。

它不过就是您所查询的属性数量计数。

Selectors是那些属性的数组(或列表)。

每个属性都分配了一个符号名称,可以使用它来代替分配给该属性的数值。

WebSphereMQApplicationProgrammingReference(请参见参考资料)中的MQINQ讨论中按对象列出了所有属性。

IntAttrCount表示为整数的选择器总数。

这其中包括诸如MQIA_CURRENT_Q_DEPTH、MQIA_Q_TYPE或MQIA_MAX_Q_DEPTH等选择器。

IntAttrs是一个数组(或列表),将用于返回所请求的整数属性。

CharAttrLength已请求的所有字符属性的总长度。

CharAttrs是一个缓冲区区域的名称,所有请求的字符属性将作为一个长字符串在该缓冲区中返回,直到该字符串达到CharAttrLength所指定的长度。

设置字符属性要比设置整数属性需要更多的工作。

如果需要字符属性MQCA_Q_NAME和MQCA_Q_DESC,则将这两个属性的长度(分别为48和64个字符)加起来设置CharAttrLength中的值(112)。

不必知道这其中每个字段的长度,因为长度也具有符号名称。

在刚才所举的例子中,CharAttrLength的值可通过将MQ_Q_NAME_LENGTH和MQ_Q_DESC_LENGTH相加来获得。

当然,您必须确保拥有能够容纳预期会返回的最长字符串的缓冲区。

响应将确切按照请求的顺序返回。

假设Selectors为:

MQIA_CURRENT_DEPTH

MQCA_Q_NAME

MQIA_MAX_Q_DEPTH

MQCA_Q_DESC

为字符属性设置了一个至少112个字符的缓冲区,为整数属性设置了一个数组。

程序在IntAttrCount中提供值2,在CharAttrLength中提供值112。

在从调用返回时,整数数组中第一个位置中的值将是当前深度(MQIA_CURRENT_Q_DEPTH),随后跟着是最大深度(MQIA_MAX_Q_DEPTH)。

字符串缓冲区将在前48个字符中包含队列名称(MQCA_Q_NAME),随后紧跟着是64个字符的队列描述(MQCA_Q_DESC)。

程序将需要把该字符串划分为各个部分。

MQINQ伪代码

清单1显示了MQINQ调用的伪代码。

为简化代码和集中于MQINQ,常规事务调用已省去了。

清单1.MQINQ示例

DEFINECONN_HANDLEASMQHCONNDEFINEOBJ_HANDLEASMQHOBJDEFINECOMP_CODEASMQLONGDEFINEREASON_CODEASMQLONGDEFINESELECTORSASARRAY5MQLONGDEFINESELECTOR_COUNTASMQLONGDEFINEINT_COUNTASMQLONGDEFINEINTSASARRAY3MQLONGDEFINECHAR_COUNTASMQLONGDEFINECHARSASCHAR2000CALLMQCONN(....)CALLMQOPEN(....)SELECTOR_COUNT=4SELECTORS

(1)=MQCA_BACKOUT_REQ_Q_NAMESELECTORS

(2)=MQIA_BACKOUT_THRESHOLDSELECTORS(3)=MQCA_CREATION_DATESELECTORS(4)=MQIA_INHIBIT_GETINT_COUNT=2CHAR_COUNT=MQ_Q_NAME_LENGTH+MQ_CREATION_DATE_LENGTHMQINQ(CONN_HANDLE,OBJ_HANDLE,SELECTOR_COUNT,SELECTORS,INT_COUNT,INTS,CHAR_COUNT,CHARS,COMP_CODE,REASON_CODE)

SELECTORS被定义为一个具有5个条目的数组,SELECTOR_COUNT是一个4字节的字段,其中将包含SELECTORS的数量。

INT_COUNT将包含属于整数的SELECTORS数量,INTS是将返回整数值的数组。

名为CHAR_COUNT的字段将包含要返回的所有字符属性的总长度,CHARS是缓冲区,其中将返回由所有那些字符属性构成的字符串。

假设MQOPEN包括MQOO_INQUIRE选项。

此MQINQ将请求四个选择器。

四个所需属性放在SELECTOR数组中。

INT_COUNT设置为2,字符属性长度加起来确定CHAR_COUNT。

最后是执行该MQINQ调用。

如果调用成功,应用程序就可以从INTS和CHARS检索所请求的信息。

MQSET

MQSET调用的语法如下:

MQSET(Hconn,Hobj,SelectorCount,Selectors,IntAttrCount,IntAttrs,CharAttrLength,

CharAttrs,CompCode,Reason)

可以看到,参数在类型和顺序方面与MQINQ完全相同。

不同之处在于某些数据的流向。

MQINQ上的输出字段(IntAttrs和CharAttrs)成了MQSET上的输入字段。

一个更重要的区别在于,除了队列以外,不允许对任何其他对象执行MQSET。

而且,只能更改属性的一个很小子集。

指示是否允许PUT的属性(MQIA_INHIBIT_PUT)对所有队列类型都是可设置的。

只能对本地和别名队列设置MQIA_GET_INHIBITED属性。

还允许对本地队列设置与触发关联的以下属性:

MQCA_TRIGGER_DATA

MQIA_TRIGGER_CONTROL

MQIA_TRIGGER_DEPTH

MQIA_TRIGGER_MSG_PRIORITY

MQIA_TRIGGER_TYPE

还允许对那些支持分发列表的平台设置MQIA_DIST_LISTS。

队列必须使用MQOO_SET选项来打开。

如果未能设置任何属性(也许是由于所请求的属性之一不允许MQSET),则不会设置任何一个请求的属性,并且调用会失败。

如果调用成功,则更改会立即生效。

MQSET伪代码

清单2显示了MQSET调用的伪代码。

为简化代码和集中于MQSET,常规事务调用已省去了。

清单2.MQSET示例

DEFINECONN_HANDLEASMQHCONNDEFINEOBJ_HANDLEASMQHOBJDEFINECOMP_CODEASMQLONGDEFINEREASON_CODEASMQLONGDEFINESELECTORSASARRAY5MQLONGDEFINESELECTOR_COUNTASMQLONGDEFINEINT_COUNTASMQLONGDEFINEINTSASARRAY3MQLONGDEFINECHAR_COUNTASMQLONGDEFINECHARSASCHAR2000CALLMQCONN(....)CALLMQOPEN(....)SELECTOR_COUNT=2SELECTORS

(1)=MQIA_TRIGGER_TYPESELECTORS

(2)=MQIA_TRIGGER_DEPTHINTS

(1)=MQTT_DEPTHINTS

(2)=10INT_COUNT=2CHAR_COUNT=0MQINQ(CONN_HANDLE,OBJ_HANDLE,SELECTOR_COUNT,SELECTORS,INT_COUNT,INTS,CHAR_COUNT,CHARS,COMP_CODE,REASON_CODE)

定义各个字段的代码与MQINQ完全相同。

该调用旨在更改队列的触发器类型,以允许使用关于深度(MQIA_TRIGGER_TYPE)的触发器。

既然关于深度的触发暗示的不是1(即MQTT_FIRST),因此必须在队列的MQIA_TRIGGER_DEPTH属性中指定导致触发所需的消息数量(在此例中为10)。

在所设置的选择器中,两个都是整数,因此将INT_COUNT设置为2,将CHAR_COUNT设置为0。

最后是使用已设置的参数来发出MQSET调用。

13编辑]

在这里,您可以IBM软件产品下载、Demo下载、试用版下载、红皮书下载、白皮书下载

帖子141积分1311金钱1000W币注册时间2008-7-7个人空间发短消息加为好友当前离线3#大中小发表于2008-7-718:

06只看该作者

处理队列属性示例代码

在本部分,您将查看并运行一个查询和设置队列属性的示例代码。

下载示例代码

将包含示例代码和配置文件的.zip文件(samples.zip)samples.zip(12.51KB)samples.zip(12.51KB)

下载次数:

2

2008-8-2716:

04下载到您的系统上。

将该文件的内容提取到系统上的某个文件夹中。

提取之后,您将拥有三个文件:

MQAdditional.zip、setup04.txt和setup05.txt。

将两个设置文件复制到您的用户目录,即打开命令提示符时的缺省目录。

通常,该目录为\DocumentsandSettings\Administratoror\DocumentsandSettings\<

your_user_name>

导入示例代码

从“开始”菜单中启动ApplicationDeveloper。

在提示选择工作区时接受缺省工作区,然后单击OK。

从主菜单中,单击Window>

OpenPerspective>

Java。

从主菜单中选择File>

Import...。

选择ProjectInterchange,然后单击Next。

单击Fromzipfile:

字段旁边的Browse...,导航到您解压缩下载的示例代码的文件夹,选择MQAdditional.zip。

单击Open。

选择SelectAll,然后单击Finish。

在PackageExplorer视图中展开MQAdditional,再展开com.ibm.cert996以显示代码示例类。

双击MQInq.java。

双击MQSet.java。

检查示例代码

实际上您将运行四个程序来检查MQINQ和MQSET功能。

这里将讨论其中两个,即MQInq.java和MQSet.java。

另外两个程序,即PutToRequest.java和MQUnset.java,是辅助本练习的实用程序,因此这里就不再讨论它们了。

然而,建议您大致看一下它们,并了解它们是如何工作的。

MQInq.java

在对MQInq.java的讨论中,我们将分成很小的部分来逐一查看该代码,并解释每个部分所做的工作。

让我们首先看一下类声明,以及已声明的一些常量和main()方法,如清单3所示。

清单3.MQInq.java类声明

publicclassMQInq{privatestaticfinalStringqManager="

QMC1"

;

privatestaticfinalStringqName="

CERT.REQUEST"

publicstaticvoidmain(Stringargs[]){newMQInq().run();

}

此代码定义了两个常量字符串来指定队列管理器和队列。

main()方法不过就是创建该类的实例,并调用其run()方法。

run()方法是该类中唯一的其他方法,我们将在此检查过程的其余部分研究它。

清单4显示了run()方法的前几行。

Listing4.run()方法的开头

publicvoidrun(){System.out.println("

StartMQInq"

);

try{MQQueueManagerqMgr=newMQQueueManager(qManager);

intopenOptions=MQC.MQOO_INQUIRE+MQC.MQOO_FAIL_IF_QUIESCING;

MQQueuequeue=qMgr.accessQueue(qName,openOptions);

System.out.println("

Inquiringonattributesofqueue:

"

+queue.name);

此代码首先向控制台打印一条指示MQInq已启动的消息,建立到队列管理器的连接,并打开队列以便查询。

然后打印一条包含队列名称的消息。

清单5显示了如何“查询”和显示队列的队列类型。

清单5.查询队列类型

intqueueTypeValue=queue.getQueueType();

StringqueueTypeName="

Unknown"

switch(queueTypeValue){caseMQC.MQQT_ALIAS:

queueTypeName="

Alias"

break;

caseMQC.MQQT_LOCAL:

Local"

caseMQC.MQQT_MODEL:

Model"

caseMQC.MQQT_REMOTE:

Remote"

default:

}System.out.println("

Queuetype:

+queueTypeName);

如果您认为清单5看起来与MQINQ不像,您是对的。

在WebSphereMQbaseJava类中,有多个队列特性(attribute)被定义为队列对象的属性(property)。

这不过就是调用一个get<

AttributeName>

()方法来检索那些特性的问题。

队列类型是属于队列对象属性的那些特性之一。

还有其他几个队列属性,如清单6所示。

清单6.其他队列属性

intmaximumDepth=queue.getMaximumDepth();

System.out.println("

Maximumdepth:

+maximumDepth);

intcurrentDepth=queue.getCurrentDepth();

Currentdepth:

+currentDepth);

intmaximumMsgLength=queue.getMaximumMessageLength();

Maximummessagelength:

+maximumMsgLength);

intinhibitGetValue=queue.getInhibitGet();

StringinhibitGetName="

switch(inhibitGetValue){

caseMQC.MQQA_GET_INHIBITED:

inhibitGetName="

Inhibited"

caseMQC.MQQA_GET_ALLOWED:

Allowed"

default:

}

Get:

+inhibitGetName);

intinhibitPutValue=queue.getInhibitGet();

StringinhibitPutName="

switch(inhibitPutValue){

caseMQC.MQQA_PUT_INHIBITED:

inhibitPutName="

caseMQC.MQQA_PUT_ALLOWED:

ut:

+inhibitPutName);

[本帖最后由艾依然于2008-8-2716:

04编辑]

帖子141积分1311金钱1000W币注册时间2008-7-7个人空间发短消息加为好友当前离线4#大中小发表于2008-7-718:

24只看该作者

可以看到,对于这些属性,检索它们的值要比设置整数和字符计数及数组容易得多。

然而,并非所有队列特性都可用作属性。

对于那些不可用作属性的队列特性,WebSphereMQbaseJava类提供了看起来应该像熟悉

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1