Qué ofrece Autentia Real Business Solutions S.L?


Save this PDF as:
 WORD  PNG  TXT  JPG

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Qué ofrece Autentia Real Business Solutions S.L?"

Transcripción

1 Avenida de Castilla,1 - Edificio Best Point - Oficina 21B San Fernando de Henares (Madrid) tel./fax: Qué ofrece Autentia Real Business Solutions S.L? Somos su empresa de Soporte a Desarrollo Informático. Ese apoyo que siempre quiso tener Desarrollo de componentes y proyectos a medida 2. Auditoría de código y recomendaciones de mejora 3. Arranque de proyectos basados en nuevas tecnologías 1. Definición de frameworks corporativos. 2. Transferencia de conocimiento de nuevas arquitecturas. 3. Soporte al arranque de proyectos. 4. Auditoría preventiva periódica de calidad. 5. Revisión previa a la certificación de proyectos. 6. Extensión de capacidad de equipos de calidad. 7. Identificación de problemas en producción. 3a RFP Gran Empresa Concurso Verificación previa Consultora 1 Tecnología Desarrollo Sistemas Producción Consultora 2 Piloto 3b Certificación o Pruebas Consultora 3 autentia Equipo propio desarrollo 4. Cursos de formación (impartidos por desarrolladores en activo) Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery Gestor portales (Liferay) Gestor de contenidos (Alfresco) Aplicaciones híbridas Control de autenticación y acceso (Spring Security) UDDI Web Services Rest Services Social SSO SSO (Cas) Tareas programadas (Quartz) Gestor documental (Alfresco) Inversión de control (Spring) Compartimos nuestro conociemiento en: JPA-Hibernate, MyBatis Motor de búsqueda empresarial (Solr) ETL (Talend) Dirección de Proyectos Informáticos. Metodologías ágiles Patrones de diseño TDD BPM (jbpm o Bonita) Generación de informes (JasperReport) ESB (Open ESB) Para más información visítenos en:

2 1 de 12 07/09/2006 9:57 Home Quienes Somos Empleo Tutoriales Contacte Autor: Javier Antoniucci Descargar este documento en formato PDF ibatis.pdf Firma en nuestro libro de Visitas Master Experto Oracle 10 Certificados Oracle. Prácticas en empresas. Fórmate para trabajar. Curso Superior Java J2EE Quieres? Puedes. Fórmate en Instituto Novatech Master Élite Oracle 10g Master certificado Oracle 10g con prácticas en empresas. Becas. Manual Básico de Apache ibatis Introducción Qué es ibatis? Apache ibatis está constituido por dos frameworks independientes que generalmente se usan juntos: DAO y sqlmaps. El primero simplifica la implementación el patrón de diseño Direct Access Objects (DAO) y el segundo simplifica la persistencia de objetos en bases de datos relacionales. ibatis NO es un ORM (Object Relational Mapper), por lo que se pueden utilizar modelos de datos existentes o poco normalizados y, finalmente, no es completamente transparente (el programador programa el SQL) Ambos frameworks de ibatis han sido portados a.net con notable éxito y popularidad. Ambas versiones ya son releases estables y maduras. Para qué sirve? El patrón DAO nos ayuda a organizar las tareas de persistencia (guardado, búsqueda, recuperación, borrado, etc.) de los objetos y nos permite definir múltiples implementaciones para un mismo objeto mediante la definición de una interfaz. Por ejemplo, la interfaz UsuarioDao tiene los metodos guardarusuario(usuario usuario), obtenerusuario(string loginid), etc y dos implementaciones: UsuarioMySqlDao y UsuarioLdapDao donde implementamos las operaciones para MySql y Ldap respectivamente. Con ibatis DAO podremos configurar cuándo usar una u otra implementación sin necesidad de modificar código. Además, agregar un UsuarioOracleDao será muy fácil y no implicará modificar código del resto de la aplicación. Cuando hacemos un análisis y diseño orientado a objetos obtenemos nuestro modelo de clases y también diseñamos el modelo de datos donde se almacena la información. Y siempre nos queda la tarea de conectarnos con una base de datos, crear statements, construir selects/updates/etc, recorrer resultsets y setear atributos de objetos, etc. para guardar, buscar, recuperar, etc. los valores de los atributos de un objeto. ibatis sqlmap simplifica esta tarea resumiéndola a la configuración de ficheros XML, con SQL ANSI o propietario y funciona con prácticamente cualquier base de datos con driver JDBC.

