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);
}
}
}