kapok

          垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks
          內容:
          概要
          引言
          在WebSphere Portal上安裝部署WSRP服務
          安裝JSR 168參考實現Apache Pluto
          安裝WSRP 參考實現Apache WSRP4J
          WebSphere Portal調用WSRP4J發布的Remote Portlet
          結束語
          參考資料
          關于作者
          對本文的評價
          訂閱:
          developerWorks 時事通訊

          http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/yangjiang/0502/wsrp.html

          楊江

          軟件工程師
          2005 年 3 月

          本文介紹了WSRP 標準,并在兩臺服務器上分別部署遠程 portlet 來驗證通過 WSRP 進行的互操作。

          概要
          首先隨同本文在IBM WebSphere Portal 5.1服務器上以WSRP協議發布本地Portlet為Remote Portlet,通過WSRP協議消費剛剛發布的Remote Portlet;然后在WSRP參考實現Apache WSRP4J上以WSRP協議發布本地Portlet為Remote Portlet,使用WSRP4J自帶的WSRP Consumer測試剛剛發布的Remote Portlet;最后我們在WebSphere Portal服務器上消費WSRP4J上發布的Remote Portlet以檢驗WSRP在不同應用服務器間的交互性。

          引言
          OASIS Web Services for Remote Portlets 技術委員會從2002年開始制定WSRP 1.0標準,目的是開發一個允許門戶之間、門戶與其他應用之間,能夠以即插即用的方式進行用戶界面的交互的Web Service標準。

          2003年9月3日,OASIS組織發布了WSRP:Web Services for Remote Portlets 1.0標準。WSRP使支持WSRP的容器和符合WSRP的任何門戶之間能夠進行Portlet級別的互操作性。它的定義包括Remote Portlet的一個WSDL(Web Services Description Language ,Web服務描述語言)接口、通過WSDL定義的一套Remote Portlet交互的語義,以及WSRP服務產生的標記片斷的規則。

          有了WSRP標準,企業門戶不僅可以混合使用不同廠商的門戶服務器,靈活地部署Portlets,使用WSRP將企業門戶中各個門戶服務器統一起來,充分利用到不同門戶服務器的特有功能和產品特性。企業門戶還可以通過WSRP遠程調用合作伙伴提供的遠程Portlet服務,把合作伙伴的遠程Portlet直接放到本企業的門戶界面中,使得企業和合作伙伴的溝通更加方便快捷。

          WSRP給服務供應商帶來了新的商機。服務供應商可以提供Remote Portlet服務,比如天氣預報、股票、新聞、網上定票等服務,企業只需要通過Internet和WSRP協議就可以方便的在企業門戶中使用到這些服務,不需要編寫任何代碼。

          在WSRP服務最常見的應用模式中,WSRP 服務是包括表示層與應用程序邏輯的可視的遠程門戶服務;門戶服務器既可以是Remote Portlet的提供者,也可以是Remote Portlet的消費者。門戶服務器可以通過Internet,使用WSRP協議把本地Portlet暴露為Remote Portlet,這樣門戶服務器就是WSRP服務的提供者。門戶服務器也可以通過WSRP通用代理跨過 Internet網絡,使用WSRP協議調用遠程的WSRP服務,這樣門戶服務器就是WSRP服務的消費者。

          WSRP提供者也可以把WSRP服務作為Web Service注冊到UDDI服務器上,而WSRP消費者可以到UDDI服務器上查找需要的WSRP服務,進而通過Portlet 代理訪問遠程WSRP服務。

          圖1 即插即用的WSRP服務
          圖1 即插即用的WSRP服務

          需要特別指出的是,WSRP服務的消費者也可以是普通的應用程序,通過WSRP協議訪問后臺WSRP Portlet服務,通過COM組件或者ActiveX控件顯示WSRP服務返回的標記片斷。IBM Workplace Client Technology(基于Eclipse Rich Client Platform)中將提供WSRP消費者Plug-in,把Remote Portlet集成到其用戶界面中來。

          本文適用于門戶架構師、WebSphere Portal管理員,具有一些 Web Service、WebSphere Portal服務器方面的經驗會有所幫助。

          在WebSphere Portal上安裝部署WSRP服務
          2002年初,IBM在WebSphere Portal 4.0中提供了其專有技術RPWS,通過Web Service把Portlet發布為Remote Portlet;2004年初,IBM在WebSphere Portal 5.0 Fixpack 2開始提供WSRP的技術預覽;2004年11月,IBM在WebSphere Portal 5.1中提供WSRP的全面支持。

          1.安裝Portlet
          IBM在WebSphere Portal and Lotus Workplace Catalog網站上提供了叫做WebSphere Portal V5.1 Sample Code的應用(Portlet Application),其中有基于Struts框架的使用IBM Portlet API的portlets,也有使用JSR 168 API編寫的portlets。任何人都可以通過IBM Portlet代碼"1wp10004n" 檢索并免費下載這個應用。下面我們在WebSphere Portal上面部署這個Portlet。解壓縮下載的1wp10004n.zip文件,進入1wp10004n\Basic\JSR168目錄,我們會看到jsrHelloJSP.war等4個war文件,這些war文件都是打包的JSR 168 Portlet例子應用。

          在WebSphere Portal管理頁面中選擇Portlet 管理-> Web 模塊,選擇"安裝"命令按鈕,選擇jsrHelloJSP.war文件,選擇"下一步"開始安裝即可。在Portlet 管理 ->Portlets可以檢索到剛剛安裝的Hello JSP (JSR 168)。最后我們把這個Portlet放到測試頁面上。結果如圖2。

          圖2 Hello JSP(JSR 168)運行結果
          圖2 Hello JSP(JSR 168)運行結果

          2.提供portlet
          在WebSphere Portal管理頁面中選擇Portlet 管理-> Web 模塊,搜索標題的開頭為"Hello"的Portlet,在"Hello JSP(JSR 168)"小程序的右邊有五個命令按鈕,選擇最左邊的"提供portlet"按鈕,就可以把這個Portlet發布為Remote Portlet。

          圖3提供portlet
          圖3提供portlet

          在Portlet管理界面中我們看到"成功將portlet Hello JSP(JSR 168)提供為Web服務",并且這個Portlet顯示出"已提供"的標記。

          圖4 已提供Portlet
          圖4 已提供Portlet

          我們剛剛安裝了一個JSR 168 Portlet,通過WSRP把這個portlet提供為Remote Portlet。下面我們將消費這個Remote Portlet。

          3.注冊WSRP Producer
          在WebSphere Portal管理頁面中選擇Portlet 管理->Web Service,選擇新建Producer。輸入標題,輸入WPS 5.1的WSDL服務定義的URL,比如http://wps51.cn.ibm.com:9081/wps/wsdl/wsrp_service.wsdl

          圖5新建Producer
          圖5新建Producer

          4.消費Remote Portlet
          在WebSphere Portal管理頁面中選擇Portlet 管理->Web模塊,選擇"使用"命令按鈕,鼠標左鍵點擊剛注冊的Web Service Provider。

          圖 6使用portlet
          圖 6使用portlet

          WebSphere Portal作為WSRP的消費者,通過WSRP協議檢索WSRP提供者提供的Remote Portlet。在圖7我們看到剛剛注冊的"WSRP Producer on WP 5.1"提供了多個Remote Portlet,"選擇"Hello JSP(JSR 168),確認,在圖8中我們看到一個叫做RP[Hello JSP(JSR 168)]的Portlet,我們可以把這個Remote Portlet象本地Portlet一樣部署到測試頁面上,運行結果如圖9所示。

          圖 7 選擇Web service
          圖 7 選擇Web service

          圖 8選擇Web service的結果
          圖 8選擇Web service的結果

          圖 9 包含Remote Portlet的測試頁面
          圖 9 包含Remote Portlet的測試頁面

          安裝JSR 168參考實現Apache Pluto
          Apache Software Foundation 在2004年12月22日發布了 Java Portlet Specification 1.0參考實現Pluto 1.0.1-rc2版本。版本號中的rc表示release candidate,rc2表示這個版本已經是第二個發布候選版本,離正式版本1.0.1的發布已經很近了。

          1 安裝Pluto二進制發行版本
          Pluto提供了四種打包方式,其中最簡單的打包方式是和Tomcat 5.5.4(Build Oct 29 2004)捆綁在一起的二進制發行版本,只要在Pluto下載網站下載pluto-1.0.1-rc2.zip文件,解壓縮到指定目錄就可以了。注意:pluto-1.0.1-rc1二進制發行版本采用的是Tomcat 5.0.28。

          如果在啟動Tomcat的時候提示啟動系統找不到文件 -Djava.endorsed.dirs=,那么可以在命令行下面執行 set JAVA_HOME=c:\jdk1.5.0

          圖 10 Pluto界面
          圖 10 Pluto界面

          2 安裝Pluto源代碼發行版本
          Pluto另外一種常用的發行版本是源代碼發行版本,目前,要在Pluto上自動部署新的portlet,必須使用這種版本。在Pluto下載網站下載pluto-src-1.0.1-rc2.zip文件,參考Pluto安裝指南進行安裝即可。

          安裝這種發行版本,事先要下載Tomcat、Marven,在部署的時候要求有Internet連接,部署程序會從Internet上下載需要的java package。

          注意,pluto-src-1.0.1-rc2可以使用JDK 1.4.2進行部署,但是不能使用JDK 1.5進行部署。使用JDK 1.5會報如下錯誤:

          pluto-src-1.0.1-rc2\portal\src\java\org\apache\pluto\portalImpl\om\common\impl\LanguageImpl.java:58: as of release 1.5, 'enum' is a keyword, and may not be used as an identifier
          (try -source 1.4 or lower to use 'enum' as an identifier)

          3 使用Pluto源代碼發行版本在在Pluto上部署Portlet
          設置JAVA_HOME、MAVEN_HOME、PATH等環境變量。

          set JAVA_HOME=C:\j2sdk1.4.2
          SET MAVEN_HOME=C:\apache\maven-1.0.2
          SET PATH=%MAVEN_HOME%\bin;%PATH%

          拷貝WebSphere Portal V5.1 Sample Code中的jsrHelloJSP.war到c:\apache目錄。

          進入Pluto源代碼發行版本的根目錄,調用maven部署Portlet到Pluto。

          CD C:\apache\pluto-src-1.0.1-rc2
          maven deploy -Ddeploy=c:\apache\jsrHelloJSP.war

          注意:下面的部署新的portlet操作在Pluto

          1.0.1-rc2源代碼版本版本中不能工作,但是可以在Pluto運行版本中可以正常工作。

          進入Pluto的webapps目錄,我們會看到有個jsrHelloJSP目錄,這里就是部署后的Portlet目錄。

          Pluto部署代碼在jsrHelloJSP\WEB-INF\tld目錄下面增加了一個portlet.tld文件,同時在web.xml文件中增加了對做個portlet.tld文件的引用。


          
          <taglib>
                  <taglib-uri>http://java.sun.com/portlet</taglib-uri>
                  <taglib-location>/WEB-INF/tld/portlet.tld</taglib-location>
          </taglib>
          

          我們需要手工刪除部署后的web.xml文件中對于std-portlet.tld的引用內容:


          
                  <taglib>
                  <taglib-uri>http://java.sun.com/portlet</taglib-uri>
                  <taglib-location>/WEB-INF/tld/std-portlet.tld</taglib-location>
              </taglib>
              

          部署Portlet到頁面的方法參考Pluto安裝指南即可。需要注意的是Pluto安裝指南中application ID指的就是應用名稱jsrHelloWorld,PortletID指的是web.xml文件中的portlet-guid參數值。


          
                         <init-param>
                      <param-name>portlet-guid</param-name>
                      <param-value>jsrHelloJSP.Hello JSP Portlet name</param-value>
                  </init-param>
                  

          安裝WSRP 參考實現Apache WSRP4J

          1 安裝WSRP4J
          閱讀WSRP4J安裝文檔,下載Tomcat 5(比如jakarta-tomcat-5.0.30版本),解壓縮到c:\apache\ jakarta-tomcat-5.0.30-wsrp4j。

          如果在啟動Tomcat的時候提示啟動系統找不到文件 -Djava.endorsed.dirs=,那么可以在命令行下面執行 set JAVA_HOME=C:\j2sdk1.4.2或者把這一行加入到bin\startup.bat和bin\shutdown.bat里面。

          注意:WSRP4J使用的Pluto不是最新的版本,所以WSRP4J要使用JDK 1.4.2,而不是最新的Pluto使用的JDK 1.5。

          參考http://ws.apache.org/wsrp4j/contributing/cvs.html,使用cvs client下載WSRP4J源代碼。


          
          set path="C:\Program Files\CVS for NT";%path%
          cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login
             password: anoncvs
          cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout ws-wsrp4j
          

          更改下面三個目錄下面的build.properties.example文件的文件名為build.properties


          
          ws-wsrp4j\build\
          ws-wsrp4j\portlets\proxyportlet
          ws-wsrp4j\portlets\wsrptest
          

          修改上述三個文件build.properties,設置TOMCAT_HOME=C:/apache/ jakarta-tomcat-5.0.30-wsrp4j

          安裝WSRP4J到Tomcat 5:


          
          set JAVA_HOME=C:\j2sdk1.4.2
          set path=%JAVA_HOME%\bin;%path%
          
          cd ws-wsrp4j\build
          install-swing-consumer 
          install-provider-pluto
          

          最后顯示下面字樣,就是已經成功安裝了基于Pluto的WSRP provider,并且安裝了一個測試用Portlet-'wsrptest'。


          
          prepare-producer:
          Created dir: C:\Apache\jakarta-tomcat-5.0.30-wsrp4j\webapps\wsrp
          …
          prepare-provider-pluto:
          Copying 13 files to C:\Apache\jakarta-tomcat-5.0.30-wsrp4j\webapps\wsrp
          Copying 1 file to C:\Apache\jakarta-tomcat-5.0.30-wsrp4j\webapps\wsrp\WEB-INF\lib
          …
          BUILD SUCCESSFUL
          Total time: 3 seconds
          

          2 測試WSRP4J消費者程序
          啟動Tomcat,缺省Tomcat監聽8080端口。


          
          set JAVA_HOME=C:\j2sdk1.4.2
          Cd C:\apache\jakarta-tomcat-5.0.30-wsrp4j\bin
          startup.bat
          

          執行腳本C:\apache\ws-wsrp4j\tools\tunnel.bat以啟動Apache Axis TCP Monitor,這個Monitor一般用于web service debug。通常Tomcat監聽8080端口,tunnel腳本缺省監聽8081端口并且向8080端口寫數據。


          
          set CLASSPATH=C:\apache\ws-wsrp4j\driver\SwingConsumer\lib\axis.jar
          rem java org.apache.axis.utils.tcpmon [listening_port] [target_host] [target_port]
          java org.apache.axis.utils.tcpmon 8081 localhost 8080
          

          運行WSRP Consumer(消費程序,調用遠程Remote Portlet),缺省WSRP Consumer通過8081連接WSRP Producer。


          
          cd C:\apache\ws-wsrp4j\driver\SwingConsumer
          run.bat
          

          圖 11 WSRP4J Consumer
          圖 11 WSRP4J Consumer

          3 在WSRP4J上發布新的Remote Portlet
          從%Pluto_Home%\webapps目錄下拷貝testsuite目錄到%WSRP4J_Home%\webapps目錄下。

          從%Pluto_Home%\webapps\pluto\WEB-INF\data\portletentityregistry.xml文件中拷貝testsuite.TestPortlet1的定義到%WSRP4J_Home%\webapps\wsrp\WEB-INF\data\portletentityregistry.xml文件中。


          
              <application id="3">
                  <definition-id>testsuite</definition-id>
                  <portlet id="1">
                      <definition-id>testsuite.TestPortlet1</definition-id>
                      <preferences>
                          <pref-name>TestName4</pref-name>
                          <pref-value>TestValue4</pref-value>
                          <read-only>true</read-only>
                      </preferences>
                  </portlet>
          </application>
          

          你也可以通過Pluto源代碼的maven deploy命令在Pluto上面部署新的Portlet,然后把相應的目錄(比如jsrHelloJSP)拷貝到%WSRP4J_Home%\webapps目錄下,然后編輯相應的WSRP4J portlet注冊文件。

          4 為WSRP4J Consumer提供新的WSRP Portlet服務
          接下來為WSRP Consumer配置要消費的Remote Portlet的handler、放置Remote Portlet的測試頁面。在driver/SwingConsumer/persistence/portlets目錄下面增加一個文件,org.apache.wsrp4j.consumer.driver.WSRPPortletImpl@WSRP4J_3_1.xml。


          
          <?xml version="1.0"?>
          <Portlet>
              <portlet-key>
                  <portlet-handle>3.1</portlet-handle>
                  <producer-id>1</producer-id>
              </portlet-key>
              <parent-handle>3.1</parent-handle>
          </Portlet> 
          

          修改driver/SwingConsumer/persistence/pages/org.apache.wsrp4j.consumer.app.driver.PageImpl@WSRP4JTestPortlets.xml文件,


          
          <?xml version="1.0" encoding="UTF-8"?>
          <page pageID="1" title="WSRP4J Test"><portlet-key xsi:type="java:org.apache.wsrp4j.consumer.driver.PortletKeyImpl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <portlet-handle>3.1</portlet-handle>
          <producer-id>1</producer-id>
          </portlet-key></page>
          

          重新啟動WSRP服務和WSRP消費者程序,運行結果如下:

          圖12 WSRP Consumer測試新增加的Remote Portlet - Pluto testsuite
          圖12 WSRP Consumer測試新增加的Remote Portlet - Pluto testsuite

          如果是把jsrHelloJSP portlet發布到WSRP4J上面,運行結果如下:

          圖 13 WSRP Consumer測試新增加的Remote Portlet - jsrHelloJSP
          圖 13 WSRP Consumer測試新增加的Remote Portlet - jsrHelloJSP

          WebSphere Portal調用WSRP4J發布的Remote Portlet
          現在我們已經有兩個WSRP的支撐環境了,他們都能各自獨立地發布和消費Remote Portlet。現在讓我們測試一下他們的互通性。

          1. 注冊WSRP Producer
          在WebSphere Portal管理頁面中選擇Portlet 管理->Web Service,選擇"新建Producer"。輸入標題,輸入WSRP4J的WSDL服務定義的URL,比如http://localhost:8081/wsrp/wsdl/wsrp4j_service.wsdl。

          圖14 新建Producer
          圖14 新建Producer

          圖15 成功創建Producer
          圖15 成功創建Producer

          2.消費Remote Portlet
          在WebSphere Portal管理頁面中選擇Portlet 管理->Web模塊,選擇"使用"命令按鈕,鼠標左鍵點擊剛注冊的Web Service Provider。 WebSphere Portal作為WSRP的消費者,通過WSRP協議檢索WSRP提供者提供的Remote Portlet。在圖16我們看到WSRP4J提供了多個Remote Portlet,"選擇"Hello JSP portlet (JSR 168) 和WSRP Test Portlet。我們可以把這個Remote Portlet象本地Portlet一樣部署到測試頁面上,運行結果如圖17所示

          。

          圖 16 選擇Web service
          圖 16 選擇Web service

          圖17 WebSphere Portal消費WSRP4J提供的Remote Portlet
          圖17 WebSphere Portal消費WSRP4J提供的Remote Portlet

          注意事項:
          1.如果需要通過不同的IP地址和端口訪問WSRP4J,需要修改WSRP4J的webapps\wsrp\wsdl\wsrp4j_service.wsdl文件中的主機名和端口號。

          2. WebSphere注冊WSRP4J為web service producer后,這個Producer的Registration handle 為192.168.200.132_1107045794015_2(例子)。相應的WSRP4J會產生一個兩個文件登記WebSphere Portal為Consumer,這兩個文件分別是org.apache.wsrp4j.producer.driver.RegistrationImpl@14647882.xml,和org.apache.wsrp4j.producer.provider.driver.ConsumerPortletRegistrationImpl@192.168.200.132_1107045794015_2.xml。

          3. WebSphere Portal在"消費"WSRP4J提供的Remote Portlet的時候,WSRP會修改webapps\wsrp\WEB-INF\data\ portletentityregistry.xml文件。

          比如這個文件中原始的關于jsrHelloJSP的注冊信息如下:


          
                  <application id="5">
                  <definition-id>jsrHelloJSP</definition-id>
                  <portlet id="1">
                      <definition-id>jsrHelloJSP.Hello JSP Portlet name</definition-id>
                      <preferences>
                          <pref-name>TestName4</pref-name>
                          <pref-value>TestValue4</pref-value>
                          <read-only>true</read-only>
                      </preferences>
                  </portlet>
              </application>
              

          在WebSphere Portal把jsrHelloJSP注冊以后,WSRP4J會復制一份portlet的定義,并且指定新的portlet的id(比如192.168.200.132_1107046841484_0)。結果如下:


          
              <application id="5">
                  <definition-id>jsrHelloJSP</definition-id>
                  <portlet id="192.168.200.132_1107046841484_0">
                      <definition-id>jsrHelloJSP.Hello JSP Portlet name</definition-id>
                      <preferences>
                          <pref-name>TestName4</pref-name>
                          <pref-value>TestValue4</pref-value>
                          <read-only>true</read-only>
                      </preferences>
                  </portlet>
                  <portlet id="1">
                      <definition-id>jsrHelloJSP.Hello JSP Portlet name</definition-id>
                      <preferences>
                          <pref-name>TestName4</pref-name>
                          <pref-value>TestValue4</pref-value>
                          <read-only>true</read-only>
                      </preferences>
                  </portlet>
          </application>
          

          4. 通過WSRP注冊的Portlet的標題是從該Portlet的portlet.xml文件中portlet-info->title標記中獲得的。


          
          				<portlet-info>
          			<title>Hello JSP portlet (JSR 168) Title</title>
          			<short-title>Hello Title</short-title>
          			<keywords>WSRP, Hello JSP</keywords>
                  </portlet-info>
          		

          結束語
          WSRP規范小組和JSR 168 Portlet規范小組聯系非常緊密,最初的WSRP規范中定義的Portlet是要求滿足JSR 168標準的Portlet,支持J2EE/JSR 168規范的門戶服務器很多都宣稱將支持WSRP規范。IBM WebSphere Portal不僅可以把JSR 168 Portlet發布為Remote Portlet,而且也可以把IBM version 4 portlet API編寫的Portlet發布為Remote Portlet。微軟在2004年發布了WSRP Web Part toolkit for SharePoint,以支持SharePoint消費Remote Portlet。

          參考資料

          關于作者
          楊江,IBM Innovation Center高級信息工程師,主要從事WebSphere Portal Server和WebSphere Application Server的技術支持工作,對Linux、Web Service和Web安全有濃厚興趣。您可以通過yjiang@cn.ibm.com和他聯系。


          posted on 2005-04-20 07:34 笨笨 閱讀(1137) 評論(0)  編輯  收藏 所屬分類: J2EEALLWeblogic Portal
          主站蜘蛛池模板: 盐山县| 长岭县| 榆中县| 乌拉特前旗| 白沙| 永顺县| 萨嘎县| 如皋市| 射阳县| 郑州市| 洮南市| 霍邱县| 无极县| 聂荣县| 巧家县| 南澳县| 嘉定区| 镶黄旗| 余庆县| 泉州市| 山西省| 诸城市| 东乡| 华蓥市| 门头沟区| 安仁县| 桐梓县| 迁西县| 东港市| 益阳市| 凯里市| 开原市| 上杭县| 平乐县| 阆中市| 富平县| 广州市| 鹿邑县| 嘉兴市| 民权县| 林甸县|