首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Eclipse RCP 與 RAD V6 構建 EJB 客戶端實戰(二):視圖開發、工作台定製與部署

     編輯:Java 相關知識

承接上篇,本文深入實戰:使用 SWT FormToolkit 構建視圖、整合 EJB 呼叫、定製 RCP 工作台與透視圖、導出獨立部署包,構建生產級富客戶端應用。

視圖開發:SWT FormToolkit 實戰

導入預備的 TemperatureView 類,核心兩方法:

createPartControl():構建 UI 組件樹

public void createPartControl(Composite parent) {
    toolkit = new FormToolkit(parent.getDisplay());
    form = toolkit.createScrolledForm(parent);
    form.setText("Celsius to Fahrenheit Temperature Converter");
    
    GridLayout layout = new GridLayout(2, false);
    form.getBody().setLayout(layout);
    
    Label label = toolkit.createLabel(form.getBody(), "Enter temperature in Celsius: ");
    Text textBox = toolkit.createText(form.getBody(), "", SWT.BORDER);
    textBox.setLayoutData(new GridData(80));
    
    Button button = toolkit.createButton(form.getBody(), "Convert to Fahrenheit", SWT.PUSH);
    Label result = toolkit.createLabel(form.getBody(), "");
    result.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    
    MyListener listener = new MyListener();
    listener.setInput(textBox);
    listener.setResult(result);
    listener.setParent(parent);
    listener.setFormToolkit(toolkit);
    button.addListener(SWT.Selection, listener);
}

要點:FormToolkit 統一外觀、GridLayout 彈性佈局、GridData 控制組件佔比。

handleEvent():EJB 呼叫與結果展示

public void handleEvent(Event event) {
    try {
        InitialContext ctx = new InitialContext();
        String jndi = RcpMessages.getString("TemperatureView.JNDIName"); // ejb/TempConverter
        Object obj = ctx.lookup(jndi);
        TempConverterHome home = (TempConverterHome) PortableRemoteObject.narrow(obj, TempConverterHome.class);
        TempConverter service = home.create();
        int retVal = service.celciusToFarenheight(Integer.parseInt(textBox.getText()));
        result.setText(textBox.getText() + "°C ≈ " + retVal + "°F");
    } catch (Exception th) {
        result.setText(th.getClass().getSimpleName() + ": " + th.getMessage());
    }
}

架構建議:實際專案應引入 Business Delegate 模式 隔離 EJB 呼叫細節,View 僅持有 Delegate 引用。

屬性文件外部化配置

# plugin.properties
TemperatureView.JNDIName=ejb/TempConverter
TemperatureView.Title=Celsius to Fahrenheit Temperature Converter
TemperatureView.Button=Convert to Fahrenheit

部署時只需修改屬性文件即可適配不同環境 JNDI 名稱。

擴展點聲明:plugin.xml

<extension point="org.eclipse.ui.views">
  <category name="Temperature Category" id="com.ibm.issw.temperature.form"/>
  <view name="Temperature View" icon="icons/sample.gif" 
        category="com.ibm.issw.temperature.form"
        class="com.ibm.issw.temperature.form.views.TemperatureView"
        id="com.ibm.issw.temperature.form.views.TemperatureView"/>
</extension>

自定義 RCP 工作台與透視圖

預設 Eclipse Workbench 面向 IDE,需定製專屬工作台:

RcpWorkbenchAdvisor:工作台配置器

public class RcpWorkbenchAdvisor extends WorkbenchAdvisor {
    public String getInitialWindowPerspectiveId() { return "MyRCPPerspective"; }
    
    public void preWindowOpen(IWorkbenchWindowConfigurer configurer) {
        configurer.setInitialSize(new Point(750, 600));
        configurer.setShowCoolBar(false);      // 隱藏工具欄
        configurer.setShowStatusLine(false);   // 隱藏狀態欄
        configurer.setTitle("Temperature Converter");
    }
}

