Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » QAnywhere » 编写 QAnywhere 客户端应用程序

 

处理 QAnywhere 异常

QAnywhere C++ API、Java API 和 .NET API 包括一些用来处理异常的特殊对象和属性。

.NET 异常

QAException 类可封装 QAnywhere 客户端应用程序异常。在捕获一个 QAnywhere 异常后,可使用 QAException ErrorCode 和 Message 属性来确定错误代码和错误消息。

请注意,如果在消息监听器委派内抛出一个 QAException,并且该 QAException 未在消息监听器中被捕获,则会将其记录到 QAManager 日志文件中。因为仅记录未捕获的 QAException,因此建议在消息监听器委派内处理所有异常,或由异常监听器委派处理所有异常,以便能够对这些异常进行适当的处理。

有关消息监听器委派和异常监听器委派的详细信息,请参见:

有关日志文件的详细信息,请参见QAnywhere Manager 配置属性

抛出一个 QAException 时,当前事务将被回退。当具有 QATransactionalManager 的消息监听器中发生这种情况时,抛出 QAException 时正在处理的消息会被放回接收队列,以使该消息可被重新接收。可使用消息存储库属性 ias_MaxDeliveryAttempts 来防止发生无限循环。

当属性 ias_MaxDeliveryAttempts 被 QAnywhere 应用程序设置为正整数 n 时,如同在 mgr.SetIntStoreProperty( "ias_MaxDeliveryAttempts", 5 ) 中一样,QAnywhere 客户端将会在将此消息的状态设置为无法接收之前,最多尝试接收这条未确认的消息 n 次。如果未设置属性 ias_MaxDeliveryAttempts 或该属性为负值,则 QAnywhere 客户端尝试接收消息的次数将不受限制。

有关详细信息,请参见:

C++ 异常

对于 C++,QAError 类可封装 QAnywhere 客户端应用程序异常。可使用 QAManagerBase::getLastError() 方法或 QAManagerFactory::getLastError() 方法,来确定与上一个执行方法相关的错误代码。可使用相应的 getLastErrorMessage() 方法来获得错误文本。

有关错误代码的列表及详细信息,请参见QAError 类

有关 getLastError 和 getLastErrorMessage 的详细信息,请参见:

Java 异常

QAException 类可封装 QAnywhere 客户端应用程序异常。在捕获一个 QAnywhere 异常后,可使用 QAException ErrorCode 和 Message 属性来确定错误代码和错误消息。

如果在消息监听器内抛出一个 QAException,并且该 QAException 未在消息监听器中被捕获,则会将其记录到 QAManager 日志文件中。因为仅记录未捕获的 QAException,因此建议在消息监听器内处理所有异常,或由异常监听器处理所有异常,以便能够对这些异常进行适当的处理。

有关消息监听器和异常监听器的详细信息,请参见:

有关日志文件的详细信息,请参见QAnywhere Manager 配置属性

抛出一个 QAException 时,当前事务将被回退。当具有 QATransactionalManager 的消息监听器中发生这种情况时,抛出 QAException 时正在处理的消息会被放回接收队列,以使该消息可被重新接收。可使用消息存储库属性 ias_MaxDeliveryAttempts 来防止发生无限循环。

当属性 ias_MaxDeliveryAttempts 被 QAnywhere 应用程序设置为正整数 n 时,如同在 mgr.SetIntStoreProperty( "ias_MaxDeliveryAttempts", 5 ) 中一样,QAnywhere 客户端将会在将此消息的状态设置为无法接收之前,最多尝试接收这条未确认的消息 n 次。如果未设置属性 ias_MaxDeliveryAttempts 或该属性为负值,则 QAnywhere 客户端尝试接收消息的次数将不受限制。

有关详细信息,请参见:

错误代码

下表列出 QAnywhere 错误代码值:

错误值

说明

0

无错误。

1000

初始化错误。

1001

终止错误。

1002

无法访问客户端属性文件。

1003

没有目标。

1004

未实现函数。

1005

不能写入到消息,因为它处于只读模式。

1006

在客户端消息存储库中存储消息时出错。

1007

从客户端消息存储库中检索消息时出错。

1008

初始化后台线程时出错。

1009

打开消息存储库连接时出错。

1010

客户端属性文件中有一个无效的属性。

1011

打开日志文件时出错。

1012

遇到了意外的消息结尾。

1013

消息存储库过大,设备上可用磁盘空间不足。

1014

还没有为进行消息传递而初始化消息存储库。

1015

取得队列深度时出错。

1016

在未设置消息存储库 ID 时,无法使用 QAManagerBase.getQueueDepth。

1017

当过滤器为 ALL 时,无法在给定目标上使用 QAManagerBase.getQueueDepth。

1018

取消消息时出错。

1019

取消消息时出错。不能取消已发送的消息。

1020

确认消息时出错。

1021

QAManager 没有打开。

1022

QAManager 已打开。

1023

给定选择程序存在一个语法错误。

1024

时间戳在可接受范围以外。

1025

无法打开 QAManager,因为并发服务器请求的最大数不够大(参见数据库-gn 服务器选项)。

1026

从消息存储库中检索属性时出错。

1027

将属性存储到消息存储库中时出错。