48
Sun Microsystems, Inc. www.sun.com 請將您對本文件的意見提交至:http://www.sun.com/hwdocs/feedback 開發者指南 Sun Java System RFID Software 2.0 文件號碼 819-2619-10 2005 4 月,修訂版 A

開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

Sun Microsystems, Inc.www.sun.com

請將您對本文件的意見提交至:http://www.sun.com/hwdocs/feedback

開發者指南

Sun Java™ System RFID Software 2.0

文件號碼 819-2619-102005 年 4 月,修訂版 A

Page 2: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

Copyright © 2005 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, U.S.A. 版權所有。

美國政府權利 - 商業軟體。政府使用者均應遵守 Sun Microsystems, Inc. 的標準授權合約和 FAR 及其增補文件中的適用條款。

本發行軟體可能包括由協力廠商開發的材料。Sun、Sun Microsystems、Sun 標誌和 Java 都是 Sun Microsystems, Inc. 在美國和其他國家/地區的商標或註冊商標。

所有 SPARC 商標都是 SPARC International, Inc. 在美國及其他國家/地區的商標或註冊商標,經授權後使用。凡具有 SPARC 商標的產品都是採用 Sun Microsystems, Inc. 所開發的架構。

UNIX 是在美國及其他國家/地區的註冊商標,已獲得 X/Open Company, Ltd. 專屬授權。

本服務手冊所涵蓋的產品以及所包含的資訊,都是受到美國出口控制法的控制,並且可能受制於其他國家/地區的出口或進口法律。嚴禁核子武器、飛彈、生化武器或海上核動力裝備等最終用途或最終使用者直接或間接使用本產品。禁向受到美國禁運的國家/地區或美國出口除外清單 (包括但不僅限於被拒人清單和特別指定的國家/地區清單) 上標識的實體出口或再出口本產品。

本文件以其 「原狀」提供,對任何明示或暗示的條件、陳述或擔保,包括對適銷性、特殊用途的適用性或非侵權性的暗示保證,均不承擔任何責任,除非此免責聲明的適用範圍在法律上無效。

Page 3: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

目錄

前言 5

閱讀本書之前 5

文件格式化慣例 6

一般慣例 6

印刷排版慣例 7

相關文件 7

連絡 Sun 技術支援 8

Sun 歡迎您提出寶貴意見 8

1. Sun Java System RFID Software Information Server 9

架構 9

資料庫表格 10

2. 使用 RFID Information Server 用戶端 API 13

連線到 RFID Information Server 13

與 RFID Information Server 交換資料 15

修改 RFID Information Server 表格 16

查詢 RFID Information Server 資料庫表格 18

處理 RFID Information Server 回應 20

處理異常 23

目錄 3

Page 4: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

3. RFID Information Server 報告架構 25

搭配使用報告架構與 EPCIS 中的 JasperReports 25

▼ 若要啟動報告架構並顯示報告 27

4. ALE Web Service 33

主要的架構 33

ALE 服務架構 34

其他注意事項 36

使用 ALE Web Services Client (ALEClient) API 37

ALE Web Services Client 介面和實作 37

範例程式 - MyAleClient.java 38

範例開發環境 38

5. PML 公用程式 41

簡介 41

使用 PML Core 擷取標籤觀察 42

PML 公用程式套裝模組 43

PML Core 套裝模組 43

PML 剖析器套裝模組 45

類別路徑需求 46

PML 套裝模組的 UML 類別圖 47

4 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 5: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

前言

Sun™ Java ™ System RFID Software 2.0 (RFID Software) 的開發者指南包含的資訊適用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱 「Sun Java System RFID Software Toolkit」。

每個平台的螢幕畫面可能會有些許的差異。雖然幾乎所有的程序都使用 RFID 軟體元件的介面,但是偶爾還是會指示您在指令行中輸入指令。

閱讀本書之前您必須熟悉 RFID 概念以及下列主題:

■ Jini™ 網路技術概念■ Java™ 程式設計和概念■ Java™ DataBase Connectivity 技術 - JDBC™ 概念和用法■ Java™ 2 Platform, Enterprise Edition (J2EE™) 技術和用法■ 主從式程式設計模型■ 熟悉如何管理大型企業系統■ 管理其中一個支援的應用程式伺服器■ 管理其中一個支援的資料庫

5

Page 6: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

備註 – Sun 對於本文件中所提及之協力廠商網站的使用不承擔任何責任。Sun 對於此類網站或資源中的 ( 或透過它們所取得的 ) 任何內容、廣告、產品或其他材料不做背書,也不承擔任何責任。對於因使用或依靠此類網站或資源中的 ( 或透過它們所取得的 ) 任何內容、產品或服務而造成的或連帶產生的實際或名義上之損壞或損失,Sun 概不負責,也不承擔任何責任。

文件格式化慣例本節說明本書中所使用的慣例類型。

■ 一般慣例■ 提及目錄時的慣例

一般慣例

本書使用下列一般慣例:

■ 檔案和目錄路徑是以 UNIX® 格式提供 ( 目錄名稱之間以正斜線隔開 )。

■ URL 的格式如下所示:

http://server.domain/path/file.html,其中 server 是執行應用程式的伺服器名稱;domain 是您的網際網路網域名稱;path 是伺服器的目錄結構;file 是個別的檔案名稱。

■ 本書中 UNIX 特定的說明也適用於 Linux 作業系統,除非有另外特別說明 Linux。

6 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 7: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

印刷排版慣例

相關文件下表列出了 Sun Java™ System RFID Software 手冊和版本說明。如果您要試著完成一項特定的工作或要更深入的了解某特定的概念,請參閱相應的手冊。

字體 意義 範例

AaBbCc123 指令、檔案及目錄的名稱;螢幕畫

面輸出。

請編輯您的 .cvspass 檔案。

請使用 DIR 列出所有檔案。

已完成搜尋。

AaBbCc123 您所鍵入的內容 ( 與螢幕畫面輸出

相區別 )。> login

:

AaBbCc123 指令行變數,以真實名稱或值來取代 這些稱為 class 選項。

要刪除檔案,請鍵入 DEL filename。

文字術語強調 需要強調的新術語或文字。 不儲存檔案。

「標題」 標題 請參閱 「使用者指南」第 6 章。

所需資訊 參閱指南