3 2 de 12 07/09/2006 9:57 Cuándo utilizar ibatis? Como toda herramienta, no vale para todo. ibatis sqlmap es muy válido cuando: Se requiere una curva de aprendizaje rápida y pocos conocimientos previos, y no requiere aprender un lenguaje de consultas como en Hibernate o EJB CMP. Se necesita manipular el SQL (para utilizar SQL propietario, optimizarlo, etc.) o se necesita llamar a procedimientos almacenados. El modelo de datos existe previamente y no está muy normalizado (aunque lógicamente se puede utilizar con modelos nuevos y normalizados) Alto rendimiento y optimización pero no para cuando: Se requiere una automatización total y transparente de la persistencia Se requiere soporte multi-rdbms (motor de base de datos) transparente y automática Hay una comparación constructiva con Hibernate en ibatis DAO es válido cuando: Se sabe que el RDBMS (motor de base de datos) puede cambiar en el futuro La implementación del acceso a datos puede requerir cambios sustanciales en el futuro La implementación del acceso a datos puede variar entre un entorno de producción y otro (software comercial en distintos clientes) ibatis DAO soporta sqlmap, Hibernate, etc. Cómo funciona esto internamente? Básicamente, programación declarativa y extensión del framework. Es decir, se

4 3 de 12 07/09/2006 9:57 configuran ficheros XML y, en ibatis DAO, se extienden clases donde se implementa la interfaz y el comportamiento específico. Ejemplo: 1. ibatis DAO (opcional) 1. Crear un DAO.XML <!DOCTYPE daoconfig PUBLIC "-//ibatis.com//dtd DAO Configuration 2.0//EN" " <daoconfig> <context> <transactionmanager type="sqlmap"> <property name="sqlmapconfigresource" value="es/dxd/km/dao/sqlmap/sqlmapconfig.xml" /> </transactionmanager> <dao interface="es.dxd.km.dao.usuariodao" implementation="es.dxd.km.dao.sqlmap.usuariosqlmapdao" /> </context> </daoconfig> 2. Crear una utilidad de configuración tipo DaoConfig public class DaoConfig { private static final String DAO_XML = "es/dxd/km/dao/dao.xml"; private static final DaoManager daomanager; static {

5 4 de 12 07/09/2006 9:57 daomanager = newdaomanager(); catch (Exception e) { throw new RuntimeException("Description. Cause: " + e, e); public static DaoManager getdaomanager() { return daomanager; public static DaoManager newdaomanager() { Reader reader = Resources.getResourceAsReader(DAO_XML); return DaoManagerBuilder.buildDaoManager(reader, null); catch (Exception e) { throw new RuntimeException( "Could not initialize DaoConfig. Cause: " + e, e); 3. Crear la interfaz del Dao para Usuarios, UsuariosDao: public interface UsuarioDao extends Dao { public int updateusuario(usuario usuario); public int insertusuario(usuario usuario); public int deleteusuario(string idusuario); public Usuario getusuario(string idusuario); public Usuario getusuariovalidado(string idusuario, String password); public List getusuariosbyexample(usuario usuario);

6 5 de 12 07/09/2006 9:57 4. Crear su implementación: public class UsuarioSqlMapDao extends SqlMapDaoTemplate implements es.dxd.km.dao.usuariodao { public UsuarioSqlMapDao(DaoManager arg0) { super(arg0); public int updateusuario(usuario usuario) { return getsqlmapexecutor().update("updateusuario", usuario); catch (SQLException e) { throw new DaoException("Error actualizando usuario. Cause: " + e, e); public int insertusuario(usuario usuario) { getsqlmapexecutor().insert("insertusuario", usuario); catch (SQLException e) { throw new DaoException("Error insertando usuario. Cause: " + e, e); return 1; public int deleteusuario(string idusuario) { return getsqlmapexecutor().delete("deleteusuario", idusuario); catch (SQLException e) { throw new DaoException("Error actualizando usuario. Cause: " + e, e);

7 6 de 12 07/09/2006 9:57 public Usuario getusuario(string idusuario) { Usuario usuario = (Usuario) getsqlmapexecutor().queryforobject( "getusuariobyid", idusuario); usuario.setroles((list) getsqlmapexecutor().queryforlist( "getrolesusuario", usuario)); return usuario; catch (SQLException e) { throw new DaoException("Error recuperando usuario. Cause: " + e, e); public List getusuariosbyexample(usuario usuario) { Usuario usuarioexample = new Usuario(); if (usuario.getapellidos()!= null) { usuarioexample.setapellidos("%" + usuario.getapellidos().tolowercase() + "%"); if (usuario.getnombre()!= null) { usuarioexample.setnombre("%" + usuario.getnombre().tolowercase() + "%"); usuarioexample.setidusuario(usuario.getidusuario()); List usuarios = (List) getsqlmapexecutor().queryforlist( "getusuariosbyexample", usuarioexample); // Asignar los roles for (Iterator iter = usuarios.iterator(); iter.hasnext();) { Usuario usuario2 = (Usuario) iter.next(); usuario2.setroles((list) getsqlmapexecutor().queryforlist( "getrolesusuario", usuario2));

8 7 de 12 07/09/2006 9:57 return usuarios; catch (SQLException e) { throw new DaoException("Error recuperando usuarios. Cause: " + e, e); public Usuario getusuariovalidado(string idusuario, String password) { Usuario usuario = getusuario(idusuario); return usuario.getpassword().equals(password)? usuario : null; 2. ibatis sqlmap 1. Crear la configuración sqlmapconfig.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sqlmapconfig PUBLIC "-//ibatis.com//dtd SQL Map Config 2.0//EN" " <sqlmapconfig> <properties resource="properties/sqlmapconfig.properties" /> <settings cachemodelsenabled="true" enhancementenabled="true" lazyloadingenabled="true" maxrequests="32" maxsessions="10" maxtransactions="5" usestatementnamespaces="false" /> <transactionmanager type="jdbc"> <datasource type="simple">

9 8 de 12 07/09/2006 9:57 <property name="jdbc.driver" value="${driver" /> <property name="jdbc.connectionurl" value="${url" /> <property name="jdbc.username" value="${username" /> <property name="jdbc.password" value="${password" /> </datasource> </transactionmanager> <sqlmap resource="es/dxd/km/dao/sqlmap/usuario.xml" /> </sqlmapconfig> 2. La configuración de contexto es preferible sacarla afuera del xml para, por ejemplo, cambiar fácilmente de entornos, en el sqlmapconfig.xml se indicó que estuviera en properties/sqlmapconfig.properties: driver=org.apache.derby.jdbc.clientdriver url=jdbc:derby://localhost:1527/kmdb username=derby password=derby 3. Finalmente, se configuran las operaciones y su SQL en Usuario.xml: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sqlmap PUBLIC "-//ibatis.com//dtd SQL Map 2.0//EN" " <sqlmap namespace="usuario"> <select id="getusuariobyid" resultclass="es.dxd.km.model.usuario"> SELECT rtrim(id_usuario) as idusuario, rtrim(password) as password, rtrim(nombre) as nombre, rtrim(apellidos) as apellidos FROM APP.USUARIOS WHERE id_usuario = #value# </select> <select id="getrolesusuario"

10 9 de 12 07/09/2006 9:57 parameterclass="es.dxd.km.model.usuario" resultclass="es.dxd.km.model.rol"> SELECT rtrim(r.id_rol) as idrol, rtrim(r.nombre) as nombre, rtrim(r.descripcion) as descripcion FROM APP.ROLES R, APP.USUARIOS_ROLES U WHERE R.ID_ROL = U.ID_ROL AND U.ID_USUARIO = #idusuario# </select> <select id="getusuariosbyexample" parameterclass="es.dxd.km.model.usuario" resultclass="es.dxd.km.model.usuario"> SELECT rtrim(id_usuario) as idusuario, rtrim(password) as password, rtrim(nombre) as nombre, rtrim(apellidos) as apellidos FROM APP.USUARIOS <dynamic prepend="where"> <isnotnull prepend="and" property="nombre"> lower(nombre) like #nombre# </isnotnull> <isnotnull prepend="and" property="apellidos"> lower(apellidos) like #apellidos# </isnotnull> <isnotnull prepend="and" property="idusuario"> ID_USUARIO = #idusuario# </isnotnull> </dynamic> </select> <insert id="insertusuario" parameterclass="es.dxd.km.model.usuario"> INSERT INTO APP.USUARIOS (ID_USUARIO, PASSWORD, NOMBRE, APELLIDOS) VALUES (#idusuario#, #password#, #nombre#, #apellidos#) </insert>

11 10 de 12 07/09/2006 9:57 <update id="updateusuario" parameterclass="es.dxd.km.model.usuario"> UPDATE APP.USUARIOS SET PASSWORD = #password#, NOMBRE = #nombre#,apellidos = #apellidos# WHERE ID_USUARIO = #idusuario# </update> <delete id="deleteusuario" parameterclass="string"> DELETE FROM APP.USUARIOS WHERE ID_USUARIO = #value# </delete> </sqlmap> Licencia? ibatis es un proyecto que pertenece y utilza la licencia de Apache Software Foundation, por lo que es Open Source disponible, modificable y comercializable libremente. (todo asesoramiento en este tema será bienvenido) Y para qué este manual básico? Para simplificar el "first touch" y para explicar ibatis a alto nivel. No pretende ser un tutorial, una guía del usuario ni un manual de referencia. Ellos ya se han escrito y están disponibles en las direcciones que se mencionan en la sección " Dónde encuentro más info?" Dónde encuentro más info? En la Página Oficial encontrarán en la sección Documentación unos tutoriales muy buenos aunque extensos, una guía de referencia y el JavaDoc de la API. También tienen una sección de preguntas frecuentes muy completa. Desde esta página también se puede descargar (recomiendo) el ejemplo oficial de utilización de ibatis: el JPetStore. Viene a ser como el PetStore de J2EE reconvertido a Struts+iBatis. Cómo pongo en funcionamiento ibatis? Básicamente hay que incluir las librerías en el path (en las aplicaciones web, en

12 11 de 12 07/09/2006 9:57 /WEB-INF/lib) Lo ideal es deplegar el war del JPetStore, descargable desde y ver cómo funciona. Hacerle alguna modificación. Comenzar un prototipo desde cero y seguir los tutoriales. Consejo: ser muy meticuloso con los XML porque la info de debugging es escasa y confusa. Puedes opinar sobre este tutorial aquí Recuerda que el personal de Autentia te regala la mayoría del conocimiento aquí compartido (Ver todos los tutoriales) Nos vas a tener en cuenta cuando necesites consultoría o formación en tu empresa? Vas a ser tan generoso con nosotros como lo tratamos de ser con vosotros? Somos pocos, somos buenos, estamos motivados y nos gusta lo que hacemos... Autentia = Soporte a Desarrollo & Formación Autentia S.L. Somos expertos en: J2EE, Struts, JSF, C++, OOP, UML, UP, Patrones de diseño.. y muchas otras cosas Nuevo servicio de notificaciones Si deseas que te enviemos un correo electrónico cuando introduzcamos nuevos tutoriales, inserta tu dirección de correo en el siguiente formulario. Subscribirse a Novedades

13 12 de 12 07/09/2006 9:57 Otros Tutoriales Recomendados (También ver todos) Nombre Corto Patrones de diseño J2EE Optimización de Serialización Java Soporte de Asserts en Java 1.4.x Añadir Scripting a programas Java Aplicación de Patrones de Diseño en Java Introducción a los portales Java con Jahia Patrones de GRASP Analizar ejecución de programa Java Aplicaciones con el framework de Microsft.NET Introducción al Java Web Start Descripción Os mostramos una interpretación particular de los patrones de diseño J2EE Os mostramos una sencilla técnica para mejorar el rendimiento de la serialización de objetos en Java, a través de Streams asociados a buffers en memoria. Os mostramos como utilizar los asserts en Java (disponibles a partir de la versión 1.4) Os mostramos como añadir a vuestras aplicaciones soporte de Scripting, gracias a BeansShell. Esto nos permite ejecutar Java generado dinámicamente. En este tutorial os mostramos como las técnicas avanzadas de diseño ( como patrones de diseño ) contribuyen a la contrucción de aplicaciones profesionales en Java. Os mostramos como comenzar con el desarrollo de portales (portlets) Java con Jahia Os presentamos una introducción a los patrones de asignación de responsabilides y su relación con el proceso unificado. Os mostramos como investigar el comportamiento de vuestros programas Java, en ejecución, a través del profiling. Ejemplo de desarrollo de una aplicación con el framework de Microsft.NET (creación de un servicio deencuestas Web) Os mostramos como podéis distribuir aplicaciones de consola de un modo sencillo a través de Java Web Start. Es el mismo principio de los applets aplicado a aplicaciones. Nota: Los tutoriales mostrados en este Web tienen como objetivo la difusión del conocimiento. Los contenidos y comentarios de los tutoriales son responsabilidad de sus respectivos autores. En algún caso se puede hacer referencia a marcas o nombres cuya propiedad y derechos es de sus respectivos dueños. Si algún afectado desea que incorporemos alguna reseña específica, no tiene más que solicitarlo. Si alguien encuentra algún problema con la información publicada en este Web, rogamos que informe al administrador para su resolución. Patrocinados por enredados.com... Hosting en Castellano con soporte Java/J2EE Opimizado 800X600

Sitemap