任何EJB默認綁定到JNDI。您可以輕鬆地使用JNDI從servlet中查找會話bean並執行會話bean。你真的不需要擁有MBean。
這裏是僞代碼(只是僞,可能無法編譯)
樣品狀態bean
package org.jboss.example;
import javax.ejb.Stateful;
@Stateful
public class StatefulBean {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
樣本servlet訪問上述豆
package org.jboss.example;
import java.io.IOException;
import java.io.PrintWriter;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BeanServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter writer = response.getWriter();
StatefulBean statefulBean = getStatefulBean(request);
writer.println("State: " + statefulBean.getState());
}
private StatefulTestBean getStatefulBean(HttpServletRequest request)
throws ServletException {
StatefulBean sb = null;
try {
InitialContext ic = new InitialContext();
sb = (StatefulBean) ic.lookup("java:ejb/StatefulBean");
} catch (NamingException e) {
throw new ServletException(e);
}
}
return sb;
}
}
即得到我到參考一個連接到會話bean的代理的接口,從戰爭的一面。如果戰爭需要從會話bean中提取數據,那很好。但會話bean需要將數據OUT壓入戰爭中的對象。我不認爲我可以將戰爭中的對象引用到會話bean中嗎?該對象會被序列化嗎?如何解決將數據從會話bean推送到戰爭......? – Mike 2012-03-22 04:28:28
我不確定我遵循「PUSH數據輸出」的含義。有狀態bean只是存儲數據。當bean被創建時,您可以將其存儲在會話中並在您希望訪問它的任何時候將其引用。如果你想要事件監聽器,那麼你將不得不相應地進行構造,這樣Stateful bean中的變化將產生其他組件可以註冊和監聽的事件。 – uaarkoti 2012-03-22 21:20:40
我沒有提及任何有狀態或無狀態的bean。我提到了一個會話bean。我應該提到會話bean中有業務邏輯。因此,這不是關於存儲數據,而是爲了執行一些外部實體可以調用的業務邏輯。然後,會話bean中的業務邏輯需要「將結果推出」給戰爭組件內的對象。 – Mike 2012-03-26 15:59:55