有關軟體和文件的最新資訊 「Sun Java System RFID Software 2.0 版本說明」

前言 7

Page 8: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

連絡 Sun 技術支援若要報告錯誤、提交意見或發問,請連絡 Sun 軟體支援服務,網址如下:

http://www.sun.com/service/sunone/software

Sun 歡迎您提出寶貴意見Sun 致力於提高文件品質,因此誠心歡迎您提出意見與建議。請至下列網址提出您對本文件的意見:

http://www.sun.com/hwdocs/feedback

請在電子郵件的主旨行附上本書的文件號碼 (819-2619-10 )。可在本書的標題頁處找到文件號碼。

安裝 Sun Java™ System RFID Software 「Sun Java System RFID Software 2.0 安裝指南」

下列管理主題:

• RFID Software 簡介

• 配置 RFID Event Manager• 分散式 RFID Event Manager 環境

• 管理 RFID 系統

• RFID 系統 JMS 服務

• RFID Information Server 配置

• 讀取器配接卡參照

• RFID Event Manager 元件參照

「Sun Java System RFID Software 2.0 管理指南」

Sun Java™ System RFID Software 開發者資訊,其中包含:

• Information Server 架構和資料庫表格

• RFID Information Server 用戶端 API• RFID Information Server 報告架構

• ALE Web Service API

• PML 公用程式

「Sun Java System RFID Software 2.0 開發者指南」

所需資訊 參閱指南

8 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 9: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

第 章1

Sun Java System RFID Software Information Server

本章將會介紹 Sun Java™ System RFID Software Information Server。其中涵蓋下列主題:

■ 第 9 頁的 「架構」■ 第 10 頁的 「資料庫表格」

架構Sun Java System RFID Software Information Server (IS) 是一種 J2EE 應用程式,在某個支援的應用程式伺服器上執行。RFID Information Server 將所有資料保留在關聯式資料庫中。任何與 JDBC 相容的 RDBMS 都可做為資料儲存庫。在此 Sun Java System RFID Software 發行版本中,RFID Information Server 受到下列資料庫的支援:

■ Oracle Database 8.1.7■ Oracle Database 10g■ PostgreSQL 7.4.6

外部應用程式會透過 XML 訊息交換與 RFID Information Server 互動。請求和回應都是以 XML 來表示並且符合 XML 模式。RFID Information Server 支援 HTTP 和 JMS 訊息傳輸。RFID Software 提供的 Java 用戶端程式庫可程式化地存取 RFID Information Server。RFID Information Server 中查詢與處理資料的 API 與使用的通訊協定無關。圖 1-1 將示意其架構。第 2 章會介紹如何使用用戶端 API。

9

Page 10: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

圖 1-1 RFID Information Server 架構

資料庫表格本節將介紹 Sun Java System RFID Software 資料庫表格名稱和說明。

表 1-1 RFID Information Server 資料庫表格

表格名稱 定義 資料庫表格鍵值

CONTAINER_TYPE 表格中的每一項都代表一種容器。 容器類型則取決於具體的部署。一般容

器類型包括棧板 (Pallet)、貨箱 (Case)、內層包裝 (Inner Pack) 與商品 (Item)。

主鍵:NAME

CONTAINMENT 維持 EPC 之間容器關係的階層。 每個容器都以 「父系」 EPC 來識別。

父系可能沒有或有多個 「子」 EPC。由於子 EPC 本身可以代表容器,因此

階層可以任意地延伸。

CURRENT_OBSERVATION 維持一份標籤清單,其中所列的標籤為

目前感應器可以感知的標籤。 這個表格只能與 Event Manager 的差量 (Delta) 濾波器結合使用。若要保持表

格的一致性,IS 必須依賴差量的 TagsIn 和 TagsOut 屬性。

外來鍵:SENSOR_EPC

10 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 11: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

備註 – 每個感應器都是由唯一的 EPC 來識別。為了簡潔起見,SENSOR 表格中的主鍵被稱為 EPC 而不是 SENSOR_EPC。

OBSERVATION_LOG 和 CURRENT_OBSERVATION 表格中的項目有一個稱為 SENSOR_EPC 的屬性,讓它與被觀察的 EPC 有所區別。SENSOR_EPC 可識別觀察者。它是 SENSOR 表格的外來鍵。

OBSERVATION_LOG 維護所有標籤觀察的歷程記錄。

表格中的每一項都代表一項觀察,其中包含觀察者 ( 感應器 ) 的 EPC、觀察值

的 EPC 和觀察的時間。

外來鍵:SENSOR_EPC

ORGANIZATION 物品的製造商或經銷商。 主鍵:ORGANIZATION_ID

PRODUCT 商品的類別,或是 GTIN 或 UPC 程式

碼所識別的 「庫存單元 (SKU)」。 主鍵:PRODUCT_ID

外來鍵:MANUFACTURER_ID

SENSOR 由 EPC 唯一識別的 RFID 讀取器或天線。

主鍵:EPC

TAG_ALLOCATION 指定和取消指定 EPC 號碼的範圍並進行追蹤。

主鍵:TAG_ALLOCATION_ID

TAG_ALLOCATION_LOG 維護所有配置的標籤的歷程記錄。

TX_LOG 將一組 EPC 與商務交易 ID 產生關聯。

通用的交易 ID 包含 PO 號碼和 ASN。

UNIT 由唯一 EPC 所識別的帶有標籤的實體。UNIT 表格中的項目可代表棧板、

貨箱或任何其他被追蹤的實體。

主鍵:EPC

外來鍵:PRODUCT_ID、UNIT_TYPE

表 1-1 RFID Information Server 資料庫表格 ( 續 )

表格名稱 定義 資料庫表格鍵值

第 1 章 Sun Java System RFID Software Information Server 11

Page 12: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

12 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 13: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

第 章2

使用 RFID Information Server 用戶端 API

本章將會介紹與 RFID Information Server 互動的用戶端 API。其中涵蓋下列主題:

■ 第 13 頁的 「連線到 RFID Information Server」■ 第 15 頁的 「與 RFID Information Server 交換資料」■ 第 16 頁的 「修改 RFID Information Server 表格」■ 第 18 頁的 「查詢 RFID Information Server 資料庫表格」■ 第 20 頁的 「處理 RFID Information Server 回應」■ 第 23 頁的 「處理異常」

