程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在不同平台下部署J2EE連接器和J2EE應用

在不同平台下部署J2EE連接器和J2EE應用

編輯:關於JAVA

開發訪問資源適配器的EJB組件

EJB組件通過資源適配器來訪問EIS,在EJB組件中,定義了最終客戶端要使用的業務方 法,一般實現為會話Bean,它一般通過和多個J2EE組件或者資源適配器交互來完成具體的 業務邏輯。在這個案例中,EJB組件的功能非常簡單,就是接收最終客戶端的請求,然後通 過資源適配器調用EIS並獲得結果,最終把結果返回給客戶端。

EJB組件定義了一個業務方法,它的遠程接口的代碼如例程1所示。

例程1 EJB組件的遠程接口
package com.hellking.jca.ejb;
import java.rmi.RemoteException;
import javax.ejb.*;
public interface Demo extends EJBObject
{
  public String sayHello(String arg) throws RemoteException;
}

在這個接口裡,定義了一個業務方法,就是sayHello(String name)。我們來看EJB組件 的實現類部分代碼,如例程2所示。

例程2 EJB實現類的部分代碼
package com.hellking.jca.ejb;
import ….
public class DemoEJB implements SessionBean
{
  private SessionContext sessionCtx;
 
  //業務方法
  public String sayHello(String arg)throws Exception
  {
    System.out.println("echo, arg="+arg);
    String result="";   
    try
    {
     InitialContext iniCtx = new InitialContext();
     Context enc = (Context) iniCtx.lookup("java:comp/env");
     Object ref = enc.lookup("eis/DemoEISFactory");//獲得連接工廠
     ConnectionFactory dcf = (ConnectionFactory) ref;
     DemoConnection dc =(DemoConnection) dcf.getConnection();//從連接工廠 創建連接
     result=dc.sayHello(arg);//調用虛擬連接的業務方法
     dc.close();//使用完,關閉虛擬的連接。
    }
    catch(NamingException e)
    {
     System.err.println("在查找JNDI名字時遇到錯誤:"+ e);
    }
    return result;//返回調用的結果
  }

}

以上代碼是典型的使用資源適配器的方法,首先通過JNDI來查找連接工廠實例(這個實 例由應用服務器自動綁定),然後從這個連接工廠獲得連接實例,接下來從連接實例調用 業務方法,最後關閉連接。

開發客戶端

本案例使用了兩種類型的客戶端,一種客戶端基於浏覽器,它通過HTTP訪問JSP組件, JSP組件通過RMI調用EJB組件,EJB組件再通過資源適配器調用EIS;另一種客戶端是普通的 Java程序,這個Java程序通過RMI調用EJB,EJB組件再通過資源適配器調用EIS。

在實現中,JSP代碼和普通java程序的代碼基本一樣,不同的是它們獲得初始上下文環 境(InitialContext)的方法不同。

我們看一下簡單的JSP客戶端,如例程3所示。

例程3 JSP客戶端
<%@ page contentType="text/html;charset=gb2312" import="com.hellking.jca.ejb.*,javax.naming.*"%>
<html><body><form><table><tr><td>請輸入名字 :
</td><td><input name=name type=text></td></tr>
<tr><td><input value=submit type=submit></td></tr></table></form>
<%
String name=(String)request.getParameter("name");
try
{
InitialContext context=new InitialContext();
DemoHome home=(DemoHome)javax.rmi.PortableRemoteObject.narrow(
         context.lookup("ejb/demo"),DemoHome.class);
Demo demo=home.create();
if(demo!=null)out.println("demo is ok");
out.println("調用ejb-->jca-->eis");
out.println("發送了:hellking,返回以下的值:<hr><font color=red>");
out.println(demo.sayHello(name));
out.println("</font>");
out.flush();
  }
  catch(Exception e)
  {
  }
%></body></html>

普通的java客戶端和JSP基本一樣,只是需要指定相關的屬性才能獲得InitialContext 實例。可以通過以下的方法獲得InitialContext實例。

例程4 在普通的Java客戶端獲得InitialContext實例
//創建初始的上下文環境
public Client()
{
   context=this.getInitialContext();
}
public InitialContext getInitialContext()
   {
     try
     {
       Properties p=new Properties();
       p.load(new FileInputStream("config.properties"));
       return new InitialContext(p);
     }
     catch(Exception e)
     {
       System.out.println("got ee");
       e.printStackTrace();
       return null;
     }
   }

