程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 構建用於位置信息開放標准的Portlet

構建用於位置信息開放標准的Portlet

編輯:Oracle數據庫基礎

在商業活動中,信息決定一切。隨著企業門戶的出現,獲取相關信息已經變得象登錄一個網站並使用一個口令那樣簡單。企業門戶已經不僅僅是自定義的執行儀表板,而成為一種必不可少的背景,所有最終用戶(員工、市民和客戶等等)可以通過它立即獲得所需的信息,而不必安裝特別的軟件(除一個標准浏覽器外)、使用特定的操作系統和/或設備或者打開多個窗口。

對於位置信息而言同樣如此。在先前的一篇文章(“在企業報表中使用位置信息”)中,我指出“位置信息無處不在;可以在各種公司、所有行業,以及幾乎世界上每一個機構和部門中找到位置信息。”隨著該文章的發表和像 2005 年位置技術與商務智能大會這樣場合中對基於位置的智能的推崇,從未如此明顯地表明,找出位置數據中的模式(就像它與關系數據共存一樣)即使不是必需的,也是越來越重要。現在,管理人員、分析人員和市民都需要了解與位置有關的信息,並且他們希望隨時都可以獲得這些信息。

現在,我們有能力滿足這些需求。隨著企業門戶逐漸成為所有機構和各行業的標准,找到將不同信息和應用程序集成到所有門戶框架中的新方法已經變得非常必要。在某種意義上,門戶的確切定義應該是:“一個匯集內容、應用程序和服務的地方”(Laura Ramos,Forrester Research,“門戶定義更新:發展成為協作業務平台”,2002 年 12 月 18 日),而不必重新定義或重新開發內容、應用程序和/或服務。

因此,為了能夠將內容、應用程序和服務匯集到門戶以實現共享,企業門戶供應商們已經協助通過了兩個以通過 portlet 共享這些內容為中心的新門戶標准:用於遠程 Portlet 的 OASIS Web 服務 (WSRP) 和 Java 規范請求 168 (JSR 168)。因為這些新標准使得將所有信息和應用程序作為 portlet 進行共享變得很容易,所以將位置加入方程式也就變得容易了 — 如在商務智能 portlet 的旁邊構建位置 portlet(地圖)。

在本文中,我將討論如何使用諸如 WSRP 和 JSR 168 等開放標准來開發那些將位置信息與應用程序(如地理地圖)合並在一起的 portlet。本文介紹的所有 portlet 代碼都可以注冊到支持 portlet 標准 WSRP 和 JSR 168 的任何供應商的門戶解決方案中。

定義地圖

以下示例使用 Oracle 應用服務器 MapViewer (Oracle MapVIEwer) 和 Oracle JDeveloper 10g 來定義和開發基於 Web 的動態地圖。雖然從理論上講,使用任何基於 Web 的地圖制作技術都可以獲得同樣的效果,但是使用 Oracle MapVIEwer 會更簡單,這是因為它提供 Java 和 XML API 以及一個 JavaServer Page 標記庫,所以任何人(從初學的開發人員到較高級的開發人員)都將發現,將地圖集成到現有的和新的開發項目中是何等簡單(而且功能相當強大)。有關更多信息(包括下載和安裝說明),請參見 http://www.Oracle.com/technology/products/mapvIEwer/index.Html。

在我的上一篇文章“在企業報表中使用位置信息”中,我講述了如何使用地圖定義工具和/或 Oracle SQL*Plus 為 Oracle MapVIEwer 定義地圖。出於連貫性和簡單性考慮,本文使用同一示例(包括 OE 模式中所的示例數據,這些數據最初是在 Oracle 示例:“進行基於位置的分析”建立起來)。

與其他地圖呈現工具一樣,Oracle MapVIEwer 使用樣式(顏色、標記、線、面積、文本、符號以及高級樣式)和主題(有時稱為圖層)的概念來創建動態地圖。這些屬性的定義以及實際地圖的定義以 XML 格式和位置信息一起存儲在數據庫中。

要創建屬性和/或地圖定義,可以對數據庫執行標准 SQL 插入/更新操作,如:

