構(gòu)建用于位置信息的開放標(biāo)準(zhǔn)的 Portlet | ||||||||||||||||||||||||||||||||||||||||
作者:Justin L… 文章來源:OTN 點(diǎn)擊數(shù):76 更新時間:2006-7-16 | ||||||||||||||||||||||||||||||||||||||||
【字體:小 大】 | ||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||
如果您有任何疑問,請到開發(fā)論壇上提問。 | ||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||
了解如何將地理地圖集成到開放標(biāo)準(zhǔn)的 portlet 中。
在商業(yè)活動中,信息決定一切。隨著企業(yè)門戶的出現(xiàn),獲取相關(guān)信息已經(jīng)變得象登錄一個網(wǎng)站并使用一個口令那樣簡單。企業(yè)門戶已經(jīng)不僅僅是自定義的執(zhí)行儀表板,而成為一種必不可少的背景,所有最終用戶(員工、市民和客戶等等)可以通過它立即獲得所需的信息,而不必安裝特別的軟件(除一個標(biāo)準(zhǔn)瀏覽器外)、使用特定的操作系統(tǒng)和/或設(shè)備或者打開多個窗口。 對于位置信息而言同樣如此。在先前的一篇文章(“在企業(yè)報表中使用位置信息”)中,我指出“位置信息無處不在;可以在各種公司、所有行業(yè),以及幾乎世界上每一個機(jī)構(gòu)和部門中找到位置信息。”隨著該文章的發(fā)表和像 2005 年位置技術(shù)與商務(wù)智能大會這樣場合中對基于位置的智能的推崇,從未如此明顯地表明,找出位置數(shù)據(jù)中的模式(就像它與關(guān)系數(shù)據(jù)共存一樣)即使不是必需的,也是越來越重要?,F(xiàn)在,管理人員、分析人員和市民都需要了解與位置有關(guān)的信息,并且他們希望隨時都可以獲得這些信息。 現(xiàn)在,我們有能力滿足這些需求。隨著企業(yè)門戶逐漸成為所有機(jī)構(gòu)和各行業(yè)的標(biāo)準(zhǔn),找到將不同信息和應(yīng)用程序集成到所有門戶框架中的新方法已經(jīng)變得非常必要。在某種意義上,門戶的確切定義應(yīng)該是:“一個匯集內(nèi)容、應(yīng)用程序和服務(wù)的地方”(Laura Ramos,F(xiàn)orrester Research,“門戶定義更新:發(fā)展成為協(xié)作業(yè)務(wù)平臺”,2002 年 12 月 18 日),而不必重新定義或重新開發(fā)內(nèi)容、應(yīng)用程序和/或服務(wù)。 因此,為了能夠?qū)?nèi)容、應(yīng)用程序和服務(wù)匯集到門戶以實(shí)現(xiàn)共享,企業(yè)門戶供應(yīng)商們已經(jīng)協(xié)助通過了兩個以通過 portlet 共享這些內(nèi)容為中心的新門戶標(biāo)準(zhǔn):用于遠(yuǎn)程 Portlet 的 OASIS Web 服務(wù) (WSRP) 和 Java 規(guī)范請求 168 (JSR 168)。因?yàn)檫@些新標(biāo)準(zhǔn)使得將所有信息和應(yīng)用程序作為 portlet 進(jìn)行共享變得很容易,所以將位置加入方程式也就變得容易了 — 如在商務(wù)智能 portlet 的旁邊構(gòu)建位置 portlet(地圖)。 在本文中,我將討論如何使用諸如 WSRP 和 JSR 168 等開放標(biāo)準(zhǔn)來開發(fā)那些將位置信息與應(yīng)用程序(如地理地圖)合并在一起的 portlet。本文介紹的所有 portlet 代碼都可以注冊到支持 portlet 標(biāo)準(zhǔn) WSRP 和 JSR 168 的任何供應(yīng)商的門戶解決方案中。 定義地圖 以下示例使用 Oracle 應(yīng)用服務(wù)器 MapViewer (Oracle MapViewer) 和 Oracle JDeveloper 10g 來定義和開發(fā)基于 Web 的動態(tài)地圖。雖然從理論上講,使用任何基于 Web 的地圖制作技術(shù)都可以獲得同樣的效果,但是使用 Oracle MapViewer 會更簡單,這是因?yàn)樗峁?Java 和 XML API 以及一個 JavaServer Page 標(biāo)記庫,所以任何人(從初學(xué)的開發(fā)人員到較高級的開發(fā)人員)都將發(fā)現(xiàn),將地圖集成到現(xiàn)有的和新的開發(fā)項(xiàng)目中是何等簡單(而且功能相當(dāng)強(qiáng)大)。有關(guān)更多信息(包括下載和安裝說明),請參見 http://www.oracle.com/technology/products/mapviewer/index.html。 在我的上一篇文章“在企業(yè)報表中使用位置信息”中,我講述了如何使用地圖定義工具和/或 Oracle SQL*Plus 為 Oracle MapViewer 定義地圖。出于連貫性和簡單性考慮,本文使用同一示例(包括 OE 模式中所的示例數(shù)據(jù),這些數(shù)據(jù)最初是在 Oracle 示例:“進(jìn)行基于位置的分析”建立起來)。 與其他地圖呈現(xiàn)工具一樣,Oracle MapViewer 使用樣式(顏色、標(biāo)記、線、面積、文本、符號以及高級樣式)和主題(有時稱為圖層)的概念來創(chuàng)建動態(tài)地圖。這些屬性的定義以及實(shí)際地圖的定義以 XML 格式和位置信息一起存儲在數(shù)據(jù)庫中。 要創(chuàng)建屬性和/或地圖定義,可以對數(shù)據(jù)庫執(zhí)行標(biāo)準(zhǔn) SQL 插入/更新操作,如:
SQL> insert into USER_SDO_STYLES values( ‘V.PIECHART1‘, ‘ADVANCED‘, null, ‘<?xml version="1.0" ?> <AdvancedStyle> <PieChartStyle pieradius="10"> <PieSlice name="A" color="#ffff00" /> <PieSlice name="B" color="#000000" /> <PieSlice name="H" color="#ff00ff" /> <PieSlice name="I" color="#0000ff" /> <PieSlice name="W" color="#ffffff" /> </PieChartStyle> </AdvancedStyle>‘, null, null);
或者可以使用所提供的地圖定義工具(見圖 1),它可以為您完成大部分工作。
Oracle Internet 應(yīng)用服務(wù)器附帶的標(biāo)準(zhǔn) Oracle MapViewer 下載或部署包含一組樣式、主題、基本地圖和示例代碼。對于我們的示例而言,您只需復(fù)制一個基本地圖、添加兩個主題即可。因?yàn)槟梢允褂?SQL 和工具訪問數(shù)據(jù)庫中的地圖定義,所以復(fù)制地圖定義的最簡單方法就是執(zhí)行一個 SQL 語句,如下所示。(在執(zhí)行語句之前,請仔細(xì)看看與 Oracle MapViewer 相關(guān)的視圖 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.
現(xiàn)在您就有一個名為 WAREHOUSES_AND_CUSTOMERS 的新基本地圖了,您將使用地圖定義工具向它添加一些主題。首先,切換到包含 mapdef.jar 的目錄,執(zhí)行以下命令連接到存儲著我們地圖定義的 Oracle 數(shù)據(jù)庫實(shí)例:
java -classpath mapdef.jar;d:\oracle\ora92\jdbc\lib\classes12.jar -Dhost="localhost" -Dsid="orcl" -Dport="1521" oracle.eLocation.console.GeneralManager
接著,創(chuàng)建兩個主題,CUSTOMERS 和 WAREHOUSES(見圖 2 和圖 3)。
在創(chuàng)建 customers 和 warehouses 主題后,將它們添加到我們新的 WAREHOUSES_AND_CUSTOMERS 基本地圖中(見圖 4)。
請注意 Min Scale 元素和 Max Scale 元素,它們用于定義根據(jù)請求的縮放級別在給定地圖上顯示哪些主題。在更新地圖定義(通過單擊 Update 按鈕)后,您可以開始使用它們來構(gòu)建基于客戶請求的動態(tài)地圖了。測試我們的地圖是否可用的一個簡單方法就是把這個新地圖定義的名稱 WAREHOUSES_AND_CUSTOMERS 插入我們的 Oracle MapViewer 演示應(yīng)用程序中。為此,切換到我們的 Oracle MapViewer 簡單地圖客戶端(Oracle MapViewer URL 上的 mapclient.jsp),輸入必要的值(見圖 5)。
請注意,mapclient.jsp 示例應(yīng)用程序還會顯示向 Oracle MapViewer 服務(wù)器發(fā)出的執(zhí)行請求 — 這是任何客戶端或開發(fā)語言都能夠發(fā)出的 XML 請求。如果所有的定義和連接值都正確,則會根據(jù)請求構(gòu)建一幅地圖(或者是一個指向地圖圖像的 URL)。 構(gòu)建 Portlet 框架 如果使用恰當(dāng)?shù)墓ぞ?,則使用諸如 JSR 168 和 WSRP 等最新標(biāo)準(zhǔn)開發(fā) portlet 就可以相當(dāng)省事。幸運(yùn)的是,Oracle Internet 應(yīng)用服務(wù)器門戶小組已經(jīng)為 Oracle JDeveloper 10g 開發(fā)了這樣的一種工具,即“門戶插件”。門戶插件是 Oracle JDeveloper 10g 的一個擴(kuò)展,它實(shí)現(xiàn)了使用向?qū)Э焖佥p松地生成 Java (JSR 168) portlet 框架。一旦您使用 JSR 168 規(guī)范開發(fā)出 portlet,就可以將其部署到任何支持此標(biāo)準(zhǔn)的應(yīng)用服務(wù)器(包括 Oracle Internet 應(yīng)用服務(wù)器)上,并通過 WSRP 調(diào)用它們。有關(guān)門戶插件或 portlet 標(biāo)準(zhǔn)的信息,請參見:http://portalstandards.oracle.com。 為使用 JDeveloper 10g 開發(fā)我們的 portlet 框架,首先創(chuàng)建一個名為 WSRPMapPortlet 的新工作區(qū);對于此工作區(qū),使用默認(rèn)的 Web 應(yīng)用程序模板(見圖 6)。
在新創(chuàng)建的工作區(qū)中單擊 ViewController 項(xiàng)目,選擇“new”從多個擴(kuò)展中啟動一個擴(kuò)展。雖然您在“Web Tier”部分中可能沒有看到 portlet 向?qū)?,但是如果您選擇根據(jù)“all technologies”而非“project technologies”來進(jìn)行篩選,則 portlet 向?qū)霈F(xiàn)。在這里,您選擇 Java Portlet 向?qū)В鼤敢瓿蓜?chuàng)建 Java 標(biāo)準(zhǔn) portlet 的全過程(見圖 7)。
雖然在 Java Portlet 向?qū)е杏泻芏嗫啥x的選項(xiàng),但對于本示例您將主要選擇默認(rèn)值(見圖 8 到圖 11)。有關(guān)其他 Java Portlet 向?qū)нx項(xiàng)的完整文檔,請參見 Oracle Internet 應(yīng)用服務(wù)器門戶開發(fā)人員指南。
既然我們的開放 portlet 框架已經(jīng)完成,那就可以將我們的 Oracle MapViewer 代碼添加到其中了。 將 Oracle MapViewer 與開放標(biāo)準(zhǔn)的 Portlet 相集成 為簡單起見,您將使用 MapViewer JSP 標(biāo)記庫調(diào)用我們的 MapViewer 實(shí)例,并將基于 Web 的動態(tài)地圖返回到我們的 portlet 中,就像先前的 Oracle MapViewer 示例那樣??偟膩碚f,使用 MapViewer JSP 標(biāo)記庫不僅簡單,而且文檔翔實(shí),堪稱一個靈活的解決方案。有關(guān)方法文檔,請參見 http://www.oracle.com/technology/products/jdev/howtos/10g/map/mv_jdev_howto.htm。 現(xiàn)在,為將代碼添加到我們新近創(chuàng)建的 portlet 框架中,在 JDeveloper 中雙擊 view.jsp 文件將其打開。在 JDeveloper 設(shè)計(jì)模式中,您現(xiàn)在可以隨意添加任何格式或內(nèi)容,而無需鉆研復(fù)雜的 HTML — 對于此項(xiàng)目,使用居中圖標(biāo)將內(nèi)容居中。當(dāng)您處于設(shè)計(jì)視圖中時,您還可以拖曳、刪除和定義我們的標(biāo)記。要使用 Oracle MapViewer 標(biāo)記,從 Component Palette(通常在 JDeveloper 10g 的右上角)中選擇 MapViewer 標(biāo)記庫。從 MapViewer 標(biāo)記庫中,將 init 標(biāo)記拖到頁面中,緊挨著 Portlet 向?qū)砑拥?defineObjects 標(biāo)記下方放下??梢钥吹剑琲nit 標(biāo)記有三個字段,其中兩個必須填寫 — 用以下信息填寫所有三個字段:URL (http://www.yourserver.com/mapviewer/omserver)、datasource (mvdemo) 和 用戶定義的 ID (mvHandle) — 見圖 12。
下一步是將 setParam 標(biāo)記添加到頁面中。請注意,雖然 setParam 標(biāo)記不彈出信息窗口,但如果您在頁面中選中該標(biāo)記,則可以在 Property Inspector(通常在 JDeveloper 10g 的右下角)中設(shè)置 Oracle MapViewer 參數(shù)。在選中 setParam 標(biāo)記時,填寫以下參數(shù):antialiasing (true)、basemap (WAREHOUSES_AND_CUSTOMERS)、centerX (-122.4)、centerY (37.8)、height (450)、size (10)、title (My Map Portlet) 和 width (600) — 見圖 13。
在填寫完 setParam 標(biāo)記的參數(shù)之后,將 run 標(biāo)記(它不需要任何參數(shù))拖到頁面中(見圖 14)。
最后,您已經(jīng)能夠在 portlet 的上下文環(huán)境中呈現(xiàn)我們的地圖了。在先前用標(biāo)記庫對我們的 Oracle MapViewer 實(shí)例的調(diào)用中,您基本上建立了整個地圖環(huán)境,Oracle MapViewer 實(shí)例隨后根據(jù)接收的 Run 命令已經(jīng)構(gòu)建了地圖圖像?,F(xiàn)在您要做的就是將該圖像放在頁面上。為此,您必須首先將一個標(biāo)準(zhǔn) HTML 圖像標(biāo)記拖到頁面上(如果圖像是 SVG,則拖到一個對象標(biāo)記上)。從 Component Palette 中選擇 HTML,將圖像標(biāo)記拖到頁面上,單擊 source 選項(xiàng)卡,查看我們頁面的 JSP/HTML 源代碼。再次在 Component Palette 中選擇 MapViewer 標(biāo)記庫,這次將 getMapURL 標(biāo)記拖到圖像標(biāo)記的空引號之間(現(xiàn)在圖像標(biāo)記看上去應(yīng)該如同這樣:<img src="<mapviewer:getMapURL />"/>)。一旦頁面運(yùn)行并且 Oracle MapViewer 創(chuàng)建該圖像,則 getMapURL 標(biāo)記將會把一個實(shí)際的圖像 URL 返回給 HTML 圖像標(biāo)記(圖 15)。
這時,您已擁有足夠的代碼來部署我們的 portlet,使之可在任何門戶上使用來查看我們的地圖。這還為您添加更多邏輯提供了一個好的起點(diǎn),從而能夠?yàn)椴煌恼埱筇砑硬煌姹镜牡貓D。但是,就本示例而言也就這些了。 部署和注冊支持位置的 Portlet 您現(xiàn)在可以將我們的 portlet 部署到符合 WSRP/JSR 168 標(biāo)準(zhǔn)的 portlet 容器中,如 Oracle Container for J2EE (OC4J)。為此,在 Web Content>WEB-INF 文件夾的 ViewController 項(xiàng)目中右鍵單擊 web.xml 文件,并選擇“Create WAR deployment profile”。選擇 WSRPMapPortlet 作為部署配置文件的名稱,還要用同一名稱 (WSRPMapPortlet) 指定我們的 J2EE Web 上下文根目錄 — 見圖 16。
一旦您構(gòu)建了部署配置文件,就可以右鍵單擊它,選擇將項(xiàng)目部署為 WAR 或 EAR 文件,或者部署到您選擇的應(yīng)用服務(wù)器上。在我們這種情況下,選擇將項(xiàng)目直接部署到我們的 portlet_container 所在的 OC4J 實(shí)例中(圖 17)。
在成功部署之后,您可以通過導(dǎo)航到 http://www.yourserver.com/WSRPMapPortlet/portlets?WSDL 查看 WSRP-WSDL 頁面。這一地址就是您用來將我們新的 portlet 注冊到門戶的地址(圖 18)。
測試新創(chuàng)建的 WSRPMapPortlet 的最簡單方法是使用 Oracle Portal/WSRP 驗(yàn)證服務(wù)器,它是 Oracle 應(yīng)用服務(wù)器門戶的一個托管預(yù)發(fā)行版本,能夠與 WSRP 生成器/portlet 進(jìn)行通信。只要能夠從我們公司的防火墻之外調(diào)用我們的 portlet,通過此服務(wù)來驗(yàn)證其生成您剛剛創(chuàng)建的內(nèi)容的能力就相當(dāng)簡單(圖 19)。
有關(guān)驗(yàn)證過程的信息,請參見此文檔。 結(jié)論 由于諸如門戶和智能數(shù)據(jù)等集成技術(shù)成為業(yè)務(wù)基礎(chǔ)架構(gòu)的關(guān)鍵部分,因此共享我們所使用的信息和我們所構(gòu)建的應(yīng)用程序 (portlet) 的能力就變得非常必要(如果不是法定要求的話)。如今,我們不僅擁有創(chuàng)建符合開放標(biāo)準(zhǔn)的新應(yīng)用程序所需的所有要素,而且我們擁有框架標(biāo)準(zhǔn),如 JSR 168 和 WSRP,它們能夠?qū)F(xiàn)有的技術(shù)和數(shù)據(jù)集成到新的應(yīng)用程序中。這些新技術(shù)與現(xiàn)有技術(shù)(如 GIS 和門戶)的交匯點(diǎn)是我們最終能夠從所有數(shù)據(jù)中獲得實(shí)際智能并能避免復(fù)雜難關(guān)的突破口。 Justin Lokitz 是 Oracle 公司的高級銷售顧問,專門從事 GIS 和 J2EE 開發(fā)。 |