Java客戶端的詳細代碼見src/client/Client.java文件。

下面介紹裝配和部署的相關問題。

部署方法介紹

在不同的應用服務器下部署J2EE應用時,基本上大同小異。部署工作基本上按照以下步 驟進行:

把J2EE應用和連接器打包成ear文件;

使用應用服務器廠商提供的工具把ear裝配成可以部署的ear包,在裝配的過程中,和應 用服務器特定的部署描述符自動添加到ear包中;

使用應用服務器提供的控制台進行部署,在部署時,可能需要指定一些屬性。

對於JBOSS,沒有提供裝配工具和部署控制台,需要手工進行編寫專有的部署描述,並 且手工部署。

在進行裝配、部署工作前,請把J2EE應用打包成ear文建,打包後的結構如下:

+resource.ear
       +hello.jar
         -META-INF/ejb-jar.xml
         +com/hellking/jca
         +com/hellking/jca/ejb
       +demo.rar
         -META-INF/ra.xml
         +com/hellking/jca
       +web.war
         -WEB-INF/web.xml
         -test.jsp
       -META-INF/application.xml

下面首先介紹在J2SDKEE1.3下裝配和部署J2EE應用。

在J2SDKEE1.3下部署連接器和J2EE應用

step1 首先啟動J2EE和部署工具,在控制台輸入:

start j2ee -verbose

start deploytool

step2 新建一個應用。

依次點擊【File】à【new】à【Application】,選擇應用的目錄,輸入應用的名稱,如 圖1所示。

圖1新建一個應用

step3 把資源適配器添加到應用中

依次點擊【File】→【new】→【Resource Adapter】,在第一個窗口點擊【next】, 然後把資源適配器的類添加進來,然後點擊【next】,如圖2所示。

圖2 添加資源適配器相關的類

在下一個窗口指定資源適配器的相關接口和實現類,如圖3所示。

圖3 指定資源適配器的相關接口和實現類

然後點擊【vsersion information】按鈕,輸入版本相關的信息,完成後,點擊【next 】。

在下一個窗口為連接工廠添加兩個屬性,然後點擊【next】,它們的名稱和值如圖4所 示。

圖4 為連接工廠添加屬性

在解下來的窗口直接點擊【next】,最後將生成部署代碼,點擊【finish】。

Step4 把EJB組件添加到J2EE應用中

【File】→【new】→【Enterprise Bean】,然後把EJB組件相關的類添加進來,如圖5 所示。

圖5 添加EJB組件相關的類

接下來的窗口指定Bean的類型為無狀態會話Bean,實現類為DemoEJB,遠程接口為Demo ,Home接口為DemoHome,然後在接下來的窗口直接點擊【Next】,直到出現資源工廠引用 窗口,添加一個資源工廠引用,它的名字為"eis/DemoEISFactory",類型 是"javax.resource.cci.ConnectionFactory",如圖6所示。

圖6 為EJB添加資源引用

然後點擊【finish】。

Step5 新建一個Web組件,把test.jsp測試頁面添加進來。

Step6 在部署工具中指定EJB的JNDI名字為"ejb/demo"。

Step 7 指定Web組件的Context(上下文)為"/resource"。

Step8 檢查裝配的描述是否正確,選中resource應用,然後點擊工具欄 圖標即可。

Step9 部署,選中resource應用,然後點擊工具欄 ,在彈出的對話框點擊【finish】 即可。

Step10 部署成功後,把資源適配器添加到對應的應用服務器,使其運行。如圖7所示, 選擇localhost,點擊【new】。

圖7 把資源適配器添加到服務器

然後指定連接工廠的JNDI,如圖8所示。

圖8 指定連接工廠的JNDI

部署成功後,啟動EIS服務器,EIS服務器通過執行src/eis-server/run.bat進行啟動, 然後就可以進行測試了,在浏覽器裡輸入:

http://localhost:8000/resource/test.jsp

進行測試。如果一切順利,將在頁面中返回測試的結果,如圖9所示。

圖9 測試資源適配器

在測試時,通用可以看到EIS服務器也輸出了類似以下的信息:

啟動服務....監聽客戶端連接...接收到一個連接監聽客戶端連接...接收到以下輸入: hellking

在IBM WebShpere5.0下部署連接器和J2EE應用

step1 啟動應用程序組裝器,打開需要裝配的J2EE應用,如圖10所示。

圖10打開需要裝配的J2EE應用

step2 選中DemoEJB,點擊【綁定】選項卡,輸入DemoEJB的JNDI名字,然後點擊【應用 】,如圖11所示。

圖11 確定DemoEJB的JNDI名字

step3 其它的值都默認,然後保存更改。

Step4 生成部署代碼。順次點擊【文件】→【生成部署代碼】,在彈出的對話框裡點擊 【現在生成】。如圖12所示。

圖12 生成部署代碼

注意生成代碼時應該是沒有錯誤的,如果有錯誤,請參考對應的錯誤信息。

Step5 啟動IBM Websphere服務器,在浏覽器裡輸入:

http://localhost:9090/admin

進入管理控制台。

Step6 部署J2EE應用。

選擇【應用程序】→【安裝新的應用程序】,浏覽到剛才生成的部署代碼,如圖13所示 ,然後點擊【下一步】。

圖13 安裝應用程序第一步

在接下來的幾個窗口直接點擊【下一步】,直到出現如圖14所示的窗口,在這個窗口中 指定映射資源引用到資源的JNDI名字,這個是"eis/DemoEISFactory"。

圖14 指定映射資源引用到資源的JNDI名字

其它的步驟全部默認即可,配置完成後,保存配置。

Step7 啟動剛部署的J2EE應用

順次選擇【應用程序】à【企業應用程序】,然後選中剛部署的程序,點擊【啟動】。

Step8 為資源適配器指定J2C連接工廠

選中剛才部署的J2EE應用,順次選擇【連接器模塊】→【demo.rar】→【J2C 連接工廠 】,新建一個J2C連接工廠,它的名稱為DemoEISFactory,JNDI名稱 為"eis/DemoEISFactory",其它默認,然後點擊確定。最後別忘了保存配置。

Step9 重新啟動應用服務器,啟動EIS服務(src/eis-server/run.bat),在浏覽器裡 輸入:

http://localhost:9080/resource/test.jsp?name=hellking

進行測試,如果測試成功,那麼結果和圖9一樣。

在JBOSS3.2下部署連接器和J2EE應用

JBOSS雖然沒有裝配工具和部署控制台,但是在JBOSS下部署J2EE應用和資源適配器同樣 非常方便,JBOSS支持及時開發、及時部署的方式,當把要部署的應用拷貝到JBOSS的部署 目錄下,JBOSS應用服務器會自動部署它。

在JBOSS下部署應用時,可以不打包,而是直接J2EE應用放在名稱為***.jar、***.ear 的文件夾下。如圖15所示。

圖15 JBOSS下的J2EE應用的結構

Step1 手工編寫資源適配器的部署描述符,如例程5所示。

例程5 JBOSS下的資源適配器的部署描述符
<server>
<mbean code="org.jboss.resource.connectionmanager.NoTxConnectionManager"
    name="jboss.jca:service=NoTxCM,name=DemoRA">
    <depends>jboss.jca:service=RARDeployer</depends>
    <depends optional-attribute-name="ManagedConnectionFactoryName">
     <mbean code="org.jboss.resource.connectionmanager.RARDeployment"
       name="jboss.jca:service=NoTxDemo,name=DemoRA">
       <depends optional-attribute-name="OldRarDeployment">
       jboss.jca:service=RARDeployment,name=DemoRA
       </depends>
       <attribute name="JndiName">NoTransDemo</attribute>
     </mbean>
    </depends>
    <depends optional-attribute-name="ManagedConnectionPool">
     <mbean code="org.jboss.resource.connectionmanager.JBossManagedConnectionPool"
     name="jboss.jca:service=NoTxPool,name=DemoRA">
     <attribute name="MinSize">0</attribute>
     <attribute name="MaxSize">50</attribute>
     <attribute name="BlockingTimeoutMillis">5000</attribute>
     <attribute name="IdleTimeoutMinutes">15</attribute>
     <attribute name="Criteria">ByContainer</attribute>
     </mbean>
    </depends>
    <depends optional-attribute-name="CachedConnectionManager">
    jboss.jca:service=CachedConnectionManager
    </depends>
    <depends optional-attribute-name="JaasSecurityManagerService">
    jboss.security:service=JaasSecurityManager
    </depends>
  </mbean>
  </server>