SQL> insert into USER_SDO_STYLES values(
'V.PIECHART1', 'ADVANCED', null, 
'








',  null, null);

或者可以使用所提供的地圖定義工具(見圖 1),它可以為您完成大部分工作。

圖 1:地圖定義工具

Oracle Internet 應用服務器附帶的標准 Oracle MapVIEwer 下載或部署包含一組樣式、主題、基本地圖和示例代碼。對於我們的示例而言,您只需復制一個基本地圖、添加兩個主題即可。因為您可以使用 SQL 和工具訪問數據庫中的地圖定義,所以復制地圖定義的最簡單方法就是執行一個 SQL 語句,如下所示。(在執行語句之前,請仔細看看與 Oracle MapVIEwer 相關的視圖 user_sdo_styles、user_sdo_themes 和 user_sdo_maps,以更好地理解它們的工作原理。)

SQL> insert into user_sdo_maps
2  values('WAREHOUSES_AND_CUSTOMERS', 'customers and warehouses',
3  (select definition from user_sdo_maps where name='DENSITY_MAP'));

1 row created.

SQL> commit;

Commit complete.

現在您就有一個名為 WAREHOUSES_AND_CUSTOMERS 的新基本地圖了,您將使用地圖定義工具向它添加一些主題。首先,切換到包含 mapdef.jar 的目錄,執行以下命令連接到存儲著我們地圖定義的 Oracle 數據庫實例:

Java -classpath mapdef.jar;d:\oracle\ora92\jdbc\lib\classes12.jar
-Dhost="localhost"  -Dsid="orcl" -Dport="1521"
Oracle.eLocation.console.GeneralManager

接著,創建兩個主題,CUSTOMERS 和 WAREHOUSES(見圖 2 和圖 3)。

圖 2:創建 CUSTOMERS 主題

圖 3:創建 WAREHOUSES 主題

在創建 customers 和 warehouses 主題後,將它們添加到我們新的 WAREHOUSES_AND_CUSTOMERS 基本地圖中(見圖 4)。

圖 4:創建 WAREHOUSES_AND_CUSTOMERS 地圖定義

請注意 Min Scale 元素和 Max Scale 元素,它們用於定義根據請求的縮放級別在給定地圖上顯示哪些主題。在更新地圖定義(通過單擊 Update 按鈕)後,您可以開始使用它們來構建基於客戶請求的動態地圖了。測試我們的地圖是否可用的一個簡單方法就是把這個新地圖定義的名稱 WAREHOUSES_AND_CUSTOMERS 插入我們的 Oracle MapViewer 演示應用程序中。為此,切換到我們的 Oracle MapVIEwer 簡單地圖客戶端(Oracle MapViewer URL 上的 mapclIEnt.JSP),輸入必要的值(見圖 5)。

圖 5:演示地圖客戶端

請注意,mapclIEnt.JSP 示例應用程序還會顯示向 Oracle MapVIEwer 服務器發出的執行請求 — 這是任何客戶端或開發語言都能夠發出的 XML 請求。如果所有的定義和連接值都正確,則會根據請求構建一幅地圖(或者是一個指向地圖圖像的 URL)。

構建 Portlet 框架

如果使用恰當的工具,則使用諸如 JSR 168 和 WSRP 等最新標准開發 portlet 就可以相當省事。幸運的是,Oracle Internet 應用服務器門戶小組已經為 Oracle JDeveloper 10g 開發了這樣的一種工具,即“門戶插件”。門戶插件是 Oracle JDeveloper 10g 的一個擴展,它實現了使用向導快速輕松地生成 Java (JSR 168) portlet 框架。一旦您使用 JSR 168 規范開發出 portlet,就可以將其部署到任何支持此標准的應用服務器(包括 Oracle Internet 應用服務器)上,並通過 WSRP 調用它們。有關門戶插件或 portlet 標准的信息,請參見:http://portalstandards.Oracle.com。

為使用 JDeveloper 10g 開發我們的 portlet 框架,首先創建一個名為 WSRPMapPortlet 的新工作區;對於此工作區,使用默認的 Web 應用程序模板(見圖 6)。

圖 6:創建新的應用程序工作區

在新創建的工作區中單擊 ViewController 項目,選擇“new”從多個擴展中啟動一個擴展。雖然您在“Web Tier”部分中可能沒有看到 portlet 向導,但是如果您選擇根據“all technologies”而非“project technologIEs”來進行篩選,則 portlet 向導將會出現。在這裡,您選擇 Java Portlet 向導,它會指引您完成創建 Java 標准 portlet 的全過程(見圖 7)。

圖 7:Java portlet 的創建

雖然在 Java Portlet 向導中有很多可定義的選項,但對於本示例您將主要選擇默認值(見圖 8 到圖 11)。有關其他 Java Portlet 向導選項的完整文檔,請參見 Oracle Internet 應用服務器門戶開發人員指南。

圖 8:指定 portlet 類

圖 9:指定 portlet 名稱

圖 10:查看 portlet 模式

圖 11:Portlet vIEw.JSP 頁面

既然我們的開放 portlet 框架已經完成,那就可以將我們的 Oracle MapVIEwer 代碼添加到其中了。

將 Oracle MapVIEwer 與開放標准的 Portlet 相集成

為簡單起見,您將使用 MapVIEwer JSP 標記庫調用我們的 MapVIEwer 實例,並將基於 Web 的動態地圖返回到我們的 portlet 中,就像先前的 Oracle MapViewer 示例那樣。總的來說,使用 MapVIEwer JSP 標記庫不僅簡單,而且文檔翔實,堪稱一個靈活的解決方案。有關方法文檔,請參見 http://www.Oracle.com/technology/products/jdev/howtos/10g/map/mv_jdev_howto.htm。

現在,為將代碼添加到我們新近創建的 portlet 框架中,在 JDeveloper 中雙擊 vIEw.JSP 文件將其打開。在 JDeveloper 設計模式中,您現在可以隨意添加任何格式或內容,而無需鑽研復雜的 Html — 對於此項目,使用居中圖標將內容居中。當您處於設計視圖中時,您還可以拖曳、刪除和定義我們的標記。要使用 Oracle MapViewer 標記,從 Component Palette(通常在 JDeveloper 10g 的右上角)中選擇 MapViewer 標記庫。從 MapViewer 標記庫中,將 init 標記拖到頁面中,緊挨著 Portlet 向導添加的 defineObjects 標記下方放下。可以看到,init 標記有三個字段,其中兩個必須填寫 — 用以下信息填寫所有三個字段:URL (http://www.yourserver.com/mapvIEwer/omserver)、datasource (mvdemo) 和 用戶定義的 ID (mvHandle) — 見圖 12。

圖 12:添加 init 標記和適當的說明

下一步是將 setParam 標記添加到頁面中。請注意,雖然 setParam 標記不彈出信息窗口,但如果您在頁面中選中該標記,則可以在 Property Inspector(通常在 JDeveloper 10g 的右下角)中設置 Oracle MapVIEwer 參數。在選中 setParam 標記時,填寫以下參數:antialiasing (true)、basemap (WAREHOUSES_AND_CUSTOMERS)、centerX (-122.4)、centerY (37.8)、height (450)、size (10)、title (My Map Portlet) 和 width (600) — 見圖 13。

圖 13:添加 setParam 標記和適當的說明

在填寫完 setParam 標記的參數之後,將 run 標記(它不需要任何參數)拖到頁面中(見圖 14)。

圖 14:添加 run 標記

最後,您已經能夠在 portlet 的上下文環境中呈現我們的地圖了。在先前用標記庫對我們的 Oracle MapVIEwer 實例的調用中,您基本上建立了整個地圖環境,Oracle MapVIEwer 實例隨後根據接收的 Run 命令已經構建了地圖圖像。現在您要做的就是將該圖像放在頁面上。為此,您必須首先將一個標准 HTML 圖像標記拖到頁面上(如果圖像是 SVG,則拖到一個對象標記上)。從 Component Palette 中選擇 HTML,將圖像標記拖到頁面上,單擊 source 選項卡,查看我們頁面的 JSP/HTML 源代碼。再次在 Component Palette 中選擇 MapVIEwer 標記庫,這次將 getMapURL 標記拖到圖像標記的空引號之間(現在圖像標記看上去應該如同這樣:"/>)。一旦頁面運行並且 Oracle MapVIEwer 創建該圖像,則 getMapURL 標記將會把一個實際的圖像 URL 返回給 Html 圖像標記(圖 15)。

圖 15:添加 Html 圖像標記和 Oracle MapVIEwer getMapURL 標記

這時,您已擁有足夠的代碼來部署我們的 portlet,使之可在任何門戶上使用來查看我們的地圖。這還為您添加更多邏輯提供了一個好的起點,從而能夠為不同的請求添加不同版本的地圖。但是,就本示例而言也就這些了。


部署和注冊支持位置的 Portlet

您現在可以將我們的 portlet 部署到符合 WSRP/JSR 168 標准的 portlet 容器中,如 Oracle Container for J2EE (OC4J)。為此,在 Web Content>WEB-INF 文件夾的 VIEwController 項目中右鍵單擊 web.XML 文件,並選擇“Create WAR deployment profile”。選擇 WSRPMapPortlet 作為部署配置文件的名稱,還要用同一名稱 (WSRPMapPortlet) 指定我們的 J2EE Web 上下文根目錄 — 見圖 16。

圖 16:創建部署配置文件

一旦您構建了部署配置文件,就可以右鍵單擊它,選擇將項目部署為 WAR 或 EAR 文件,或者部署到您選擇的應用服務器上。在我們這種情況下,選擇將項目直接部署到我們的 portlet_container 所在的 OC4J 實例中(圖 17)。

圖 17:將 portlet 部署到 portlet 容器

在成功部署之後,您可以通過導航到 http://www.yourserver.com/WSRPMapPortlet/portlets?WSDL 查看 WSRP-WSDL 頁面。這一地址就是您用來將我們新的 portlet 注冊到門戶的地址(圖 18)。

圖 18:Portlet WSRP 規范

測試新創建的 WSRPMapPortlet 的最簡單方法是使用 Oracle Portal/WSRP 驗證服務器,它是 Oracle 應用服務器門戶的一個托管預發行版本,能夠與 WSRP 生成器/portlet 進行通信。只要能夠從我們公司的防火牆之外調用我們的 portlet,通過此服務來驗證其生成您剛剛創建的內容的能力就相當簡單(圖 19)。

圖 19:測試 WSRP 地圖 portlet

有關驗證過程的信息,請參見此文檔。

結論

由於諸如門戶和智能數據等集成技術成為業務基礎架構的關鍵部分,因此共享我們所使用的信息和我們所構建的應用程序 (portlet) 的能力就變得非常必要(如果不是法定要求的話)。如今,我們不僅擁有創建符合開放標准的新應用程序所需的所有要素,而且我們擁有框架標准,如 JSR 168 和 WSRP,它們能夠將現有的技術和數據集成到新的應用程序中。這些新技術與現有技術(如 GIS 和門戶)的交匯點是我們最終能夠從所有數據中獲得實際智能並能避免復雜難關的突破口。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved