  | Mailing List | | Home | | Forum Home | | JBoss - Java Application Server | | Struts - A MVC web framework | | Tomcat - JSP/Servlet container | | iText - An open source PDF Java Library | | JDOM - JDOM XML Parser | | J2EE - A mailing list for Java(tm) 2 Platform, Enterprise Edition | | J2EE Pattern - An interest list for Sun Java Center J2EE Pattern Catalog | | Servlet - A mailing list for discussion about Sun Microsystem's Java Servlet API Technology | | JSP - A mailing list about Java Server Pages specification and reference | |
Struts & Hibernate
|
|
|
  | | | A matter of memory | A matter of memory 2003-10-27 - By peng wang
Back Hi All,
I'v adopted the Petstore EJBController pattern for our application. I make a little modification that I change EJBController from stateful session bean to stateless due to no need for us to maintain conversition states. There is a statemachine in the EJBController, the statemachine has a hashmap used to cache Actions which are event handlers. Because EJBController is now stateless, it instances will be pooled and in primary memory. Since each statemachine caches a different set of Actions, I'm concerning if the Actions objects will cause the memory problem.(We have about 40 Actions. And the user number of EJBController online will be very large.)
public class StateMachine implements java.io.Serializable {
private EJBControllerLocalEJB ccejb; private HashMap attributeMap; private HashMap actionMap; private SessionContext sc;
public StateMachine(EJBControllerLocalEJB ccejb, SessionContext sc) { this.ccejb = ccejb; this.sc = sc; attributeMap = new HashMap(); actionMap = new HashMap(); }
public EventResponse processEvent(Event ev) throws EventException { String actionName = ev.getEJBActionClassName(); EventResponse response = null; if (actionName != null) { EJBAction action = null; try { if (actionMap.get(actionName) != null) { action = (EJBAction)actionMap.get(actionName); } else { action = (EJBAction)Class.forName(actionName).newInstance(); // ********** caching here ************ actionMap.put(actionName, action); } } catch (Exception ex) { System.err.println("StateMachine: error loading " + actionName + " :" + ex); } if (action != null) { action.init(this); // do the magic action.doStart(); response = action.perform(ev); action.doEnd(); } } return response; } ... }
I have thought of making the Actions class as light as possible that the Actions call other stateless EJBs to do services. Does an alternative strategy needed here, such as implementing all Actions as Singleton?
Thanks a lot,
wp
__ ____ ____ ____ ____ ____ ______ Do you Yahoo!? Exclusive Video Premiere - Britney Spears http://launch.yahoo.com/promos/britneyspears/
==================================================================== Companion Site: http://www.corej2eepatterns.com J2EE BluePrints: http://java.sun.com/blueprints/corej2eepatterns List Archive: http://archives.java.sun.com/archives/j2eepatterns-interest.html Unsubscribing: email "signoff J2EEPATTERNS-INTEREST" to listserv@(protected)
|
|
 |