目录 上一页 下一页 索引

第 2 章

事件服务 API


本章介绍了 Sun Java System Content Delivery Server 事件服务 API。事件服务 API 的外部接口是

事件服务会将事件队列传出的消息传播给已订阅了事件服务所发布的主题的任何感兴趣的事件监听器。事件服务还将事件数据存储在 Content Delivery Server 数据库中。可以使用 SQL*Net 客户机或 JMS 客户机应用程序方法。两种方法都可以近乎实时地访问相同的信息。

图 1 简单说明了通用系统和组件与事件服务之间进行交互的情况,列出了通过各种系统交互传递信息的方式:

图 1-事件服务概述

此图以文本形式进行说明。

Content Delivery Server 管理器将适当的消息发布到 Java 消息服务 (JMS) 队列。这些消息由事件服务进行检索和处理。Content Delivery Server 中的任何组件都可以将事件发布到事件服务。由于事件发布是异步操作,所以一旦发出消息,发布消息的组件将继续操作。

事件服务在 Content Delivery Server 环境中作为单独的进程运行。事件服务用于:

事件服务 API 的当前实现使用了 JMS 点对点 (PTP) 消息传送域,在此域中各种发布程序将消息发布到单个队列,并由事件服务 JMS 客户机应用程序的某个实例对这些消息进行处理。

事件被事件服务成功处理后,将被放置到用于存放消息内容的数据库架构区域。有关存储这些消息的数据模型信息,请参见“事件数据库”

2.1 SQL*Net 客户机应用程序

数据驻留在标准关系数据库中,开发者可以通过一组视图以任何能够查询 Oracle 数据库的编程语言编写应用程序。例如,可以使用 Java 语言、C++ 或 Visual Basic 编写这些应用程序。

2.1.1 事件数据库

本节所介绍的表格包含事件经事件服务处理后产生的数据。作为集成者,您具有访问这些表格数据的权限。使用用户 prefix_es_app 可以连接到 Oracle 数据库,其中 prefix 是为用于创建数据库的数据库配置文件中 Vending 元素下的 Prefix 元素指定的值。使用为数据库配置文件中的 Vending 元素下的 Password 元素指定的密码。有关数据库配置文件的信息,请参见《Sun Java System Content Delivery Server 安装指南》。

2.1.1.1 CDS_EVENT 表

此表包含事件服务成功处理的每个事件的记录。处理事件时,此表将实时更新。

表 2-CDS_EVENT 表
列名
数据类型
说明
CDS_EVENT_ID
NUMBER(18)
用作记录 ID 的系统生成的唯一数字。此字段是表的主关键字。
CDS_EVENT_DATE
DATE
生成事件消息的时间标记。
CDS_EVENT_TYPE_ID
NUMBER(18)
CDS_EVENT_TYPE 表的外关键字。
EVENT_SOURCE_ID
NUMBER(18)
EVENT_SOURCE_TYPE 表的外关键字。
SVR_INSTANCE_ID
NUMBER(18)
系统数据。
SVR_SESSION_ID
VARCHAR2(128)
系统数据。
SUB_SYSTEM_ID
VARCHAR2(80)
与会话及事件关联的 MSISDN。如果 MSISDN 未知,则该列为空。
CDS_USER_ID
NUMBER(18)
与会话及事件关联的 Content Delivery Server 用户 ID。如果用户未登录,则此列可能为空。
VENDOR_ID
NUMBER(18)
供应商表的外关键字。
CONTENT_ID
NUMBER(18)
内容表的外关键字。
RAW_EVENT_MESSAGE
CLOB
原始事件消息 XML。
CREATE_DATE
DATE
系统数据。
MOD_DATE
DATE
系统数据。
LOCK_VERSION
NUMBER(1)
系统数据。

2.1.1.2 CDS_EVENT_TYPE 表

此表包含事件类型定义。在第 2.3 节“事件和事件数据”中列出了这些定义。它是静态的表。

