Guía usuario Apache Velocity

Manual oficial: Guia Usuario Apache Velocity

Cómo integrar Velocity en Spring y sus macros (por ejemplo: #springMessage, #springUrl, #springFormInput,...): Pincha aquí

SSL en Tomcat

Para la creación de un certificado podemos usar tanto la aplicación OpenSSL como la herramienta KeyTool del propio jdk. En este caso usaremos keytool para un certificado autofirmado, es decir, no usaremos ninguna entidad certificadora.

Pasos :

1- Desde el shell ( cmd ) ejecutamos por ejemplo :

keytool -genkey -keyalg RSA -keysize 2048 -alias ??? -keystore ??? -validity 365  -keypass ??? -storepass ???

A continuación respondemos a las preguntas.

Nota: No todos los parámetros son obligatorios, por ejemplo, si queremos que no caduque, no usamos el parámetro validity.

Parámetros :

-> keyalg : Algoritmo criptográfico. Además de RSA, también valen: DSA,...
-> keysize : Longitud de la contraseña (en bits).
-> alias : Identificador de nuestro certificado.
-> keystore : Ruta del almacén del certificado. Si no se indica este párametro, el almacén guardado por defecto es .keystore ubicado en directorio (home) del usuario. Extensiones tipicas: .ssl, .keystore, .jks, .csr, ...
-> validity : Días de validez.
-> keypass : Clave con la que podremos acceder a la clave privada del par de claves creado.
-> storepass: Clave para acceder a nuestro keystore (fichero creado).

2- Para confirmar que todo ha ido correcto,  podemos comprobarlo ejecutando (válido cuando no se indica el keystore):

keytool -list -storepass ???

Para verlo más detallado aplicamos:

keytool -list -v alias ??? -storepass ???

donde ??? ha de coincidir con el alias y la contraseña arriba indicada.

3- El fichero generado lo ubicamos en el directorio /conf del servidor Tomcat.

4- Modificamos el fichero server.xml como se muestra a continuación   

<!-- Define a SSL HTTP/1.1 Connector on port 8443
 This connector uses the JSSE configuration, when using APR, the
 connector should be using the OpenSSL style configuration
 described in the APR documentation -->
 
          <Connector port="8443"
           protocol="HTTP/1.1"
           SSLEnabled="true"
           maxThreads="150"
           scheme="https"

           secure="true"
           clientAuth="false"
           sslProtocol="TLS"
           keystoreFile="conf/[nombre_fichero]"
           keystorePass="???"
/>


Con clientAuth como false no se solicita certificado al cliente durante el establecimiento de la conexión SSL.
En keystoreFile, ponemos la ubicación del fichero antes creado (directorio /conf  del Tomcat).
En keystorePass, la contraseña ha de coincidir con el "storepass" del keytool (Paso 1º).

Nota: Una herraminta de gran utilidad es Keytool IUI, la cual facilita todo el desarrollo de creación de certificados evitando así la consola.

Cuidado: Si estamos ejecutando la aplicación en un IDE, por ejemplo Eclipse, hemos de aplicar los pasos 3 y 4 en el directorio "server" del workspace del IDE.

Información sacada de:
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=SSLenTomcat
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=securitySSLKeytool

get() y load() en Hibernate

Cuando hacemos sesison.get() es porque no sabemos si el objeto que estamos solicitando existe o no en la base de datos, por lo tanto Hibernate hace la consulta a la base de datos de forma inmediata. Si no se encontrara el objeto en la base de datos, el método get() devuelve null.

Sin embargo al usar session.load() estamos dejando claro a Hibernate que sabemos con seguridad que el objeto que estamos solicitando sí que existe en la base de datos. En este caso Hibernate no hace la consulta de forma inmediata, sino que espera hasta que accedamos al objeto para hacer la consulta. Si el objeto no existe se produce una excepción.

Información sacada de: http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=hibernateJoin

Colecciones & Fetch & Lazy ( Hibernate )

Para entender mejor como se trae Hibernate la información de la base de datos, podemos hablar de dos conceptos: “cuando” se trae la información de la relación y “como” se la trae (es decir que SQL utiliza).

Lazy :

Al especificar una relación en un mapeo de Hibernate usaremos el atributo “lazy” para definir el “cuando”.

Por defecto lazy es igual a true. Esto significa que la colección no se recupera de la base de datos hasta que se hace alguna operación sobre ella.

Si fijamos lazy a false, cuando se recupere la información de A también se traerá toda la información de los objetos relacionados de B (este era el comportamiento por defecto en la versión 2 de Hibernate).

Fetch :

Por defecto fetch es igual a select. Esto implica que para recuperar cada objeto de B se lanzará una nueva consulta a la base de datos.

Si fijamos el valor de fetch a join, en la misma consulta que se recupera la información de A también se recuperará la información de todos los objetos relacionados de B. Esto se consigue con un left outer join en la sentencia SQL. ( Más eficiente )


Información sacada de: http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=hibernateJoin

Plugins instalados en Eclipse

Listado (Buscar en Marketplace):

  • Spring Tool Suite(STS)

  • SubEclipse (Plugin SVN)

  • JBoss Tools:

    • Hibernate Tools

    • JBoss Maven Integration

    • FreeMarker IDE

  • RMI (http://www.genady.net/rmi/v20/downloads.html)

  • JSDT jQuery Integration

    Pasos a seguir de como integrar el plugin al proyecto:

    1. Propiedades del proyecto -> Javascript -> Include Path

    2. Add Javascript Library (Añadimos la librería JQuery con la versión correspondiente).

  • VeloEclipse (Plugin para usar Apache Velocity) https://code.google.com/p/veloeclipse/. En caso de error, pincha aquí

  • Velocity-Edit (Plugin para usar Apache Velocity) http://code.google.com/p/velocity-edit/downloads/list. Descargar el .jar e instalarlo en el directorio dropins del eclipse. Parece ser que éste va mejor que VeloEclipse.

  • FreeMarker IDE (plugin para usar Apache FreeMarker): Este plugin puede instalarse del el plugin JBoss Tools.  

  • Eclipse Color Theme.  Modifica los colores (Windows -> Preferencias -> General -> Apariencia -> Color Theme)

Seguridad sesiones en web.xml

Ejemplo:

<session-config>

   <!-- Línea comentada porque hemos usado abajo la etiqueta max-age
   por defecto es -1) en cookie-config (usamos COOKIE en ejemplo) -->
   <!-- Medida en minutos -->
   <!-- <session-timeout>5</session-timeout> -->
   
   <!-- Hacemos que la variable de sessión jsessionid sea una cookie y no esté
   en la URL -->
   <!-- Línea comentada porque hemos usado más abajo la etiqueta cookie-config,
   por tanto, usamos COOKIE -->
   <!-- Posibles valores: COOKIE,URL,SSL-->
   <!-- <tracking-mode>COOKIE</tracking-mode> -->

   <!-- Modificamos parámetros de la cookie -->
   <cookie-config>

      <name>SPizza</name>     <!-- Nombre de la cookie -->

      <http-only>true</http-only>  <!-- Protocolo a usar cookie -->

      <secure>false</secure><!-- Si queremos usar HTTPS, no es
      nuestro caso -->

      <max-age>60</max-age> <!-- Medida en segundos ( 1 minuto ) -->

   </cookie-config>

</session-config>

TestNG en Spring 3

 He aquí un ejemplo ( Observamos la anotación y la herencia ):

@ContextConfiguration(locations={"classpath:beans.xml"})
public class TestDAO extends AbstractTestNGSpringContextTests{
 ......
}
    

Diferencia entre Struts 2 FilterDispatcher y StrutsPrepareAndExecuteFilter

FilterDispatcher (org.apache.struts2.dispatcher.FilterDispatcher) está obsoleta desde la versión 2.1.3. StrutsPrepareAndExecuteFilter(org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter) se recomienda a partir de la versión >= 2.1.3.

Validaciones con Struts 2

Pincha aquí para ver el manual con ejemplos.

Ejemplo de fichero Tomcat-users.xml

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users>
   <role rolename="admin-gui"/>
   <role rolename="manager-gui"/>
   <user password="*****" roles="admin-gui,manager-gui" username="nuwi"/>
</tomcat-users>

Jar's mínimos para Struts versión 2.3.4

Los jars mínimos para la versión 2.3.4 de Struts son 8, siendo éstos :

  • commons-fileupload-1.2.2.jar
  • commons-io-2.0.1.jar
  • commons-lang3-3.1.jar
  • freemarker-2.3.19.jar
  • javassist-3.11.0.GA.jar
  • ognl-3.0.5.jar
  • struts2-core-2.3.4.jar
  • xwork-core-2.3.4.jar