普通 RMI:至少 4 個 class——遠端物件、遠端介面、Stub、Skeleton。
EJB:至少 10 個 class——Bean 類、容器實作 Bean 類、Remote/Home 介面、容器實作介面類、Stub/Skeleton 各二。
關鍵差異:開發者僅需編寫 3 個類(Bean 類、Remote、Home),其餘 7 個由容器工具生成/動態產生,具體表現因 App Server 而異。
ejbc 編譯期生成:Bean 容器實作類、Home/Remote 容器實作類(共 3 個,可見於 JAR)home.create()(實為 Stub.create())create()ejbCreate(),建立/分配 EJB 實例傳統 RMI 客戶端代碼:操作介面 Hello,實質操作 Hello_Stub,需 Hello.class + Hello_Stub.class。
EJB 客戶端代碼:同樣操作 Hello 介面,但 Stub 由伺服器動態下發,客戶端僅需 Hello.class + HelloHome.class。
| 角色 | 類別名稱 | 來源 |
|---|---|---|
| Bean 類 | HelloBean | 用戶編寫 |
| Bean 容器實作 | HelloBean_Impl | ejbc 生成 |
| Home 介面 | HelloHome | 用戶編寫 |
| Home 容器實作 | HelloBean_HomeImpl | ejbc 生成 |
| Home Stub | HelloBean_HomeImpl_WLStub | 部署期動態生成 |
| Home Skeleton | HelloBean_HomeImpl_WLSkeleton | 部署期動態生成 |
| Remote 介面 | Hello | 用戶編寫 |
| Remote 容器實作 | HelloBean_EOImpl | ejbc 生成 |
| Remote Stub | HelloBean_EOImpl_WLStub | 部署期動態生成 |
| Remote Skeleton | HelloBean_EOImpl_WLSkeleton | 部署期動態生成 |
客戶端僅需 Hello.class、HelloHome.class。