表 3-CDS_EVENT_TYPE 表
列名
数据类型
说明和建议
CDS_EVENT_TYPE_ID
NUMBER(18)
用作记录 ID 的系统生成的唯一数字。此字段是表的主关键字。
CDS_EVENT_GROUP_ID
NUMBER(18)
EVENT_GROUP 表的外关键字。用于对事件类型进行分组。
CDS_EVENT_TYPE_NAME
VARCHAR2(80)
可读名称。
DESCRIPTION
VARCHAR2(80)
特定事件类型的说明。
LONG_DESCRIPTION
VARCHAR2(255)
事件类型的详细说明(如果需要)。
IS_ACTIVE
NUMBER(1)
表明是否为活动事件类型的标志。
CREATE_DATE
DATE
系统数据。
MOD_DATE
DATE
系统数据。
LOCK_VERSION
NUMBER(1)
系统数据。

2.1.1.3 CDS_EVENT_GROUP 表

此表保留了系统中所有事件组的定义,为静态形式。所有事件都属于名为 cds_group 的事件组。

表 4-CDS_EVENT_GROUP 表
列名
数据类型
说明和建议
CDS_EVENT_GROUP_ID
NUMBER(18)
用作记录 ID 的系统生成的唯一数字。此字段是表的主关键字。
CDS_EVENT_GROUP_NAME
VARCHAR2(255)
可读名称。
DESCRIPTION
VARCHAR2(1024)
特定事件组的说明。
LONG_DESCRIPTION
VARCHAR2(2048)
事件组的详细说明(如果需要)。
PARENT_GROUP_ID
NUMBER(18)
允许使用组分层结构。
IS_ACTIVE
NUMBER(1)
表明是否为活动事件组的标志。
CREATE_DATE
DATE
系统数据。
MOD_DATE
DATE
系统数据。
LOCK_VERSION
NUMBER(1)
系统数据。

2.1.1.4 EVENT_SOURCE_TYPE_ID 表

此表包含事件源类型定义。它是静态的表。

表 5-EVENT_SOURCE_TYPE_ID 表
列名
数据类型
说明和建议
EVENT_SOURCE_TYPE_ID
NUMBER(18)
用作记录 ID 的系统生成的唯一数字。此字段是表的主关键字。
EVENT_SOURCE_TITLE
VARCHAR2(255)
可读名称。
CREATE_DATE
DATE
系统数据。
MOD_DATE
DATE
系统数据。
LOCK_VERSION
NUMBER(1)
系统数据。

2.1.2 报告工具

可以使用任何连接到 Oracle 数据库的数据库报告工具为数据生成各种类型的报告。常用的一些报告工具包括 Crystal Reports、Microsoft Access、Oracle Reports 或 ReportSmith。

2.2 JMS 客户机应用程序

除了事件数据的基于 SQL 的接口,还可以实现通过 JMS 主题与事件服务直接接口的 JMS 客户机应用程序。虽然此方法需要进行较为复杂的开发,但是可以提高处理 Content Delivery Server 生成的事件时的灵活性。

要成功利用事件服务(使用此 API)集成,应该熟悉 JMS 客户机应用程序的编写,并且理解 Java 2 Platform Enterprise Edition(J2EETM 平台)的 JMS 规范中介绍的发布/订阅消息传送域。任意数量的 JMS 客户机应用程序都可以使用发布/订阅消息传送模型来订阅由事件服务发布的消息。

2.3 事件和事件数据

本节介绍了有关由事件服务提供的事件和事件数据的信息。SQL*Net 和 JMS 客户机应用程序都使用此信息过滤和处理事件。

下表介绍了由事件服务生成的事件。

