- ถ้าเรียกแบบ Remote EJB สามารถเรียกได้อยู๋แล้วนะครับ คือเรียกอบบบอก IP ไปเลยว่าจะไปที่ไหน สามารถเรียกได้ไม่มีปัญหาครับ
- เรียก Local EJB ผมใช้วิธีนี้นะ่ัครับ มีสองวิธี แต่การทำงานคล้ายๆ กัน (โดย Load ใน Servlet ก่อน หรือ บน ZUL File ครับ)
- ไป Lookup EJB เสร็จแล้วเก็บค่าไว้ที่ static class สักตัวนึง เช่น Map
- ไป Lookup EJB เหมือกนั แต่เก็บไว้ที่ ServletContext เลยครับ
แบบแรกเก็บค่าไว้ที่ static class
public class SampleContext {
private static Map contextJNDI;
เรียกตอน init ใน servlet แล้วสั่งให้ทำตอน load on startup
public void initContext(String jndiName) throws NamingException, CreateException {
Context context = new InitialContext();
ZKServiceEJBLocalHome home = (ZKServiceEJBLocalHome) context.lookup(jndiName);
ZKServiceEJBLocal localObject = home.create();
if(contextJNDI == null) {
contextJNDI = new HashMap();
}
if(contextJNDI.get(jndiName) == null) {
contextJNDI.put(jndiName,localObject);
}
}
อันนี้จะไปเรียกตอนทำงานใน Java ครับ
public ZKServiceEJBLocal getEJB(String jndiName) {
return (ZKServiceEJBLocal)contextJNDI.get(jndiName);
}
}
private static Map contextJNDI;
เรียกตอน init ใน servlet แล้วสั่งให้ทำตอน load on startup
public void initContext(String jndiName) throws NamingException, CreateException {
Context context = new InitialContext();
ZKServiceEJBLocalHome home = (ZKServiceEJBLocalHome) context.lookup(jndiName);
ZKServiceEJBLocal localObject = home.create();
if(contextJNDI == null) {
contextJNDI = new HashMap();
}
if(contextJNDI.get(jndiName) == null) {
contextJNDI.put(jndiName,localObject);
}
}
อันนี้จะไปเรียกตอนทำงานใน Java ครับ
public ZKServiceEJBLocal getEJB(String jndiName) {
return (ZKServiceEJBLocal)contextJNDI.get(jndiName);
}
}
แบบที่สอง เก็บไว้ที่ ServletContext
เขียนไว้ที่ init ใน Servlet แ ล้ว Config ให้ Load on startup
servletConfig.getServletContext().setAttribute(jndiName, EJBLocalObject); --> jndiName ให้ตอนเวลาจะดึงข้อมูลมาใช้ให้ดึงด้วย jndiName ส่วน EJBLocalObject คือตัว EJBLocal ที่เรา Lookup ใน Context เรียบร้อยแล้ว ล้วเอามาเก็บไว้ที่นี่แทนครับ
ตอนเรียกใช้
ServletContext servletContext = (ServletContext)this.getDesktop().getWebApp().getNativeContext();
servletContext.getAttribute(jndiName);
servletConfig.getServletContext().setAttribute(jndiName, EJBLocalObject); --> jndiName ให้ตอนเวลาจะดึงข้อมูลมาใช้ให้ดึงด้วย jndiName ส่วน EJBLocalObject คือตัว EJBLocal ที่เรา Lookup ใน Context เรียบร้อยแล้ว ล้วเอามาเก็บไว้ที่นี่แทนครับ
ตอนเรียกใช้
ServletContext servletContext = (ServletContext)this.getDesktop().getWebApp().getNativeContext();
servletContext.getAttribute(jndiName);
0 comments:
แสดงความคิดเห็น