0
我是EJB的新手,我試圖讓一個簡單的無狀態會話Bean工作。EJB 3.1 ClassCastException glassfish服務器上的無狀態會話Bean
我爲此使用了glassfish。
我做了什麼:
我創建包含接口的JAR文件:
@Local
public interface SimpleStatelessBeanLocal {
public String getHello();
}
,我已經創建了包含以下類我EJB戰爭文件(用依賴於與接口的jar):
@Stateless
public class SimpleStatelessSessionBean implements SimpleStatelessBeanLocal {
public String getHello() {
return "Hello from stateless session bean";
}
}
我然後創建與單個servlet和到與所述接口的jar一個依賴性的web應用程序。
@WebServlet("/SimpleServlet")
public class SimpleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
InitialContext ctx;
try {
ctx = new InitialContext();
Object object = ctx.lookup("java:global/simple-stateless-session-bean/SimpleStatelessSessionBean");
response.getWriter().println(object);
Class c = object.getClass();
for (Class i : c.getInterfaces()) {
response.getWriter().println(i.getName());
}
response.getWriter().println(object instanceof SimpleStatelessBeanLocal);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
這具有下面的輸出:
be.sdutry.ejb.tests.stateless.simple.SimpleStatelessBeanLocal_253329002
com.sun.enterprise.container.common.spi.util.IndirectlySerializable
be.sdutry.ejb.tests.stateless.simple.SimpleStatelessBeanLocal
false
所以basicaly它找到的豆,其實現該接口,但它不是從當前類加載器該接口,的一個實例,這意味着我不能投它。
有什麼我在這裏做錯了嗎? 我很確定除了反射之外還有其他解決方法嗎?
我已經嘗試過: 我發現一篇文章建議將jar與接口放在一起提供,但後來我得到了一個ClassNotFoundException。
使用:
- GlassFish4
- EJB 3.1
不直接相關,但我想知道爲什麼你使用上下文查找而不是@EJB注入?此外,EJB3.1旨在變得簡單(只要遵循規則手冊:),即使沒有接口,您在這裏嘗試的也應該可以像EJB 3那樣工作。1 Lite),我可以推薦最優秀的[Oracle JavaEE教程](http://docs.oracle.com/javaee/7/tutorial/doc/javaeetutorial7.pdf)來幫助您入門嗎?和 – fvu
@fvu以下您發佈的文檔鏈接,我能夠做出成功的SLSB例子。這個例子的缺點是SLSB和實際的代碼在同一個war文件中。我真正需要的是ejb在單獨的戰爭中,因爲最終我們會有多個使用相同EJB的項目。我的下一步是看看它是否仍然有效,如果我將它們分成兩個不同的戰爭。 –
請參閱本教程的第5.2章,針對您的應用程序,我將打包並部署EJB作爲EJB-jar,EJB3樣式 - 可選地將WAR與WAR一起包裝在EAR中。現在,本教程的第7版似乎將重點放在新的無界面模型上,您會注意到[同一教程的第5版](http://docs.oracle.com/javaee/5/tutorial/doc/)顯示一個完整的示例EJB,它公開了明確的本地和遠程接口,從這個示例開始可能更容易。 – fvu