表 6-事件
事件
说明
content_changed
Catalog Manager 管理员已对该内容进行了更改。
content_purchased
订户已购买了内容项。
content_refunded
已对内容项发放了退款。
download_deleted
已从设备中删除了下载的内容。
download_error
设备已指明下载内容时出错。
download_initiated
订户已开始下载内容。
download_install_notified
设备已确认下载成功。
external_content_updated
外部托管内容已更新。
gift_cancelled
礼品订阅被取消。
gift_download_confirm
接收人已下载了礼品。
gift_download_deleted
接收人下载的礼品已被删除。
gift_download_error
下载礼品时出错。
gift_download_initiated
礼品接收人已开始下载礼品。
gift_expired
礼品已过期。
gift_purchased
已作为礼品购买了内容项。
gift_subscription_purchased
已作为礼品购买了内容项订阅。
gift_usage_purchased
已作为礼品购买了对内容项的多次使用权。
mms_push_sent
已发送 MMS 消息。
pricing_changed
一个或多个内容项的价格已使用“类别价格编辑”功能进行了更改。
sms_push_sent
已发送 SMS 消息。
sms_received
已收到 SMS 消息。
smtp_push_sent
已发送 SMTP 消息。
status_changed_to_deleted
内容项的状态已更改为“已删除”。
status_changed_to_denied
内容项的状态已更改为“已拒绝”。
status_changed_to_new
内容项的状态已更改为“新建”。
status_changed_to_pending
内容项的状态已更改为“待定”。
status_changed_to_published
内容项的状态已更改为“已发布”。
status_changed_to_testing
内容项的状态已更改为“正在测试”。
submission_failed
提交的内容遭到 Content Delivery Server 拒绝。
submission_successful
提交的内容已被 Content Delivery Server 接受。
subscriber_registered
订户已成功注册。
subscription_cancelled
对内容项的订阅已被取消。
subscription_purchased
对内容项的订阅已被购买。
usage_purchased
已购买了内容项的多次使用权。
validation_passed
提交的内容已由提交验证器工作流成功处理。
validation_failed
提交的内容在提交验证器工作流的某个步骤中失败。
wap_push_sent
已发送 WAP 消息。

下表列出了可以包含在事件中的信息。每个事件仅包含与该事件相关的参数。

表 7-事件数据
参数
数据类型
说明
billing-ticket
字符串
该事务的记帐证明书。
campaign_coupon
字符串
活动的礼券代码。
campaign_id
字符串
标识活动的字符串。
catalog-res-id
字符串
标识内容版的字符串。
content_class_id
字符串
标识内容项的字符串。
content_description
字符串
内容的说明。
content-id
字符串
用于标识所购买内容的字符串。此值与 catalog-res-id 相同。
content_name
字符串
内容名称。
current-status
字符串
事务的当前状态。
date
日期
事务的发生日期。
developer-content-id
字符串
开发者用于标识内容的字符串。
developer-id
字符串
用于标识内容开发者的字符串。
developer_name
字符串
提交内容的开发者的姓名。
download-confirm
布尔型
用于指明成功下载后是否需要确认的标志。
download-count
整型
根据支付价格确定的内容下载次数。
download-current-count
整型
订户已下载此内容的次数(包括此次)。
download-expiration
布尔型
用于表明下载时段是否已过期的标志。
download-period
整型
允许下载内容而无需向订户收取额外费用的时段。
download-price
浮点
内容的购买价格。
download-purchase
布尔型
用于表示购买请求的标志。
download-recurring
布尔型
用于表明是否应向订户收取每次下载费用的标志。
event-log
字符串
事件日志名称。
event-msg
字符串
随事件一起发出的消息。
event-source-type-id
整型
用于标识事件源的编号。
event-type
整型
发生的事件的数字表示。
event-type-id
字符串
用于标识已发生事件的类型的字符串。
external_content_id
字符串
用于标识记帐系统内容的字符串。
external_group_id
字符串
用于标识内容所属的组的字符串。
gift_message
字符串
礼品中包含的消息。
gifted_current_downloads
整型
接收订户已下载此礼品的次数(包括此次)。
gifted_current_subscriptions
整型
接收订户使用的订阅时段数(包括此时段)。
gift_download_date
日期
接收订户第一次下载礼品的日期。
gift_expiration_date
日期
接收订户认领礼品的截止日期。
gift_purchase_date
日期
送礼人购买礼品的日期。
gifted_downloads
整型
礼品中包含的下载次数。
gifted_subscriptions
整型
礼品中包含的订阅时段数。
is_on_device
布尔型
用于表明内容是否已存在于设备中的标志。
is-prepay
布尔型
用于表明订户是否已为内容预付费的标志。
locale
字符串
订户的语言环境。
MSISDN
字符串
订户设备的 MSISDN。
push-msgtext
字符串
发送到订户设备的消息或电子邮件。
recipient_locale_code
字符串
内容的预定接收订户的语言环境。
recipient_login_id
字符串
内容的预定接收订户的登录 ID。
recipient_mobile_id
字符串
内容的预定接收订户的移动 ID。
recipient_unique_device_id
字符串
预定接收订户的唯一设备 ID。
server-id
字符串
用于标识 Vending Manager 的字符串。
session-id
字符串
用于标识订户会话的字符串。
subscription-expiration
日期
订阅时段截止日期。
subscription-frequency
字符串
收取订阅费用的时间间隔。
subscription-recurring
布尔型
用于表明当前订阅时段结束后是否自动为下个时段向订户收费的标志。
subscription-price
浮点
订阅时段的价格。
timestamp
时间戳
事务的发生时间。
unique-device-id
字符串
用于唯一标识所用设备的字符串。
usage-count
整型
根据为 usage-price 指定的价格而确定的使用次数。
usage-price
浮点
根据为 usage-count 指定的使用次数而确定的收费。
user-id
字符串
用于标识启动事务的用户的字符串。
username
字符串
订户的登录名。
vending-res-id
字符串
Vending Manager 用于标识内容的字符串。

