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

初學 J2EE 常見錯誤:EJB Home 介面無法解析 Remote 介面

     編輯:J2EE

問題情境

編譯 SecurityHome 介面時出現:

cannot resolve symbol
symbol : class Security
location: interface securitybeans.SecurityHome
Security create() throws CreateException, RemoteException;

雖然 Security.java(Remote 介面)已編譯產生 Security.class,且與 SecurityHome.java 同目錄,但編譯仍失敗。

程式碼檢視

// SecurityHome.java
package securitybeans;
import java.rmi.RemoteException;
import javax.ejb.EJBHome;
import javax.ejb.CreateException;
public interface SecurityHome extends EJBHome {
    Security create() throws CreateException, RemoteException;
}
// Security.java
package securitybeans;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
public interface Security extends EJBObject {
    String encrypt(String strSource) throws RemoteException;
    String decrypt(String strTarget) throws RemoteException;
}

根本原因

Java 編譯器在編譯介面時,不會自動搜尋同目錄下的 .class 檔案,只會根據 import 陳述式載入類別。SecurityHome 介面回傳型別為 Security,但未 import securitybeans.Security,導致編譯器找不到符號。

解決方案

  1. 在 SecurityHome.java 加上 import:
    import securitybeans.Security;
    
  2. 或使用完整類別名稱:
    securitybeans.Security create() throws CreateException, RemoteException;
    
  3. 確保編譯時 classpath 包含該套件根目錄:
javac -d . -classpath . SecurityHome.java

補充說明

  • EJB 規範要求 Home 介面的 create() 回傳 Remote 介面型別。
  • 介面編譯不依賴 .class 檔案位置,而依賴 import 與 classpath。
  • 同套件下的類別仍需明確 import(Java 語言規範)。

加上 import securitybeans.Security; 後重新編譯即可解決。

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