連線到 RFID Information Servercom.sun.autoid.epcis.client.EpcisConnection 類別代表應用程式與 RFID Information Server 之間的通訊連結。連線類別的一個實例可以支援多個請求。連線所使用的傳輸通訊協定是利用適當的建構子來指定的。

本節包含下列程式碼範例:

■ 使用 HTTP 建立連線 ■ 使用 JMS 於 Sun Java System Application Server 建立連線 ■ 使用 JMS 於 BEA WebLogic 8.1 建立連線■ 關閉連線

13

Page 14: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

程式碼範例 2-1 使用 HTTP 建立連線

EpcisConnection conn = new EpcisConnection("http://hostname.xyz.com/epcis/service", // url to the IS service"proxy.xyz.com", // proxy host"8080", // proxy port"myname", // user name"mypassword"); // password

程式碼範例 2-2 使用 JMS 於 Sun Java System Application Server 建立連線

EpcisConnection conn = new EpcisConnection("file:///imq_admin_objects", // file system JNDI provider URL"TopicConnectionFactory", // name of the connection factory"epcisTopic", // name of the topic"true", // user JMS (true or false) "myname", // user name"mypassword"); // password

程式碼範例 2-3 使用 JMS 於 BEA WebLogic 8.1 建立連線1

1 如果沒有指定 initial-context-factory,則預設值為 com.sun.jndi.fscontext.RefFSContextFactory。

EcpisConnection conn = new EpcisConnection ("weblogic.jndi.WLInitialContextFactory", // JNDI initial context factory"t3://localhost:7001", // JNDI provider URL"jms/TopicConnectionFactory", // name of the connection factory"jms/epcisTopic", // name of the topic"true","username", // authentication username"password"); // authentication password

14 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 15: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

關閉連線

在連線上呼叫 close() 方法,會呼叫基本的 HttpURLConnection 或 TopicConnection 物件的 close() 方法。建議最好是在 finally 區段中擷取對 close() 方法的呼叫。

與 RFID Information Server 交換資料傳送物件是用戶端的資料表示法,用於表示在 RFID Information Server 與應用程式之間交換的資料。傳送物件中的資料可能持續存在於一個或多個資料庫表格。表 2-1 中列示了 Java 類別與資料庫物件的關係。

Unit、Product、Organization、Container、Sensor、ContainerType、Transaction 和 Observation 等,全部都是傳送物件。

一般來說您能夠從資料庫插入、查詢、修改和刪除這些物件。但是 Transaction 和 Observation 物件是例外。您可以使用 UpdateRequest 物件來記錄作業事件和觀察。一旦記錄了作業事件或觀察之後就不能再修改。此外,不可刪除觀察。沒有所謂清除過去觀察的這種概念。OBSERVATION_LOG 會維護觀察的歷程記錄。

程式碼範例 2-4 關閉連線

EpcisConnection conn = null;try { conn = ...//initialize the connection here} catch (Exception e) { e.printStackTrace();} finally { try { conn.close(); } catch (Exception e) { e.printStackTrace(); }}

第 2 章 使用 RFID Information Server 用戶端 API 15

Page 16: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

修改 RFID Information Server 表格請求類別代表對 Information Server 所提出的更新、刪除或查詢請求。所有的請求類別都會延伸 com.sun.autoid.epcis.client.Request 抽象類別。請求類別的實例會轉換成 XML 格式,如此便可透過線路進行傳送。

表 2-1 Java 類別與資料庫物件的關係

套裝模組名稱 Java 類別名稱 資料庫物件

com.sun.autoid.epcis.client ValueObjectWrapper

Unit UNIT 表格中的項目。Unit 可以是貨箱、棧板或任何其他被追蹤的實體。

Product PRODUCT 表格中的項目

Organization ORGANIZATION 表格中的項目

Sensor SENSOR 表格中的項目

Observation OBSERVATION_LOG 或 CURRENT_OBSERVATION 表格中的項目

ContainerType CONTAINER_TYPE 表格中的項目

TagAllocation TAG_ALLOCATION 表格中的項目

TagAllocationLog TAG_ALLOCATION_LOG 表格中的項目

com.sun.autoid.epcis.business

Container CONTAINMENT 表格中的一組橫列,對應於容器的階層。

Transaction TX_LOG 表格中以 TX_ID 分組的一組橫列。

com.sun.autoid.epcis.dao

PrimaryKey 主鍵值和表格名稱

16 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 17: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

表 2-2 請求類別和程式碼範例

類別 說明 程式碼範例

UpdateRequest 提供方法更新 RFID Information Server 資料庫表格。這個類別的實例在 Unit、Product、Organization、Container、Sensor 和 ContainerType 等傳送物件上,進行插入和修改作業。

程式碼範例 2-5程式碼範例 2-6程式碼範例 2-7

DeleteRequest 提供方法刪除 RFID Information Server 表格中的項目。針對大部分的表格,此類別使用 PrimaryKey 物件來識別要刪除的項目。

程式碼範例 2-8程式碼範例 2-9程式碼範例 2-10

程式碼範例 2-5 插入一個 Unit 類別

EpcisConnection conn = new EpcisConnection(...)UpdateRequest updateReq = new UpdateRequest(conn);Unit unit = new Unit();unit.setEpc("urn:epc:id:gid:2.1.1");unit.setExpiryDate(Calendar.getInstance());unit.setProductId("1");unit.setUnitType("ITEM");unit.setAttr1("192.168.1.2"); // persists the non-EPC dataUpdateResponse updateResp = updateReq.add(unit);

程式碼範例 2-6 插入一個 Transaction 類別

ArrayList epcs = new ArrayList();epcs.add("urn:epc:id:gid:1.402.1");epcs.add("urn:epc:id:gid:1.301.2");Transaction trans = new Transaction("PO-909", Calendar.getInstance(), null, epcs); updateResp = updateReq.createTransaction(trans);

程式碼範例 2-7 插入 Observation 類別

DeltaEvent deltaEvent = ...Sensor sensor = EventUtil.toSensor(deltaEvent);UpdateResponse updateResp = updateReq.postPML(sensor);

第 2 章 使用 RFID Information Server 用戶端 API 17

Page 18: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

備註 – 可藉由指定容器的父系 EPC 來刪除容器。此方法只會刪除最上層容器的內容。如果父系 EPC 的子項是容器的話,則其內容不會被刪除。

備註 – TX_LOG 表格沒有主鍵。可藉由 TX_ID 值識別所要刪除的作業事件。

查詢 RFID Information Server 資料庫表格查詢條件是以單純的屬性比較來表示。比較器 - eq、lt 和 gt - 都有效並且可用來比較固定屬性的值。當比較延伸屬性的值時,只有 eq 運算符是有效的。如果指定了多個條件,則使用 AND 運算符來附加條件。如果沒有指定任何條件,則查詢會傳回所選表格中的所有項目。

程式碼範例 2-8 刪除 Container 類別

DeleteRequest deleteReq = new DeleteRequest(conn);PrimaryKey pk = new PrimaryKey("urn:epc:id:gid:1.402.1", “CONTAINMENT”);ArrayList pkList =new ArrayList();pkList.add(pk);DeleteResponse deleteResp = deleteReq.deleteByPk(pkList);

程式碼範例 2-9 刪除一個 Unit 類別

PrimaryKey pk = new PrimaryKey("urn:epc:id:gid:1.103.1", “UNIT”);ArrayList pkList =new ArrayList();pkList.add(pk);DeleteResponse deleteResp = deleteReq.deleteByPk(pkList);

程式碼範例 2-10 刪除 Transaction 類別

ArrayList txIdList = new ArrayList();txIdList.add("PO-909");DeleteResponse deleteResp = deleteReq.deleteTxById(txIdList);

18 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 19: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

表 2-3 列出了查詢類別和程式碼範例。

表 2-3 查詢請求類別和程式碼範例

類別 說明 程式碼範例

FindByAttrRequest 處理 RFID Information Server 中指定表

格的查詢

程式碼範例 2-11

程式碼範例 2-12

程式碼範例 2-13

ContainmentRequest 處理 CONTAINMENT 表格上的查詢。

包含查詢條件可表示父系或子項關係。它也可以指定搜尋是要遞迴地傳回階層中的

所有 EPC,或只傳回直接的 EPC。

程式碼範例 2-14程式碼範例 2-15

程式碼範例 2-11 TX_LOG 表格中的所有作業事件

FindByAttrRequest findReq = new FindByAttrRequest(conn, "TX_LOG");FindByAttrResponse findResp = findReq.process();

程式碼範例 2-12 從 OBSERVATION 表格中查詢特定的 EPC

FindByAttrRequest findReq =new FindByAttrRequest(conn, "OBSERVATION_LOG");findReq.addCondition("OBSERVATION_VALUE", "urn:epc:id:gid:1.402.1", "eq");findResp = findReq.process();

第 2 章 使用 RFID Information Server 用戶端 API 19

Page 20: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

處理 RFID Information Server 回應Information Server 的回應訊息會被編組為回應物件。所有的回應類別都會延伸 com.sun.autoid.epcis.client.Response。表 2-4 列出了回應類別以及範例。

程式碼範例 2-13 UNIT 表格的條件式查詢

FindByAttrRequest findReq =new FindByAttrRequest(conn, "UNIT");findReq.addCondition("EXPIRY_DATE", Calendar.getInstance(), "gt");findReq.addCondition("PRODUCT_ID", new Integer(1), "eq");findResp = findReq.process();

程式碼範例 2-14 遞迴地查詢 EPC 的父系項目

ContainmentResponse contReq = new ContainmentRequest(conn);ContainmentResponse contResp = contReq.process("urn:epc:id:gid:1.103.1", ContainmentRequest.PARENT_OF,true);

程式碼範例 2-15 查詢給定的 EPC 之直接子項 EPC

ContainmentResponse contResp = contReq.process("urn:epc:id:gid:1.402.1", ContainmentRequest.CHILD_OF,false);

20 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 21: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

表 2-4 回應類別和程式碼範例

類別 說明 程式碼範例

UpdateResponse 代表更新請求的狀態。會以字串的形式

擷取失敗狀態。JDBC 驅動程式所報告的狀態會逐字傳回。

程式碼範例 2-16

DeleteResponse 代表刪除請求的狀態。會以字串的形式擷取失敗狀態。

程式碼範例 2-17

FindByAttrResponse 做為 FindByAttrRequest 的結果收集所有傳回的傳送物件。傳送物件一般是

以 ArrayLists 傳回。ArrayList 可能不包含或包含多個元素。

程式碼範例 2-18和

程式碼範例 2-19

ContainmentResponse 這個類別傳回的結果可以是 EPC 的 ArrayList 或 Container 物件。如果需要快速檢查結果集的話,則前者較為

適用,但是後者可保留 EPS 之間的階層關係。

程式碼範例 2-20 和

程式碼範例 2-21

程式碼範例 2-16 測試更新請求是否成功

UpdateResponse updateResp = updateReq.modify(unit);System.out.println("ModifyUnit.Success -> " + updateResp.success() + ".Should be true");

程式碼範例 2-17 測試刪除請求是否成功

DeleteResponse deleteResp = deleteReq.deleteByPk(pkList);System.out.println("Success -> " + deleteResp.success());

第 2 章 使用 RFID Information Server 用戶端 API 21

Page 22: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

程式碼範例 2-18 列印所傳回 Transaction 物件的數量

FindByAttrResponse findResp = findReq.process();System.out.println("Results -> Got " + findResp.getTransactions().size() );

程式碼範例 2-19 列印所傳回 UNIT 物件的屬性值

FindByAttrRequest findReq = new FindByAttrRequest(conn, "UNIT");findReq.addCondition("EPC", "urn:epc:id:gid:1.103.1", "eq");findResp = findReq.process();System.out.println("Results -> Got " + findResp.getUnits().size() );if (findResp.getUnits().size() > 0){ Unit unit = (Unit)findResp.getUnits().get(0); System.out.println("Got unit with manufacture date : " + unit.getManufactureDate());}

程式碼範例 2-20 使用 getResultSet()

ContainmentResponse contResp = contReq.process("urn:epc:id:gid:1.103.1", ContainmentRequest.PARENT_OF, true);System.out.println("Results -> Got " + contResp.getResultSet().size() );

程式碼範例 2-21 使用 getRoot()

ContainmentResponse contResp = contReq.process("urn:epc:id:gid:1.103.1", ContainmentRequest.PARENT_OF, true);System.out.println("Results -> Got " + contResp.getRoot().getEpc() );

22 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 23: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

處理異常使用 com.sun.autoid.epcis.EPCISException 套裝模組的類別

第 2 章 使用 RFID Information Server 用戶端 API 23

Page 24: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

24 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 25: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

第 章3

RFID Information Server 報告架構

本章會利用一個範例介紹如何使用 Sun Java System RFID Software 報告架構。

搭配使用報告架構與 EPCIS 中的 JasperReports這個範例使用 SourceForge.net 的開放程式碼 JasperReports 專案。JasperReports 提供的 Java 報告程式庫免費並且程式碼對外開放。在 XML 報告範本中使用自訂資料來源 ( 包括 JDBC ) 的資料,產生馬上可以列印的文件。輸出可遞送到螢幕、印表機或以 PDF、HTML、XLS、CSV 和 XML 格式儲存。

如果您要使用 target_home 目錄所提供的範例報告 JSP 檔 (DisplayEpcisTables.jsp、ReadersStatistics.jsp、TagStatistics.jsp 和 TagAssociation.jsp),您必須先更改 JasperReports JAR 檔的名稱、JDBC 驅動程式、JDBC URL、使用者名稱和密碼以符合您的環境,才能使用它們。所提供的報告架構程式碼只能做為範例,而 「不是」開發報告程式碼的建議方法。

25

Page 26: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

1. 找出 RFID Information Server 的目標目錄。變數 target_home 用來代表目標目錄。

■ 對於 Application Server 7- target_home 為:

■ 對於 Application Server 8.1- target_home 為:

2. 在複製應用程式到 target_home 之前,請在應用程式 JSP 檔中正確配置資料庫的參數。例如,應用程式中的 JDBC 驅動程式、主機名稱、連接埠號碼、使用者名稱/密碼,都必須符合您的環境。

3. 複製應用程式 JSP 檔到 target_home。例如,下列三個範例檔:

4. 複製 JasperReports 報告設計 XML 檔到 target_home。例如,使用範例檔,請鍵入:

5. 從 SourceForge.net 下載 JasperReports ( 如果您尚未如此做的話 )。

http://sourceforge.net/projects/jasperreports/

6. 在 WEB-INF 之下建立一個 lib 目錄 ( 如果沒有的話 )。

/var/opt/SUNWappserver7/domains/domain1/server1/applications/j2ee-apps/epcis/sun-rfid-is_war

/var/opt/SUNWappserver/domains/domain1/applications/j2ee-apps/epcis/sun-rfid-is_war

cp ./ReadersStatistics.jsp target_home/.cp ./TagStatistics.jsp target_home/.cp ./TagAssociation.jsp target_home/.

cp ./ReadersStatistics.jrxml target_homecp ./TagStatistics.jrxml target_homecp ./TagAssociation.jrxml target_home

mkdir ${target_home}/WEB-INF/lib

26 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 27: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

7. 複製 JasperReports 程式庫 JAR 檔。

備註 – JasperReports 軟體有一個錯誤,其會丟出 ServletException 並顯示 "java.lang.InternalError: Can’t connect to X11 window server using ’:0.0’ as the value of the DISPLAY variable"。若要解決這個錯誤,使用者必須將下列 JVM 選項加入應用程式伺服器的 JVM 設定,然後重新啟動應用程式伺服器:

-Djava.awt.headless=true

8. 重新啟動應用程式伺服器。

9. 現在您可以檢視報告了。請參閱第 27 頁的 「若要啟動報告架構並顯示報告」程序。

▼ 若要啟動報告架構並顯示報告

1. 確認資料庫伺服器正在執行。

2. 開啟 Web 瀏覽器並鍵入 RFID Information Server 安裝所在的適當 URL,以存取 RFID Information Server 索引頁。

例如,鍵入:

以安裝 RFID Information Server 的機器主機名稱取代 hostname 變數。即會顯示 RFID Information Server 索引頁。

cp ./jasperreports-0.6.3.jar ${target_home}/WEB-INF/lib/

http://hostname/epcis/

第 3 章 RFID Information Server 報告架構 27

Page 28: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

3. 選擇 EPCIS 報告架構 > 讀取器統計資料。

如果提示您輸入的話,請輸入 「使用者名稱」和 「密碼」。所輸入的 「使用者名稱」和 「密碼」應該與應用程式伺服器配置期間建立安全檔案範圍使用者的相同。有關詳細資訊,請參閱 「Sun Java System RFID Software 2.0 安裝指南」的第 4 章。

28 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 29: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

4. 輸入 「讀取器 EPC 號碼」,例如:urn:epc:id:gid:1.700.2,然後按一下 [ 提交查詢 ]。

瀏覽器上即會顯示 [ 讀取器統計資料報告 ]。

5. 從 [ 報告架構 ] 功能表選擇 [ 標籤統計資料 ]。

第 3 章 RFID Information Server 報告架構 29

Page 30: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

6. 輸入 「標籤號碼」,例如:urn:epc:id:gid:1.301.1,然後按一下 [ 提交查詢 ]。

瀏覽器上即會顯示 [ 標籤統計資料報告 ]。

30 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 31: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

7. 從 [ 報告架構 ] 功能表選擇 [ 標籤關聯 ]。

即會顯示 [ 標籤關聯 ] 查詢頁。

8. 輸入 「標籤號碼」。例如:urn:epc:id:gid:1.301.1,然後按一下 [ 提交查詢 ]。

第 3 章 RFID Information Server 報告架構 31

Page 32: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

32 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 33: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

第 章4

ALE Web Service

本章說明在 Sun Java System RFID Software 2.0 中如何實作 EPCglobal Application Level Events (ALE) 規格,亦稱為集合和篩選。ALE 是一種 Web 服務,其中包含 WSDL 以定義、配置並請求報告。同時還包含 XML 模式,可用於報告本身以及請求報告。在使用 ALE 元件之前,您必須非常熟悉 1.0 版 Application Level Events (ALE) 規格。您可以造訪 EPCglobal 網站取得此規格:http://www.epcglobalinc.com。

本章包含下列主題:

■ 第 33 頁的 「主要的架構」■ 第 34 頁的 「ALE 服務架構」■ 第 36 頁的 「其他注意事項」■ 第 37 頁的 「使用 ALE Web Services Client (ALEClient) API」

主要的架構Sun Java RFID Software 使用 Java API for XML-based RPC (JAX-RPC) 實作 ALE Web Service。其包含在 sun-ale-service.war 檔中並且會部署到應用程式伺服器,例如 Sun Java System Application Server 7、8.1 或 BEA WebLogic 8.1。這個服務將做為與 RFID Event Manager 內包含的 Jini RMI 服務之間的中繼程式。

在 RFID Event Manager 中實作 ALE 時要依據名稱為 ALE 的新的 Rio 服務。這個服務將規格中所說明的 WSDL 方法實作成 RMI,而非 WSDL。報告請求與報告訊息會被實作成 com.sun.autoid.ale.spec 套裝模組中的 POJO ( 普通的 Java 物件 )。

33

Page 34: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

若要符合 ALE 規格,需要使用 JAX-RPC 來處理 ALE WSDL,以產生 Java Web 服務類別。這些類別包含用戶端類別,並搭配使用 com.sun.autoid.ale.spec 中所包含的 POJO 物件。ALE WSDL 通用伺服器和用戶端程式碼都已封裝於 sun-alesvc-common.jar 中。實作 ALE 用戶端 API 可以隱藏 JAX-RPC 程式碼的部分複雜性。在名為 「使用 ALE Web Services Client API」的章節中將會介紹 ALE 用戶端 API。在程式碼範例 4-2 中列示了一個使用 ALE 用戶端 API 的範例。

使用 JAXB 來處理 ALE XML 模式,而產生的檔案則放置到 com.sun.autoid.ale.xml 套裝模組中。JAXB 產生的物件和 com.sun.autoid.ale.spec 中的類別之間,通常都有一對一的對映關係。com.sun.autoid.ale.XMLUtil 類別提供的方法可在 JAXB 表示法和規格類別的 POJO 表示法之間來回轉換。

ALE 功能中要求必須依據 ALE 請求來註冊讀取器事件。因此,ALE 服務會發現所有的讀取器,而當處理某請求時,ALE 服務便會向讀取器上的事件產生者 ( 連接器中的 com.sun.autoid.logger.REProducer) 註冊。稍後將詳細介紹這項操作的做法。

ALE 服務架構在 RFID Event Manager 中 ALE 服務將會部署為 Jini RMI 服務。每一個 ALE 報告請求都會被轉譯至事件處理網路,包含裝置、濾波器和連接器。

ALE 規格中採納了實體讀取器和邏輯讀取器之概念。邏輯讀取器可包括一個或多個實體讀取器。若要發現實體或邏輯讀取器,可以擴展 Rio 類別 com.sun.rio.event.EventDescriptor 以產生 RFID Event Manager 共用類別 com.sun.autoid.event.ReaderEventDescriptor。這個類別會增加兩個新特性:logical 和 physical。若要在 ALE 實作時應用讀取器,其配置必須包含一個 REProducer,定義實體讀取器和邏輯讀取器名稱。於讀取器配置檔 RfidConfig.xml 中定義實體讀取器名稱,此名稱必須與 readers.xml 檔 ( 位於 /etc/opt/sun/rfidem) 中定義的服務名稱相符。這個元件的最適當的位置是直接連接到讀取器配接卡,不過並不強制要求。

34 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 35: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

ALE 服務持續監視 Jini 查詢服務以發現 ReaderEventDescriptors,並使用它來維護一個所發現的讀取器清單。當傳入 ALE 報告請求時,便會使用 Report Specification 中的邏輯和實體讀取器名稱來找出讀取器。從 ReaderEventDescriptor 可以找出 eventID 號碼,然後使用此號碼來探查連接到讀取器之正確 REProducer 的 REConsumer。

ALEEventFilter 會依照 ALE 規格中所述實作事件循環。如 ALE 規格中所述,事件循環是一種狀態機。基本上來說,會先啟動事件循環,收集標籤事件,而當事件循環完成時,標籤清單會被傳送至 ALEEventReportFilter。若要完全了解 ALEEventFilter,則必須了解 ALE 規格。ECSpec 說明了事件循環以及所要產生的一個或多個報告。它包括邏輯讀取器 ( 在事件循環中包含其讀取循環 ) 清單,決定事件循環範圍的規格,以及規格清單 ( 每一規格分別說明這個事件循環所產生的一個報告 )。程式碼範例 4-1 中列示了 ECSpec 的範例。

ALE 規格識別可啟動或停止事件循環的外部觸發條件。這些觸發條件會被指定為 Iris,但是 URI 的解譯則取決於實作。在 Sun 的實作中,URI 的運作方式如下:

■ EPC 式樣相符 URI - 當發現 EPC 有相符的式樣時便會觸發事件。

■ JMS URI - 指明接收訊息的佇列或主題。

■ HTTP URI - 被開啟和讀取以接收訊息。

■ FILE URI - 被開啟和讀取以接收訊息。

■ TCP URI - 指明被開啟和讀取以接收訊息的通訊端。

■ 其他的則一律預設為引起觸發。

對於 JMS、HTTP、FILE 和 TCP URI,有效負載的格式是簡單的 XML 文件。例如:

如 ALE 規格所定義,ALEEventFilter 會在事件循環結尾處建立 ALEEvent,其中包含標籤清單以及產生標籤事件的讀取器清單。這會傳送到 ALEEventReportFilter,其讀取輸入並建立 MiscEvent,其中包含保存 ECReport 物件的特性。

在 ALE 規格中,報告的定義以及訂閱以接收報告輸出是兩個截然不同的作業。因此,當傳入訂閱請求時,便會建立特殊的記錄程式以處理請求。

<Trigger fired=”true” /><Trigger fired=”false”/>

第 4 章 ALE Web Service 35

Page 36: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

記錄程式的類型為:

■ JMS 記錄程式 - 報告 XML 會被併入為 JMS 佇列或主題的有效負載訊息

■ File 記錄程式 - 報告 XML 被寫入至本機檔案的位置

■ TCP 記錄程式 - 報告被寫入通訊端的位置

■ Poll 記錄程式 - 報告被以 「字串」形式傳回至輪詢請求的位置

■ 所有其他記錄程式都被當成 URL 來對待,可以開啟並寫入

必須等到至少一位訂閱者註冊要接收報告才能啟動事件循環。註冊訂閱時,便會建立適當的 Logger 並動態連結到 ALEEventReportFilter。同樣地,當移除訂閱時,Logger 便會停止並切斷與 ALEEventReportFilter 的連線。

最後,當 「未定義」報告規格時,會停止正在處理的所有元件並從 ALE 服務動態地移除這些元件。

其他注意事項由於 ALE 已實作成 RFID Event Manager 元件,因此這些元件的使用方式與其他元件相同。已作了準備可透過元件特性設定 ECSpec。這樣的話,ALE 元件便可以永久地附加至讀取器 ( 如果需要的話 )。「Sun Java System RFID Software 2.0 管理指南」中的附錄 C 顯示了這項動作的配置檔範例。

程式碼範例 4-1 ECSpec 範例檔

<?xml version="1.0" encoding="UTF-8"?><ECSpec xmlns="urn:epcglobal:ale:xsd:1"

includeSpecInReports="true"creationDate="2005-02-07T13:42:40.790-05:00"schemaVersion="1.0">

36 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 37: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

使用 ALE Web Services Client (ALEClient) API實作 ALE 用戶端 API 可以隱藏 JAX-RPC 程式碼的部分複雜性。

ALE Web Services Client 介面和實作

在 com.sun.autoid.ale.AleAPI.class 檔中包含 ALE 用戶端 API 的介面。在 com.sun.autoid.ale.AleAPI.class 中包含 ALE 用戶端 API 的實作。這兩個類別都已封裝於 sun-alesvc-common.jar 中。

<logicalReaders xmlns=""><logicalReader>Reader</logicalReader>

</logicalReaders><boundarySpec xmlns=""><startTrigger>http://localhost/start</startTrigger><duration>2000</duration><stableSetInterval>0</stableSetInterval>

</boundarySpec><reportSpecs xmlns=””><reportSpec reportIfEmpty=”false”

reportName="reporT"reportOnlyOnChange=”false”>

<reportSet set="CURRENT"/><output includeCount=”false” includeList="true"/>

</reportSpec></reportSpecs>

</ECSpec>

程式碼範例 4-1 ECSpec 範例檔 ( 續 )

第 4 章 ALE Web Service 37

Page 38: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

範例程式 - MyAleClient.java兩個 JAR 檔:sun-alesvr-common.jar 和 sun-rfid-common.jar,需要複製到開發目錄的 lib 目錄下。在安裝 RFID Event Manager 以及選用性元件 ALE Web Service 的機器上可以找到它們。目錄名稱為 install_dir/lib。請參閱 「Sun Java System RFID Software 2.0 安裝指南」以取得附錄 C 中的預設目錄。

■ 從 install_dir/lib 到 install_dir/samples/ale/aleclient/lib,複製 sun-alesvr-common.jar 和 sun-rfid-common.jar。

範例程式 MyAleClient 使用 ALE Web Services Client 介面 AleAPI.class 和實作類別 ALEClient.class,它與 ALE Web Service 元件封裝在一起。MyAleClient.java 範例程式的範例目錄和環境安裝在 install_dir/samples/ale/aleclient。若要安裝 ALE Web Service 元件,請參考「Sun Java System RFID Software 2.0 安裝指南」的第 3 章。

範例開發環境

下列區段說明範例開發環境。提供這些程式碼的用意是要幫助您設定必要的環境,並使用 Sun ALE Web Services Client API,快速開發 ALE Web Service 應用程式。

範例開發目錄

程式碼範例 4-2 中列示了開發目錄樹狀結構範例。

程式碼範例 4-2 開發目錄樹狀結構範例

aleclient- src (contains the source)* com/sun/epcglobal/aleclient/MyAleClient.java

- classes (contains the compiled class files)- lib (contains Sun RFID and ALE JAR files)

- sun-alesvc-common.jar- sun-rfid-common.jar

- xml (contains the ECSpec XML file)- ECSpec.xml

* build.xml* build_properties.xml

38 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 39: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

Java Web Services Developer Pack 1.5

需要使用 Java Web Services Developer Pack (Java WSDP) 1.5 來編譯和執行程式。程式碼範例 4-3 中列示了 Java WSDP 的目錄結構。

ANT Build XML 檔範例

範例 ANT build.xml 和 build_properties.xml 可用來建置和執行 MyAleClient。它們位於 install_dir/samples/ale/elegant 目錄。

程式碼範例 4-3 Java WSDP 1.4 目錄樹狀結構範例

jwsdp- jaxb/lib/*.jar- jaxp/lib/*.jar- jaxp/lib/endorsed/*.jar- jaxrpc/lib/*.jar- jwsdp-shared/lib/*.jar- saaj/lib/*.jar

第 4 章 ALE Web Service 39

Page 40: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

40 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 41: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

第 章5

PML 公用程式

本章將會介紹 Sun Java System RFID Software PML 公用程式。其中包含下列章節:

■ 第 41 頁的 「簡介」■ 第 42 頁的 「使用 PML Core 擷取標籤觀察」■ 第 43 頁的 「PML 公用程式套裝模組」■ 第 46 頁的 「類別路徑需求」■ 第 47 頁的 「PML 套裝模組的 UML 類別圖」

簡介實體標記語言核心 (PML Core) 的用途是提供標準的格式,以利於交換 RFID 基礎架構中的感應器 ( 例如,RFID 讀取器 ) 所擷取到的資料。在 Event Manager 和其他應用程式之間會交換這類資料。PML Core 提供了一組 XML 模式,為傳輸擷取到的資料值定義交換格式。

PML 公用程式 Java 程式庫 (pml-util.jar) 提供的輔助程式類別可以剖析和處理 PML Core 訊息。這個程式庫主要是用在與 Event Manager 互動的所有應用程式。

支援的版本為 PML_Core v1.0 (2003 年 9 月 15 AutoID Center 建議 )。

41

Page 42: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

使用 PML Core 擷取標籤觀察本節說明擷取標籤觀察的範例核心訊息。

程式碼範例 5-1 擷取標籤觀察的範例核心訊息

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!-- The root element of PML Core --><Sensor xmlns="urn:autoid:specification:interchange:PMLCore:xml:schema:1"><!-- The EPC of the reader specified in the reader adapter properties -->

<ns1:ID xmlns:ns1="urn:autoid:specification:universal:Identifier:xml:schema:1">urn:epc:id:gid:1.1.100

</ns1:ID><!-- The root element for an observation --><Observation>

<ns2:ID xmlns:ns2="urn:autoid:specification:universal:Identifier:xml:schema:1">2

</ns2:ID><!-- The time when the observation was recorded by the reader adapter -->

<DateTime>2004-05-21T18:28:16.633-07:00</DateTime><!-- If the PML is generated from a Delta Event the value of Command is either TagsIn or TagsOut -->

<Command>TagsOut</Command><!-- A tag observation -->

<Tag> <!-- The EPC of the observed tag in identity URI format -->

<ns3:ID xmlns:ns3="urn:autoid:specification:universal:Identifier:xml:schema:1">urn:epc:id:gid:1.1.110</ns3:ID>

</Tag> <Tag>

<ns4:ID xmlns:ns4="urn:autoid:specification:universal:Identifier:xml:schema:1">urn:epc:id:gid:1.1.105</ns4:ID>

</Tag><Tag>

<ns5:ID xmlns:ns5="urn:autoid:specification:universal:Identifier:xml:schema:1">urn:epc:id:gid:1.1.104</ns5:ID>

</Tag></Observation>

</Sensor>

42 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 43: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

PML 公用程式套裝模組本節說明下列 PML 公用程式套裝模組:

■ 套裝模組 - com.sun.autoid.pmlcore.pml■ 套裝模組 - com.sun.autoid.pmlcore.pmlparser

PML Core 套裝模組

com.sun.autoid.pmlcore.pml 套裝模組是使用 JAXB 編譯器從 PML Core XML 模式文件中產生而來的。產生的類別可用來檢查現有的 Java 物件圖或建立新圖。請參閱程式碼範例 5-2。

程式碼範例 5-2 建立新 PML 訊息的範例 XML

/** * Create a sample PML Core XML message. */ public SensorType createPMLCore() { SensorType sensor = null; try { PmlParser pmlParser = new PmlParser(); ObjectFactory objFactory = pmlParser.getPMLObjectFactory(); sensor = objFactory.createSensor(); /* Create the reader EPC */ IdentifierType idType = objFactory.createIdentifierType(); idType.setValue("urn:epc:id:gid:1.700.1"); sensor.setID(idType); /* Create the Observation object */ List obsList = sensor.getObservation(); ObservationType obs = objFactory.createObservationType(); obsList.add(obs); /* Timestamp of the observation */ obs.setDateTime(Calendar.getInstance()); /* The command element is optional. if specified it is either : TagsIn or TagsOut */ obs.setCommand("TagsIn");

第 5 章 PML 公用程式 43

Page 44: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

/* Observation ID is currently ignored */ idType = objFactory.createIdentifierType(); idType.setValue("1"); obs.setID(idType); /* create Tags and assign them to the Observation object */ TagType tag = objFactory.createTagType(); idType = objFactory.createIdentifierType(); idType.setValue("urn:epc:id:gid:10.10.1"); tag.setID(idType); obs.getTag().add(tag); tag = objFactory.createTagType(); idType = objFactory.createIdentifierType(); idType.setValue("urn:epc:id:gid:10.10.2"); tag.setID(idType); obs.getTag().add(tag); /* debug */ System.out.println("Sensor BEGIN"); SensorUtil.dump((com.sun.autoid.pmlcore.pml.Sensor)sensor); System.out.println("Sensor END"); } catch (JAXBException jbe) { jbe.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return sensor; }

程式碼範例 5-2 建立新 PML 訊息的範例 XML( 續 )

44 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 45: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

PML 剖析器套裝模組

使用 PmlParser 取消編組 XML 檔

表 5-1 資料庫表格

Java 類別 描述元

PmlParser 讀取產品標記語言並建立 Java 物件圖的剖析器。

SensorUtil 傾印感應器 JAXB 樹狀結構的類別。

程式碼範例 5-3 取消編組 PML Core XML 檔的範例 XML

/* Unmarshall a PML Core XML file */ public Sensor pmlCoreFromFile() { Sensor sensor = null; try {

/* Create an instance of PmlParser */ PmlParser pmlParser = new PmlParser(); /* Call the unmarshall method */ sensor = pmlParser.unmarshalPML(new File("./pml_sample.xml")); /* debug message */ System.out.println("Sensor BEGIN"); SensorUtil.dump(sensor); System.out.println("Sensor END"); } catch (JAXBException jbe) { jbe.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return sensor; }

第 5 章 PML 公用程式 45

Page 46: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

類別路徑需求程式碼範例 5-4 會列示用來編譯和執行使用 PML 公用程式的應用程式的 JAR 檔 (JAXB 1.0.4 以及附屬於 Java WSDP 1.5 的 JAR 檔 )。

程式碼範例 5-4 PML 公用程式 Jar 檔

$JWSDP_HOME/jaxb/lib/jaxb-api.jar$JWSDP_HOME/jaxb/lib/jaxb-impl.jar$JWSDP_HOME/jaxb/lib/jaxb-libs.jar

$JWSDP_HOME/jwsdp-shared/lib/namespace.jar$JWSDP_HOME/jwsdp-shared/lib/relaxngDatatype.jar$JWSDP_HOME/jwsdp-shared/lib/jax-qname.jar$JWSDP_HOME/jwsdp-shared/lib/xsdlib.jar

$JWSDP_HOME/jaxp/lib/jaxp-api.jar$JWSDP_HOME/jaxp/lib/endorsed/dom.jar$JWSDP_HOME/jaxp/lib/endorsed/sax.jar$JWSDP_HOME/jaxp/lib/endorsed/xercesImpl.jar

46 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月

Page 47: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

PML 套裝模組的 UML 類別圖

第 5 章 PML 公用程式 47

Page 48: 開發者指南 - docs.oracle.com · 用於企業軟體開發者,用以從 RFID 標籤讀取器系統取得資料。開發者指南不適用於讀 取器配接卡的開發者。有關讀取器配接卡的資訊,請參閱「Sun

48 Sun Java System RFID Software 2.0 開發者指南 • 2005 年 4 月