目录 上一页 下一页 索引

第 4 章

内容管理 API


Sun Java System Content Delivery Server 内容管理 API 提供 Content Delivery Server 与内容管理系统之间的接口。使用此 API 可以编写内容管理适配器,以便在内容发送到订户的设备时对内容二进制进行程序校验或更改内容信息。例如,可以创建内容管理适配器,以便添加用于处理数字权限管理 (DRM) 的代码。


注-如果内容管理适配器需要在开发者提交的内容的原始版本上运行,则提交验证器工作流不得在提交时执行任何程序校验或修改。有关创建工作流的信息,请参见《Sun Java System Content Delivery Server 集成指南》。有关配置 Content Delivery Server 附带的提交验证器工作流的信息,请参见《Sun Java System Content Delivery Server 安装指南》。

请注意,内容管理适配器处理收到的调用需要一些时间,这会延迟到订户的内容传送。尽量将内容管理 API 的使用限制为不增加过多开销的操作。

内容管理 API 包括

有关这些类的其他信息,请参见 $CDS_HOME/javadoc/cdsapi/index.html 处的 Javadoc 工具的 HTML 输出。

4.1 一般处理流程

内容管理 API 用于处理 Content Delivery Server 与外部内容管理系统或 DRM 服务器之间的通信。内容和事务的详细资料保留在 ContentInfo 对象中。使用此 API 可以访问和操作内容传送给订户时的内容信息。

本节介绍设备、Content Delivery Server 及内容管理适配器之间的信息流。

4.1.1 获取内容列表

当订户在 Subscriber Portal 中单击“类别”下的内容标题时,将启动内容列表请求。

  1. 订户在 Subscriber Portal 中单击“类别”下的内容标题。
  2. 订户设备向 Content Delivery Server 发送请求以获取有关选定类别中内容项的信息。
  3. Content Delivery Server 根据 Content Delivery Server 数据库中的信息,为列表中的各项创建初始 ContentInfo 对象。此信息显示给订户或由 Content Delivery Server 使用。
  4. Content Delivery Server 调用 getContentInfos 并传递列表中各项的 ContentInfo 对象。
  5. getContentInfos 的实现可以更改系统所需的内容信息。此时只有内容列表中显示给订户的信息应进行修改。
  6. Content Delivery Server 将该类别的内容项目列表和其他信息返回到订户设备。
  7. Subscriber Portal 在页面的“结果”部分中显示该列表。

4.1.2 获取内容详细信息

当订户在 Subscriber Portal 的“结果”页面中单击内容项名称或“更多详细资料”时,将启动有关特定内容项详细信息的请求。事务步骤将在下面进行介绍。

  1. 订户在 Subscriber Portal 的“结果”页面中单击特定内容项的名称或“更多详细资料”。
  2. 订户设备向 Content Delivery Server 发送请求以获得选定内容项目的信息。
  3. Content Delivery Server 为单个项目调用 getContentInfo。方法的实现可以返回有关内容的详细信息,例如其二进制代码和描述符 MIME 类型、其内容大小和类型(例如 ringtone 或 MIDlet)以及事务详细信息。
  4. Content Delivery Server 将有关内容项目的详细信息传递到订户设备。

4.1.3 下载内容

订户选择从设备购买内容时将启动获取内容的进程。通常,该内容必须在传送到订户之前进行程序校验。可以根据很多因素进行程序校验,例如订户电话类型(CDMA 或 GSM)、记帐模型(订阅或使用)、内容类型或其他特征。

  1. 订户在 Subscriber Portal 中选择所需的内容项,然后单击“现在下载”。订户必须从设备而不是 PC 访问 Subscriber Portal。
  2. 对于两步下载,设备会将请求发送到 Content Delivery Server 以下载内容描述符。
  3. Content Delivery Server 为请求的内容项生成初始的 ContentInfo 对象。
  4. Content Delivery Server 将从 Content Delivery Server 数据库中检索二进制代码、描述符及其 MIME 类型,并将它们传递到内容管理系统。
  5. Content Delivery Server 将调用getContentDescriptor 以处理内容详细资料并对描述符文件进行适当更新。
  6. 内容管理系统将返回描述符文件的更新版本,该更新版本包含向订户传送的值。
  7. Content Delivery Server 将更新的描述符文件传递到订户设备。
  8. 该设备向 Content Delivery Server 发出请求,以获得内容二进制代码。订户在设备中单击显示的 URL 即可发送请求(发送请求的方法之一)。
  9. Content Delivery Server 使用内容二进制代码及其 MIME 类型填充 ContentInfo 对象并将该对象传递给内容管理适配器。
  10. Content Delivery Server 调用 getContentBinary 以创建更新的内容二进制文件。
  11. 内容管理适配器对内容进行程序校验并将更新的内容二进制文件及二进制 MIME 类型传回 Content Delivery Server。

  12. 注-功能匹配(用于确定运行内容所用的设备)在发布内容时完成。内容管理适配器所做的更改不应包含这样的内容,即致使设备不能再运行内容。可能影响设备运行内容的更改包括增加内容大小或更改 MIME 类型。
  13. Content Delivery Server 将更新内容传递到订户设备。

4.2 ContentManager 接口