MyRCPPerspective:透視圖佈局工廠

public class MyRCPPerspective implements IPerspectiveFactory {
    public void createInitialLayout(IPageLayout layout) {
        layout.addView("com.ibm.issw.temperature.form.views.TemperatureView", 
                       IPageLayout.LEFT, 0.66f, IPageLayout.ID_EDITOR_AREA);
        layout.setEditorAreaVisible(false);  // 無編輯器區域
    }
}

TempRCPApplication:應用程序啟動器

public class TempRCPApplication implements IPlatformRunnable {
    public Object run(Object args) {
        WorkbenchAdvisor advisor = new RcpWorkbenchAdvisor();
        Display display = PlatformUI.createDisplay();
        try {
            int code = PlatformUI.createAndRunWorkbench(display, advisor);
            return (code == PlatformUI.RETURN_RESTART) ? 
                   IPlatformRunnable.EXIT_RESTART : IPlatformRunnable.EXIT_OK;
        } finally { display.dispose(); }
    }
}

擴展點註冊:應用程序與透視圖

<extension point="org.eclipse.core.runtime.applications">
  <application>
    <run class="TempRCPApplication"/>
  </application>
</extension>

<extension point="org.eclipse.ui.perspectives">
  <perspective class="MyRCPPerspective" 
               name="com.ibm.issw.temperature.form.perspective1" 
               id="MyRCPPerspective"/>
</extension>

IDE 內測試:Launch Configuration

  1. Run → Run... → Runtime Workbench → New
  2. Program: com.ibm.issw.temperature.form.RcpApplication
  3. JRE: WebSphere v6 JRE (含瘦客戶端庫)
  4. VM Arguments (關鍵):
-Djava.naming.provider.url=corbaloc::localhost
-Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
-Dserver.root=C:\WebSphere6ND\AppClient
-Dcom.ibm.CORBA.ConfigURL=file:C:\WebSphere6ND\AppClient/properties/sas.client.props
-Djava.ext.dirs="C:\WebSphere6ND\AppClient\java\jre\lib\ext;...;properties"
  1. Plug-ins 頁籤:Add Required Plug-ins 自動解析依賴

獨立部署:導出與啟動腳本

  1. 右鍵專案 → Export → Deployable plug-ins and fragments → Directory structure
  2. 複製 startup.jar 及核心插件至部署目錄:
org.eclipse.core.runtime_3.0.1
org.eclipse.osgi_3.0.1
org.eclipse.swt.win32_3.0.1
org.eclipse.ui.workbench_3.0.1
org.eclipse.ui.forms_3.0.0
... (共 13 個核心插件)
  1. 啟動腳本 MyRCPApp.bat:
set WAS_CLIENT_HOME=C:\WebSphere6ND\AppClient
start %WAS_CLIENT_HOME%\java\jre\bin\javaw
  -Djava.naming.provider.url=corbaloc::localhost
  -Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
  -Dserver.root=%WAS_CLIENT_HOME%
  -Dcom.ibm.CORBA.ConfigURL=file:%WAS_CLIENT_HOME%/properties/sas.client.props
  -Djava.ext.dirs=%WAS_CLIENT_HOME%\java\jre\lib\ext;...;%WAS_CLIENT_HOME%\properties
  -cp startup.jar org.eclipse.core.launcher.Main
  -application com.ibm.issw.temperature.form.RcpApplication

集群調用提示:生產環境 corbaloc::host1:port,host2:port 格式指定多節點。

自動化構建建議

手動複製易誤,建議採用:

  • PDE Headless Build:Ant 腳本驅動 build.xml
  • Tycho + Maven:現代化 CI/CD 流水線
  • Product Configuration:.product 文件定義產品結構

本系列完整展示了 Eclipse RCP 整合 WebSphere EJB 的端到端流程:從 EJB 部署、插件開發、視圖構建、工作台定製到獨立部署,為企業級富客戶端開發提供參考範本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved