El Model comprende todos los Objetos de Negocio donde se implementa la l�gica de negocio (el "how it's done") y donde se debe soportar todos los requisitos funcionales del Sistema sin mezclarlo con partes correspondientes al workflow (el "what to do") que corresponden al Controller.
�Action Bean
Generalmente, los Action Beans siempre realizan las siguientes acciones:
- Obtener los valores necesarios del Action Form, JavaBean, request, session o de donde sea.
- Llamar a los objetos de negocio del Model.
- Analizar los resultados, y seg�n los mismos retornar el ActionForward correspondiente.
Veamos entonces un ejemplo de Action Bean:
public final class LogonAction extends Action { public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // Obteniendo atributos Locale locale = getLocale(request); MessageResources messages = getResources(); User user = null; // Validando los par�metros ActionErrors errors = new ActionErrors(); String username = ((LogonForm) form).getUsername(); String password = ((LogonForm) form).getPassword(); try { DataSource dataSource = servlet.findDataSource(null); Connection myConnection = dataSource.getConnection(); } catch (SQLException e) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.database.missing")); saveErrors(request, errors); return (new ActionForward(mapping.getInput())); } UserFactory userFactory = new UserFactory(database); user = userFactory.getUser(username, password); if (user == null) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.password.mismatch")); saveErrors(request, errors); return (new ActionForward(mapping.getInput())); } // Guardando el usuario en la sesion HttpSession session = request.getSession(); session.setAttribute(Constants.USER_KEY, user); // Eliminando el form bean obsoleto if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) request.removeAttribute(mapping.getAttribute()); else session.removeAttribute(mapping.getAttribute()); } // Pasando el control a la siguiente p�gina return (mapping.findForward("success")); } }
�System State Beans
Los System State Beans son el conjunto de objetos de negocio que representan el estado actual del sistema, por ejemplo: el carrito de la compra que el usuario va modificando a lo largo de su interacci�n con la aplicaci�n. Estos objetos de negocio ser�n t�picamente JavaBeans o EJBs de los que se guardar� referencia en la sesi�n del usuario, que ser�n modificados desde los Action y que ser�n consultados desde las JSPs.
Esta clase de objetos no debiera tener ning�n conocimiento de la View.
�BusinessLogic Beans
Los objetos de negocio son los que implementan la l�gica de negocio, el c�mo hacer las cosas y su propia persistencia. Estos objetos de negocio no debiera tener ning�n conocimiento de la View o el Controller de forma que debieran ser perfectamente reutilizables para implementar soporte a distintas interfaces y hasta para incluirse en nuevas aplicaciones.
�Accediendo a BD
Con Struts se puede definir un datasource para una aplicaci�n desde el struts-config.xml (m�s informaci�n en la secci�n "The Action Mappings Configuration File" del "Struts User Manual"). Este datasource nos permite obtener una connection desde un Action y desde all� utilizarlo o pasarlo al Model. Muy pr�ctico.
Este es un ejemplo de acceso a una conexi�n desde un Action:
public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { javax.sql.DataSource dataSource; java.sql.Connection myConnection; ... try { dataSource = servlet.findDataSource(null); myConnection = dataSource.getConnection(); ... } catch (SQLException sqle) { getServlet().log("Connection.process", sqle); } finally { ... try { myConnection.close(); } catch (SQLException e) { getServlet().log("Connection.close", e); } } }