Para empezar haré una breve definición de c/u de los frameworks:
Struts (1.3): Struts es una herramienta de soporte para el desarrollo de aplicaciones Web bajo el patrón MVC, usada en la programación de aplicaciones web JEE. Otros similares: Spring MVC, JSF entre los más populares.
Spring(2.5 - 3):es un poderoso MetaFramework para Java donde su principal objetivo es la inyección de dependencias. Desde nuestros programas - en vez de hacer new() y con cientos de inicializaciones de valores - simplemente obtenemos el objeto ya preparado desde Spring.
iBatis: Framework de Persistencia de Datos (se sitúa entre la lógica de Negocio y la capa de la Base de Datos). Se asocia a la fuente de datos mediante sentencias sql o procedimientos almacenados descritos en ficheros XML. Otros similares: Hibernate.
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>demoprp</display-name> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.util.Log4jConfigListener </listener-class> </listener> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet>
Ahora definiremos el archivo de configuración de Spring el applicationContext.xml....
Por ahora definiré el bean dataSource con los datos del conexión en duro.. luego hablaremos la forma en como jalar los datos de conexión desde un *.properties para mayor facilidad de futuros cambios en en la etapa de producción. Usaremos Mysql 5.0 para esta demo.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/bdTest </property> <property name="username"><value>root</value></property> <property name="password"><value>mysql</value></property> </bean> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation"> <value> classpath:/pedro/rios/demo/persistency/ibatis/sql-map-config-cx.xml </value> </property> <property name="dataSource"><ref local="dataSource"/></property> </bean> <bean id="empleadoCtx" class="pedro.rios.demo.daoIbatisImpl.EmpleadoDAOIbatisImpl"> <property name="sqlMapClient"> <ref bean="sqlMapClientMysql"/> </property> </bean> <bean id="empleadoServiceId" class="pedro.rios.demo.serviceImpl.EmpleadoServiceImpl"> <property name="empleadoDAO" ref="empleadoCtx"> </property> </bean> </beans>
Como podemos apreciar el archivo de mapeo de xml pertenecientes a iBatis se encuentra dentro del src: en el paquete pedro.rios.demo.persistency.ibatis.sql-map-config.xml
Ahora veremos el archivo donde se encuentran mapeados todos los archivos pertenecientes a ibatis sql-map-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <sqlMap resource="pedro/rios/demo/ibatis/xml/Empleado.xml"/> ... </sqlMapConfig>
A continuación veremos la definición del archivo Empleado.xml que contiene todos los querys de la entidad Empleado.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="Empleado" > <typeAlias alias="beanEmpleado" type="pedro.rios.bean.EmpleadoBean"/> <insert id="insertEmpleado" parameterClass="beanEmpleado"> INSERT INTO tbempleado (nombre,apepat,apemat,email) VALUES (#nombre#,#apepat#,#apemat#,#email#) </insert> </sqlMap>
En seguida veremos como está estructurado la capa DAO...
package pedro.rios.demo.dao; import pedro.rios.demo.bean.EmpleadoBean; public interface EmpleadoDAO { public void insertEmpleado(EmpleadoBean beanEmpleado); } //Otro archivo: package pedro.rios.demo.daoIbatisImpl; import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; import pedro.rios.demo.bean.EmpleadoBean; import pedro.rios.demo.dao.EmpleadoDAO; public class EmpleadoDAOIbatisImpl extends SqlMapClientDaoSupport implements EmpleadoDAO { public void insertEmpleado(EmpleadoBean beanEmpleado){ getSqlMapClientTemplate().insert("insertEmpleado", beanEmpleado); } }
Ahora definiremos los Service de acceso a los daos...
package pedro.rios.demo.service; import java.util.List; import pedro.rios.demo.bean.EmpleadoBean; public interface EmpleadoService { public void insertEmpleado(EmpleadoBean beanEmpleado); } //otro archivo package pedro.rios.demo.serviceImpl; import java.util.List; import pedro.rios.demo.bean.EmpleadoBean; import pedro.rios.demo.dao.EmpleadoDAO; import pedro.rios.demo.service.EmpleadoService; public class EmpleadoServiceImpl implements EmpleadoService{ private EmpleadoDAO empleadoDAO; /** * @return the empleadoDAO */ public EmpleadoDAO getEmpleadoDAO() { return empleadoDAO; } /** * @param empleadoDAO the empleadoDAO to set */ public void setEmpleadoDAO(EmpleadoDAO empleadoDAO) { this.empleadoDAO = empleadoDAO; } public void insertEmpleado(EmpleadoBean beanEmpleado){ getEmpleadoDAO().insertEmpleado(beanEmpleado); } }
Como vemos toda la lógica de negocio está lista para ser usada por nuestra capa de vista.. En el próximo posteo veremos como terminar de implementar Struts y la forma como invocar el método insertEmpleado desde un jsp. Por ahora solo hemos definido el archivo de configuración de Struts en el web.xml... Hasta la próxima publicación.. Espero que les sirva esta demo... Espero sus comentarios.. xD
7 comentarios:
Ta buena la información ahora lo voy a poner en práctica .. Noemí
muy buena tu explicacion, pero me gustaria si puedes compartir un proyecto pequeño para poder entender mucho mejor, si fuese mucho la amabilidad me puedes enviar a mi mail : vmaitas@gmail.com
Gracias.
Interesante tu integracion y tu Blog Pedro, pero sería bueno que al final de cada post compartas las fuentes vía RapidShare por ejemplo.
Aquí comparto mis Blogs:
http://frameworksjava2008.blogspot.com
http://viviendoconjavaynomoririntentandolo.blogspot.com
Saludos.
Ok compañero lo tendre muy en cuenta.. Estan muy buenos tus blog ... Saludos
hola pedrome gustaria saber como lo integras con el struts y si pudieras colocar un video estaria xvr!!! un buen aporte gracias!!
Tengo una duda hay un
este a donde hace referencia porque no se muestra
Saludos!!!!!!!!!!
No entiendo tu pregunta amigo.. Saludos
Publicar un comentario