2014-06-16 38 views
0

我正在使用EJB 3 + JSP + Servlet。我已閱讀BalusC的blog。我有一個servlet,我想申請創建一個ActionFactory來靈活地映射請求。在POJO中使用EJB來應用mvc模式

我的行動接口:

公共接口行動{

public String execute(HttpServletRequest request, HttpServletResponse response) 

拋出異常;

}

public class LoginAction extends UserAction { 

    @EJB 
    private ProfileManager profileManager; 

    @Override 
    public String execute(HttpServletRequest request, HttpServletResponse response) { 
     String viewPath = null; 
     HttpSession session = request.getSession(); 

    Map accountMap = profileManager.getAccount(username, password); 
} 

它拋出一個NullPointerException,我已閱讀,我不能注入@EJB,因爲它僅適用於JSF,JSP和servlet。有沒有可能用ejb做這種模式?你們會建議我做些什麼呢?

+0

注射只在服務器資源管理工作(EJB,MDB,JSF管理的bean,CDI託管bean,servlet中,web服務類)。您仍然可以通過手動JNDI查找來訪問EJB bean,但是您說您正在使用EJB 3--那麼它就是非常特定於服務器的方式。你在用什麼? Glassfish的? JBoss的? Weblogic的? – Gimby

+0

@Gimby我正在使用Glassfish v4。我如何進行手動JDNI查找? – MLDS

回答

0

根據評論我形成我的答案。您可以通過JNDI手動查找EJB,以便您可以在服務器管理的資源之外訪問它們。由於Java EE 6的名稱已經標準化,但您仍然需要從Java EE教程中學習如何制定規則(或者查看管理界面以查看部署哪些JNDI名稱bean)。要執行查找,請執行以下操作:

InitialContext ic = new InitialContext(); 
ProfileManager profileManager = (ProfileManager) ic.lookup("java:global/EarName/ModuleName/BeanName") 

您必須自己填寫正確的JNDI名稱。下面是相關鏈接的文檔:

http://docs.oracle.com/javaee/7/tutorial/doc/ejb-intro004.htm