2.4 CDSAbstractBillingSubscriber 类

CDSAbstractBillingSubscriber 类是抽象类,为所有订户类的基类。它用于处理所有与 JMS 相关的信息。这样外部开发者便可以集中精力进行自身的商业逻辑开发。

有关本节中未介绍的类或方法的信息,请参见 $CDS_HOME/javadoc/cdsapi/index.html 中的事件服务 API 的 JavadocTM 工具的 HTML 输出。

2.4.1 构造函数

在您实现的构造函数中,调用父级构造函数并提供表 8 中所述的参数。执行该实现时,可以对这些参数进行硬编码或传递这些参数。

CDSAbstractBillingSubscriber(java.lang.String clientID, java.lang.String subName, java.lang.String selector, boolean durable, boolean transactional, java.lang.String jndiCtxFactory, java.lang.String connFactory, java.lang.String providerURL, java.lang.String topicName)  

表 8-构造函数参数
参数
说明
clientID
用于标识连接的名称。
subName
用于标识 JMS 主题订阅的名称。
selector
用于确定所监视的事件的过滤器。将此参数设置为 null 可以监视所有事件。要监视特定事件,请参见 javax.jms.Message 的 Javadoc 工具的输出,以获取有关设置此参数的信息。有关事件信息,请参见表 2
durable
表示订户是否为长期订户的标志。长期订户接收订户处于非活动状态时发送的消息。将此参数设置为 true 可以创建长期订户。否则,将其设置为 false
transactional
指明事务性会话是否应用于创建订户的标志。将此参数设置为 true 可以创建事务性会话。否则将其设置为 false
jndiCtxFactory
用于生成 WebLogic 初始上下文的类。如果使用的是 Sun Java System Application Server,则将此参数设置为 null。如果使用的是 WebLogic Server,则将此参数设置为 weblogic.jndi.WLInitialContextFactory
connFactory
Java Naming and Directory InterfaceTM ("JNDI") API 使用的连接工厂的名称。将此参数设置为
cds.messaging.billing.TopicConnectionFactory
providerURL
JNDI API 的服务提供者的 URL。
如果使用的是 Sun Java System Application Server,则将此参数设置为 null
如果使用的是 WebLogic Server,则为jndi.hostjndi.port 属性,将此参数设置为部署配置文件中的值。例如,t3://jndihost.domain.com:80
topicName
JNDI API 使用的 CDSBillingTopic 主题的名称。将此变量设置为 cds.messaging.billingTopic

2.4.2 handleMsg()

此方法用于定义如何处理消息。它由 onMessage 进行调用。

public abstract void handleMsg() 

2.4.3 handleError()

此方法用于定义如何在消息处理过程中处理错误。它由 catch 块中的 onMessage 调用。

public abstract void handleError() 

2.5 使用事件服务 API

本节介绍如何将事件服务 API 用于 SQL*Net 和 Java 中。