ContentManager 接口提供 Content Delivery Server 与内容管理系统或 DRM 服务器之间的接口。您可以对其提供的方法进行实现,以便在内容二进制代码、描述符和其他信息传送给订户之前对它们进行修改。

该类中的方法将 ContentInfo 对象和 BillingInfo 对象作为参数。ContentInfo 对象包含内容二进制代码、内容描述符文件和其他信息,例如内容二进制代码和描述符 MIME 类型、内容大小和类型,以及下载内容所需的步骤数。

BillingInfo 对象包含事务详细资料,例如记帐模型。此对象还包含订户信息。有关记帐和 BillingInfo 对象的详细信息,请参见第 3 章“记帐 API”

ContentManager 接口位于 com.sun.content.server.content 中。

4.2.1 getContentInfo()

abstract ContentInfo getContentInfo(ContentInfo inContentInfo, BillingInfo inBillingInfo) throws ContentException 

此方法在订户请求有关单个内容项的信息时由 Content Delivery Server 调用。ContentInfo 对象包含关于初始内容项的信息,例如内容二进制代码和描述符 MIME 类型、估计的内容大小和类型(例如 ringtone 或 MIDlet)以及下载该内容所需的步骤数。

4.2.2 getContentInfos()

abstract ContentInfo[] getContentInfos(ContentInfo[]inContentInfos, BillingInfo[] inBillingInfos) throws ContentException 

此方法在订户请求有关类别中内容项列表的信息时由 Content Delivery Server 调用。此方法只应该更改内容列表中显示的信息。

4.2.3 getContentDescriptor()

abstract ContentInfo getContentDescriptor(ContentInfo inContentInfo, BillingInfo inBillingInfo) throws ContentException 

此方法在订户启动请求将内容描述符下载到设备上时由 Content Delivery Server 调用。Content Delivery Server 检索内容描述符文件。内容描述符和二进制代码将传递到内容管理系统。内容管理系统可以更新内容描述符和信息(包括大小),并将其返回到 Content Delivery Server,以便传递给订户。

4.2.4 getContentBinary()

abstract ContentInfo getContentBinary(ContentInfo inContentInfo, BillingInfo inBillingInfo) throws ContentException 

此方法在订户启动请求将内容二进制代码下载到设备上时由 Content Delivery Server 调用。在调用 getContentBinary 时可以将二进制代码传递到内容管理适配器。要传送给订户经过程序校验的内容二进制代码必须返回到 Content Delivery Server。

4.3 使用内容管理 API

内容管理 API 的类可以在 cdsapi.jar(位于 $CDS_HOME/deployment/deployment-name/lib/cdslib 目录)中找到。

编译适配器时,cdsapi.jar 文件和 foundation.jar 文件必须位于类路径中。

要使适配器可用于 Content Delivery Server:

  1. 为适配器创建 Java 归档 (JAR) 文件,并将 JAR 文件置于 $CDS_HOME/deployment/deployment-name/lib/external 目录中,以便在执行过程中 Content Delivery Server 可以找到该文件。
  2. Content Delivery Server 需要重新启动才能发觉新的 JAR 文件。

  3. 修改 $CDS_HOME/deployment/deployment-name/conf 目录中的 security.config 文件,以添加 module.security.contentmanager 属性和设置 module.security.contentmanager.enabled 属性。

现有 module.security.contentmanager 属性指向 Content Delivery Server 附带的 DRM 代理所使用的具体实现,该属性必须第一个出现。在现有的那一个属性后面再添加一个 module.security.contentmanager 属性,并将此属性设置为您所实现的 ContentManager 接口的全限定包和类名。将 module.security.contentmanager.enabled 设置为 true 以表明适配器可用,并且该属性应由 Content Delivery Server 调用。例如,

module.security.contentmanager=com.sun.content.server.content.external.SunContentManager 
module.security.contentmanager=myapps.adapters.ContentManagerImpl 
module.security.contentmanager.enabled=true 

4.4 示例

代码示例 4 显示了 ContentManager 接口的样例实现。

代码示例 4 ContentManager 样例实现
import com.sun.content.server.content.*; 
import com.sun.content.server.billing.BillingInfo; 
 
public class ContentManagerImpl implements ContentManager 
{ 
  public ContentInfo getContentInfo( 
    ContentInfo inContentInfo, 
    BillingInfo inBillingInfo) 
  throws ContentException 
  { 
    // Update the information that is shown to the user 
    return inContentInfo; 
  } 
 
  public ContentInfo[] getContentInfos( 
    ContentInfo[] inContentInfos, 
    BillingInfo[] inBillingInfos) 
  throws ContentException 
  { 
    // Iterate through each ContentInfo object and update the 
    // information that is shown to the user when a list of 
    // content is shown. 
    return inContentInfos; 
  } 
 
  public ContentInfo getContentDescriptor( 
    ContentInfo inContentInfo, 
    BillingInfo inBillingInfo) 
  throws ContentException 
  { 
    // Update content download descriptor 
    return inContentInfo; 
  } 
 
  public ContentInfo getContentBinary( 
    ContentInfo inContentInfo, 
    BillingInfo inBillingInfo) 
  throws ContentException 
  { 
    // Update content binary, binary MIME type 
    return inContentInfo; 
  } 
} 


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