注意上面的兩個黑體字,name=DemoRA,這裡的DemoRA必須和資源適配器部署描述符 ra.xml中的"DemoRA"保持一致,NoTransDemo是使用這個資源適配器的JNDI名字,使 用"java:/ NoTransDemo"來引用它。把這個文件保存為hellkingjca-service.xml。

Step2 手工編寫EJB的部署描述符jboss.xml。

並且在部署描述符裡指定對資源適配器的引用。如例程6所示。

例程6 在EJB的描述中指定對資源適配器的引用
<?xml version="1.0"?>
<jboss>
<secure>false</secure>
   <container-configurations />
   <resource-managers />
  <enterprise-beans>
    <session>
     <ejb-name>DemoEJB</ejb-name>
     <jndi-name>ejb/demo</jndi-name>
     <resource-ref>
       <res-ref-name>eis/DemoEISFactory</res-ref-name>
       <jndi-name>java:/NoTransDemo</jndi-name>
     </resource-ref>
    </session>
  </enterprise-beans>
</jboss>

注意對資源適配器引用的JNDI名字,它必須和hellkingjca-service.xml的指定的JNDI 名字一致。把這個文件保存在resource.ear/hello.jar/META-INF/目錄下。

Step 3 部署,把resource.ear文件夾和hellkingjca-service.xml拷貝到 %JBOSS_HOME%\\server\\default\\deploy\\ 目錄下。啟動JBOSS,部署就會自動完成。

Step4 測試,啟動JBOSS和EIS服務(src/eis-server/run.bat),在浏覽器裡輸入:

http://localhost:8080/resource/test.jsp?name=hellking

即可進行測試,如果一切成功,那麼結果應該和圖9一樣。

在BEA Weblogic8.1下部署連接器和J2EE應用

step1 啟動Weblogic Builder,打開待裝配的應用(resource.ear)。

step 2 指定DemoEJB的JNDI名字。

選中DemoEJB,點擊【General】選項卡,在JNDI name中輸入"ejb/demo",如圖16所示 。

圖16 在Weblogic Builder裡指定EJB的JNDI名字

step3 指定資源適配器連接工廠的名字和JNDI名字:

選擇DemoRA,點擊【Weblogic Settings】選項卡,找到"Connection Factory name"標 簽,在下面的輸入框輸入"DemoEISFactory",然後找到"JNDI name"標簽,在下面的文本框 輸入"eis/DemoEISFactory",它是這個連接工廠綁定的JNDI名字。

Step4 指定EJB對資源適配器連接工廠的引用:

點擊DemoEJB,選擇Resource,再點擊【Resource References】選項卡,編輯這個引用 的屬性,把JNDI名字改為"eis/DemoEISFactory",如圖17所示。

圖17 確定EJB引用的資源適配器的連接工廠的名字

step5 其它的值都默認,保存這個應用,weblogic Builder會自動生成可以部署的代碼 。

Step 8 部署

啟動Weblogic引用服務器,在浏覽器裡輸入:

http://localhost:7001/console

輸入用戶名和密碼進行驗證,進入控制台,順次點擊【mydomain】à【Applications】à 【Deploy a new Application】à【upload your file(s)】,然後上載剛生成的可部署代 碼。上載完成後,選擇這個上載的文件,點擊【Contnue】,在接下來的窗口點擊【Deploy 】,如果出現圖18所示的窗口,表示部署成功了。

圖18 在Weblogic下部署成功

Step 9 測試,部署完成後,啟動EIS服務(src/eis-server/run.bat),然後在浏覽器 裡輸入:

http://localhost:7001/resource/test.jsp

進行測試,如果一切順利,獲得的結果和圖9一致。

總結

從以上不同的部署過程可以看出,J2EE應用和資源適配器在不同的服務器平台下具有良 好的可移植性。對於EJB組件,需要在應用服務器特有的部署描述符中指定JNDI名字。至於 EJB對資源適配器連接工廠的引用方式的指定,它們又有所差別,有的在裝配時就指定資源 適配器連接工廠的JNDI名字,這種方式下,應用服務器啟動或者資源適配器部署時,它的 連接工廠就綁定到JNDI名稱空間,比如Weblogic就是這樣;而有的應用服務器需要在部署 時為資源適配器指定連接工廠的JNDI名字,然後再在EJB的部署中進行映射,比如 Websphere就是這種方式。

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