2.5.1 开发 SQL*Net 客户机应用程序

应用程序必须获得指向数据库的 SQL*Net 连接,以便应用程序直接查询 Oracle 数据库。具体过程取决于数据库服务器和客户机应用程序的本地环境。

使用用户 prefix_es_app 可以连接到 Oracle 数据库,其中 prefix 是为用于创建数据库的数据库配置文件中 Vending 元素下的 Prefix 元素指定的值。使用为数据库配置文件中的 Vending 元素下的 Password 元素指定的密码。有关数据库配置文件的信息,请参见《Sun Java System Content Delivery Server 安装指南》。

2.5.2 开发 JMS 客户机应用程序

要编译 JMS 客户机,请在类路径中包含下表中所述的文件:

表 9-编译客户机所需的文件
JAR 文件
位置1
JMS Java 归档 (JAR) 文件
/cds-home/deployment/deployment-name/lib/jms.jar
Content Delivery Server JAR 文件
/cds-home/deployment/deployment-name/lib/cdslib/cdsapi.jar
Foundation JAR 文件
/cds-home/deployment/deployment-name/lib/cdslib/foundation.jar
1cds-home 是 Content Delivery Server 的安装目录。deployment-name 是对部署赋予的名称。

要执行 JMS 客户机:

表 10-执行客户机所需的文件
JAR 文件
位置1
JMS JAR 文件
cds-home/deployment/deployment-name/lib/jms.jar
Content Delivery Server JAR 文件
cds-home/deployment/deployment-name/lib/cdslib/cdsapi.jar
Foundation JAR 文件
cds-home/deployment/deployment-name/lib/cdslib/foundation.jar
事件服务客户机 JAR 文件
cds-home/deployment/deployment-name/lib/cdslib/eventserviceclient.jar
文件系统上下文 JAR 文件(仅当使用 Sun Java System Application Server 时需要)
cds-home/deployment/deployment-name/lib/cdslib/fscontext.jar
Message Queue JAR 文件(仅当使用 Sun Java System Application Server 时需要)
cds-home/deployment/deployment-name/lib/cdslib/imq.jar
WebLogic JAR 文件(仅当使用 WebLogic Server 时需要)
wl-home/lib/weblogic.jar
1cds-home 是 Content Delivery Server 的安装目录。deployment-name 是对部署赋予的名称。

  • 指定以下选项:
  • 以下代码示例展示了一个样例脚本,可用于编译和执行第 2.6 节“示例” 中显示的 CDSAbstractBillingSubscriber 类的样例实现。

    代码示例 1 编译和执行的样例脚本
    #!/bin/bash 
     
    # Set the following properties for your environment 
    CDS_HOME="/usr/local/cdshome" 
    CDS_DEPL_NAME="cds" 
    JAVA_HOME="/usr/j2se" 
     
    # Set the following parameters for CDSBillingSubscriber 
    clientID="CDSBillingSubscriberUniqueClientID" 
    subName="CDSBillingSubscriberUniqueSubscriptionName" 
    selector="null" 
    durable="false" 
    transactional="false" 
     
    # CDSBillingSubscriber Parameter Constants 
    connFactory="cds.messaging.billing.TopicConnectionFactory" 
    topicName="cds.messaging.billingTopic" 
     
    # Sun Java System Application Server Parameters 
    jndiCtxFactory="null" 
    providerURL="null" 
     
    # BEA WebLogic Parameters 
    # Set the providerURL and WL_HOME 
    # For providerURL use the 
    # WebLogic Application Server host and port 
    #jndiCtxFactory="weblogic.jndi.WLInitialContextFactory" 
    #providerURL="t3://jndihost.domain.com:80" 
    #WL_HOME="/usr/local/bea/weblogic700/server" 
     
    # You may select to filter the messages by event. 
    # See the javadoc for javax.jms.Message for more 
    # information on selectors.See the CDS Customization 
    # Guide for a list of possible events. 
    #selector="JMSCorrelationID=download_initiated" 
     
    # Directory Constants 
    DEPL_DIR="${CDS_HOME}/deployment/${CDS_DEPL_NAME}" 
    CONF_DIR="${DEPL_DIR}/conf" 
    LIB_DIR="${DEPL_DIR}/lib" 
    CDSLIB_DIR="${LIB_DIR}/cdslib" 
     
    # Sun Java System Application Server CLASSPATH Constant 
    COMPILE_LCP=".:${LIB_DIR}/jms.jar" 
    COMPILE_LCP="${COMPILE_LCP}:${CDSLIB_DIR}/cdsapi.jar" 
    COMPILE_LCP="${COMPILE_LCP}:${CDSLIB_DIR}/foundation.jar" 
    EXEC_LCP=".:${LIB_DIR}/jms.jar" 
    EXEC_LCP="${EXEC_LCP}:${CDSLIB_DIR}/cdsapi.jar" 
    EXEC_LCP="${EXEC_LCP}:${CDSLIB_DIR}/foundation.jar" 
    EXEC_LCP="${EXEC_LCP}:${CDSLIB_DIR}/eventserviceclient.jar" 
    EXEC_LCP="${EXEC_LCP}:${LIB_DIR}/imq.jar" 
    EXEC_LCP="${EXEC_LCP}:${LIB_DIR}/fscontext.jar" 
     
    # BEA WebLogic CLASSPATH Constant 
    #COMPILE_LCP=".:${LIB_DIR}/jms.jar" 
    #COMPILE_LCP="${COMPILE_LCP}:${CDSLIB_DIR}/cdsapi.jar" 
    #COMPILE_LCP="${COMPILE_LCP}:${CDSLIB_DIR}/foundation.jar" 
    #EXEC_LCP=".:${LIB_DIR}/jms.jar" 
    #EXEC_LCP="${EXEC_LCP}:${CDSLIB_DIR}/cdsapi.jar" 
    #EXEC_LCP="${EXEC_LCP}:${CDSLIB_DIR}/foundation.jar" 
    #EXEC_LCP="${EXEC_LCP}:${CDSLIB_DIR}/eventserviceclient.jar" 
    #EXEC_LCP="${EXEC_LCP}:${WL_HOME}/lib/weblogic.jar" 
     
    # Java Command Line Option Constants 
    CDS_OPTS="-Dcds.home=${CDS_HOME}" 
    CDS_OPTS="${CDS_OPTS} -Dcds.config.file=CDS.properties" 
    CDS_OPTS="${CDS_OPTS} -Dcds.config.dir=${CONF_DIR}" 
     
    # Compile 
    JAVAC_OPTS="-classpath ${COMPILE_LCP}" 
    JAVAC_OPTS="${JAVAC_OPTS} CDSBillingSubscriber.java" 
    $JAVA_HOME/bin/javac ${JAVAC_OPTS} 
     
    # Execute 
    JAVA_OPTS="-cp ${EXEC_LCP} ${CDS_OPTS}" 
    JAVA_OPTS="${JAVA_OPTS} CDSBillingSubscriber" 
    JAVA_OPTS="${JAVA_OPTS} ${clientID}" 
    JAVA_OPTS="${JAVA_OPTS} ${subName}" 
    JAVA_OPTS="${JAVA_OPTS} ${selector}" 
    JAVA_OPTS="${JAVA_OPTS} ${durable}" 
    JAVA_OPTS="${JAVA_OPTS} ${transactional}" 
    JAVA_OPTS="${JAVA_OPTS} ${jndiCtxFactory}" 
    JAVA_OPTS="${JAVA_OPTS} ${connFactory}" 
    JAVA_OPTS="${JAVA_OPTS} ${providerURL}" 
    JAVA_OPTS="${JAVA_OPTS} ${topicName}" 
    $JAVA_HOME/bin/java ${JAVA_OPTS} 
    

    2.6 示例

    以下代码示例是 CDSBillingSubscriber 类的类定义。此类是如何扩展 AbstractBillingSubscriber 类以实现自己的记帐适配器的样例。

    代码示例 2 CDSAbstractBillingSubscriber 样例实现
    import com.sun.content.server.eventservice.subscriber.abs.*; 
    import com.sun.content.server.eventservice.subscriber.util.*; 
    import javax.jms.TextMessage; 
     
    public class CDSBillingSubscriber 
    extends CDSAbstractBillingSubscriber 
    { 
      public CDSBillingSubscriber( 
        String clientID, 
        String subName, 
        String selector, 
        boolean durable, 
        boolean transactional, 
        String jndiCtxFactory, 
        String connFactory, 
        String providerURL, 
        String topicName) 
      throws Exception 
      { 
        super(clientID, subName, selector, durable, transactional, 
          jndiCtxFactory, connFactory, providerURL, topicName); 
      } 
     
      public void handleMsg() 
      throws CDSEventServiceSubscriberException 
      { 
        try 
        { 
          // simply prints the message 
          TextMessage txtMsg = (TextMessage) getMessage(); 
          System.out.println(txtMsg.getText()); 
        } 
        catch (Exception ex) 
        { 
          ex.printStackTrace(); 
        } 
      } 
     
      public void handleError() 
      throws CDSEventServiceSubscriberException {} 
     
      private static void displayUsage() 
      { 
        System.out.println(); 
        System.out.print("Usage :java CDSBillingSubscriber "); 
        System.out.print("clientID subName selector "); 
        System.out.print("durable transactional "); 
        System.out.print("jndiCtxFactory connFactory "); 
        System.out.print("providerURL topicName"); 
        System.out.println(); 
        System.out.println(); 
        System.out.print("For selector, you can specify null or "); 
        System.out.print("JMSCorrelationID=<event>"); 
        System.out.println(); 
        System.out.println(); 
        System.out.println("\t Terminating Program ..."); 
        System.exit(-1); 
      } 
     
      public static void main(String[] args) 
      { 
        String clientID = null; 
        String subName = null; 
        String selector = null; 
        boolean durable = false; 
        boolean transactional = false; 
        String jndiCtxFactory = null; 
        String connFactory = null; 
        String providerURL = null; 
        String topicName = null; 
        if (args.length == 9) 
        { 
          clientID = args[0]; 
          subName = args[1]; 
          selector = args[2]; 
          durable = Boolean.valueOf(args[3]).booleanValue(); 
          transactional = Boolean.valueOf(args[4]).booleanValue(); 
          jndiCtxFactory = args[5]; 
          connFactory = args[6]; 
          providerURL = args[7]; 
          topicName = args[8]; 
        } 
        else 
        { 
          displayUsage(); 
        } 
     
        if (selector == null) 
          selector = null; 
        else if (selector.trim().length() == 0) 
          selector = null; 
        else if (selector.trim().equalsIgnoreCase("null")) 
          selector = null; 
     
     
        CDSBillingSubscriber s = null; 
        try 
        { 
          System.out.println(); 
          System.out.println("Creating subscriber..."); 
          s = new CDSBillingSubscriber(clientID, subName, 
              selector, durable,transactional, jndiCtxFactory, 
              connFactory, providerURL, topicName); 
          System.out.println("Subscriber created."); 
          System.out.println("clientID="+s.getClientID()); 
          System.out.println("subName="+s.getSubName()); 
          System.out.println("selector="+s.getSelector()); 
          System.out.println("durable="+s.isDurable()); 
          System.out.println("transactional="+s.isTransactional()); 
          System.out.println("jndiCtxFactory="+s.getJndiCtxFactory()); 
          System.out.println("connFactory="+s.getConnFactory()); 
          System.out.println("providerURL="+s.getProviderURL()); 
          System.out.println("topicName="+s.getTopicName()); 
     
          System.out.println(); 
          System.out.println("Running for ten minutes..."); 
          Thread.sleep(600000); 
          System.out.println("Ten minutes have elapsed."); 
        } 
        catch (Exception e) 
        { 
          e.printStackTrace(); 
        } 
     
        try 
        { 
          System.out.println(); 
          System.out.println("Closing connections..."); 
          if (s != null) 
            s.getTopicHelper().closeConnections(); 
          System.out.println("Connections closed"); 
        } 
        catch (Exception e) 
        { 
          e.printStackTrace(); 
        } 
      } 
    } 
    


    目录 上一页 下一页 索引 定制指南
    Sun Java™ System Content Delivery Server,版本 2004Q1