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

Session Bean 開發全流程實戰:從 IDEA 建模到 WebLogic 熱部署驗證

     編輯:Java 相關知識

專案目標與架構

  • 目標:建立 Stateless Session Bean,經 Web 測試模組驗證
  • 工具:IntelliJ IDEA + WebLogic 8.1 + Ant 建置腳本
  • 策略:EJB JAR 獨立部署,Web 模組引用 Client JAR (介面類) 通過 JNDI 查找

五階段開發流程

階段 1:建立 Web 測試模組 (手動目錄結構)


# WebLogic 預設域應用目錄
mkdir -p user_projects/domains/mydomain/applications/web/WEB-INF/lib

# 最小 web.xml
cat > web/WEB-INF/web.xml << 'EOF'


    EJB Test Web Module

EOF

階段 2:IDEA 建立 EJB 模組與撰寫 Bean

  1. File → New Module → EJB Module,名稱 `EjbSamples`,Server 選 WebLogic
  2. 建立包 `com.diegoyun.ejb.slb`
  3. 右鍵包 → New → Session Bean:
    • EJB Name: `Helloworld`
    • Package: `com.diegoyun.ejb.slb`
  4. IDEA 自動生成三檔:`Helloworld` (Remote)、`HelloworldHome`、 `HelloworldBean`
  5. 編輯介面與實作:
    
    // Helloworld.java (Remote Interface)
    package com.diegoyun.ejb.slb;
    import javax.ejb.EJBObject;
    import java.rmi.RemoteException;
    
    public interface Helloworld extends EJBObject {
        String getGreeting(String name) throws RemoteException;
    }
    
    // HelloworldBean.java (Bean Implementation)
    package com.diegoyun.ejb.slb;
    import javax.ejb.SessionBean;
    import javax.ejb.SessionContext;
    import java.rmi.RemoteException;
    
    public class HelloworldBean implements SessionBean {
        private SessionContext ctx;
        
        public void setSessionContext(SessionContext ctx) { this.ctx = ctx; }
        public void ejbCreate() {}
        public void ejbRemove() {}
        public void ejbActivate() {}
        public void ejbPassivate() {}
        
        public String getGreeting(String name) {
            return "Hello, " + name;
        }
    }
    
  6. 配置 JNDI 名稱:`ejb/session/HelloworldEJB` (WebLogic 專用 `weblogic-ejb-jar.xml`)

階段 3:Ant 建置腳本 — 編譯、打包、部署自動化




    
    
    
    
    
    
    
    
    
    

    
        
        
        
        
    

    
        
    

    
        
            
        
    

    
        
    

    
        
        
    

    

階段 4:JSP 測試頁面 — JNDI 查找與調用


<%@ page import="com.diegoyun.ejb.slb.Helloworld,
                 com.diegoyun.ejb.slb.HelloworldHome,
                 javax.ejb.*,
                 javax.naming.*,
                 javax.rmi.PortableRemoteObject,
                 java.rmi.RemoteException" %>


Stateless Session Bean 測試

名稱:
<% String name = request.getParameter("myname"); if (name != null && !name.trim().isEmpty()) { Helloworld hello = null; try { InitialContext ic = new InitialContext(); Object objRef = ic.lookup("ejb/session/HelloworldEJB"); HelloworldHome home = (HelloworldHome) PortableRemoteObject.narrow(objRef, HelloworldHome.class); hello = home.create(); } catch (Exception ex) { out.println("錯誤: " + ex.getMessage()); ex.printStackTrace(); } if (hello != null) { out.println("

結果: " + hello.getGreeting(name) + "

"); } } %>

階段 5:WebLogic 部署與驗證

  1. 啟動 WebLogic Server,開啟管理主控台 (預設 `https://localhost:7001/console`)
  2. 部署 EJB:Deployments → EJB Modules → 上傳 `upload/EjbSamples.jar` → Target 選 `myserver`
  3. 部署 Web 模組:Deployments → Web Applications → 選擇 `applications/web` → 名稱 `web` → Target `myserver`
  4. 瀏覽器訪問:`https://localhost:7001/web/hello.jsp`
  5. 輸入名稱、送出,看到「Hello, Diego」即成功!

熱部署模擬技巧:Upload 目錄覆蓋法

WebLogic `upload` 目錄特性:部署時指向此目錄 JAR,後續重新建置只需覆蓋此 JAR,無需重新部署即可生效 (類似 JBoss 農場部署)。


# Ant 腳本 copy-to-path 目標已自動複製到 upload 目錄
# 修改 Bean 程式碼後,只需重跑 ant all,即可熱更新

常見問題排查表

現象可能原因解決方案
JNDI 查找失敗 NameNotFoundExceptionJNDI 名稱不匹配檢查 weblogic-ejb-jar.xml jndi-name、lookup 字串、WebLogic 主控台部署詳情
ClassNotFoundException: HelloworldHomeWeb 模組缺少 Client JAR確認 EjbSamples.jar 在 web/WEB-INF/lib、包含 Remote/Home 介面
ClassCastException on narrowStub 版本不匹配重新建置、確認 weblogic.jar 版本一致、清除暫存
TransactionRolledbackException資料庫/交易問題檢查資料源、交易屬性、資料庫鎖定
Ant 建置失敗找不到 weblogic.jar路徑配置錯誤修正 build.xml j2eelib 屬性指向正確 weblogic.jar

現代化對比:當年 vs 現在

環節2005 年 (EJB 2.1 + WebLogic)現代 (Spring Boot 3 / Jakarta EE 10)
遠端介面Remote/Home 介面 + RMI-IIOP + PortableRemoteObject.narrow@Remote 介面 + REST/gRPC / 無介面本地注入
建置部署Ant + 手動複製 JAR + 主控台部署Maven/Gradle + 自動化 CI/CD + 容器化
狀態管理@Stateful Session Bean (叢集複雜)Redis Session / JWT 無狀態 / 數據庫
依賴注入JNDI 查找 + setSessionContext@Autowired / @Inject / 建構子注入
熱部署Upload 目錄覆蓋技巧Spring DevTools / JRebel / 容器滾動更新

雖技術棧已迭代多輪,但「介面隔離、依賴倒置、容器管理生命週期、宣告式交易」等核心架構原則始終未變。理解經典 EJB 開發流程,有助於深刻體會現代框架設計哲學的傳承與革新。

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