package com.sun.j2ee.blueprints.waf.controller.web;
import java.beans.Beans;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
import javax.ejb.CreateException;
import javax.naming.InitialContext;
import com.sun.j2ee.blueprints.waf.controller.web.util.WebKeys;
import com.sun.j2ee.blueprints.servicelocator.web.ServiceLocator;
import com.sun.j2ee.blueprints.servicelocator.ServiceLocatorException;
import com.sun.j2ee.blueprints.waf.util.JNDINames;
import com.sun.j2ee.blueprints.waf.exceptions.GeneralFailureException;
import com.sun.j2ee.blueprints.waf.exceptions.AppException;
import com.sun.j2ee.blueprints.waf.controller.web.WebController;
import com.sun.j2ee.blueprints.waf.controller.web.util.WebKeys;
import com.sun.j2ee.blueprints.waf.controller.ejb.EJBControllerLocalHome;
import com.sun.j2ee.blueprints.waf.controller.ejb.EJBControllerLocal;
import com.sun.j2ee.blueprints.util.tracer.Debug;
public class DefaultComponentManager implements ComponentManager, java.io.Serializable {
protected ServiceLocator sl = null;
public DefaultComponentManager() {
sl = ServiceLocator.getInstance();
}
public WebController getWebController(HttpSession session) {
ServletContext context = session.getServletContext();
WebController wcc = (WebController)context.getAttribute(WebKeys.WEB_CONTROLLER);
if ( wcc == null ) {
try {
String wccClassName = sl.getString(JNDINames.DEFAULT_WEB_CONTROLLER);
wcc = (WebController) Beans.instantiate(this.getClass().getClassLoader(), wccClassName);
wcc.init(context);
} catch (ServiceLocatorException slx) {
throw new RuntimeException ("Cannot create bean of class WebController: " + slx);
} catch (Exception exc) {
throw new RuntimeException ("Cannot create bean of class WebController: " + exc);
}
}
return wcc;
}
public EJBControllerLocal getEJBController(HttpSession session) {
EJBControllerLocal ccEjb = (EJBControllerLocal)session.getAttribute(WebKeys.EJB_CONTROLLER);
if (ccEjb == null) {
try {
EJBControllerLocalHome home = (EJBControllerLocalHome)sl.getLocalHome(JNDINames.EJB_CONTROLLER_EJBHOME);
ccEjb = home.create();
} catch (CreateException ce) {
throw new GeneralFailureException(ce.getMessage());
} catch (ServiceLocatorException slx) {
throw new GeneralFailureException(slx.getMessage());
}
}
return ccEjb;
}
public void sessionCreated(HttpSessionEvent se) {
HttpSession session = se.getSession();
sl = ServiceLocator.getInstance();
session.setAttribute(WebKeys.COMPONENT_MANAGER, this);
}
public void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
WebController wcc = getWebController(session);
if (wcc != null) {
wcc.destroy(session);
}
}
}