我敢肯定,這是一個初學者的錯誤空對象......servlet接收來自遠程EJB3會話Bean
所以我有一個實體,外牆(實現持久層)和無狀態會話Bean在Java EE 6的應用(EJB3)和遠程接口(通過外觀提供對實體的訪問)。
這工作正常。通過SLSB,我可以檢索和操作實體。我試圖從一個Web應用程序(部署在同一個Glassfish中,實體+從獨立jar導入的Java EE應用程序的接口定義)執行此操作。我有一個Servlet,它接收一個SLSB注入的實例。我得到它的檢索實體,並執行以下操作(我可以看到它在日誌中):
- 遠程SLSB被實例化,稱爲其方法
- SLSB實例門面,調用「得到」方法
- 門面從數據庫中檢索實體的情況下,返回它
- SLSB返回實體的實例給調用者
- (一切都很好,直到這裏)
- 調用servlet接收..一個空實例的實體!
什麼問題?這應該工作,對吧?
MyServlet:
public class MyServlet extends HttpServlet {
@EJB
private CampaignControllerRemote campaignController; // remote SLSB
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
try {
Campaign c = campaignController.getCampaign(5L); // id of an existing campaign
out.println("Got "+ c.getSomeString()); // is null !!
} finally {
out.close();
}
}
...
}
請讓我知道,如果你想看到其他的代碼,我會更新帖子。
是c空對象或getsomestring返回空? 日誌在調用返回到servlet之前是否顯示在SLSB中完全填充的「5L」廣告系列? – JoseK 2010-04-21 13:08:04
@josek:'c'存在,不爲null。 'c.getSomeString()'返回null。當SLSB檢索'5L'活動時,'someString'被正確填充。 – Hank 2010-04-21 14:04:01
我可能是錯的,但認爲glassfish需要打包在同一個webapp中的遠程接口。 – JoseK 2010-04-21 17:01:49