jueves, 23 de enero de 2014

Ojo con la modificacion del archivo .profile

Ojo con la modificacion del archivo de configuracion de usuario .profile me he encontrado que si te equivocas y tienes error de sintaxis en dicho fichero y no se ejecuta correctamente no puedes iniciar sesion.
Este es el contenido de mi fichero:

  1. # ~/.profile: executed by the command interpreter for login shells.
  2. # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
  3. # exists.
  4. # see /usr/share/doc/bash/examples/startup-files for examples.
  5. # the files are located in the bash-doc package.

  6. # the default umask is set in /etc/profile; for setting the umask
  7. # for ssh logins, install and configure the libpam-umask package.
  8. #umask 022

  9. # if running bash
  10. if [ -n "$BASH_VERSION" ]; then
  11.     # include .bashrc if it exists
  12.     if [ -f "$HOME/.bashrc" ]; then
  13. . "$HOME/.bashrc"
  14.     fi
  15. fi

  16. # set PATH so it includes user's private bin if it exists
  17. if [ -d "$HOME/bin" ] ; then
  18.     PATH="$HOME/bin:$PATH"
  19. fi

  20. #variables de entorno para java
  21. export JAVA_HOME="/home/negrero/herramientas/sdk7"
  22. export JRE_HOME="/home/negrero/herramientas/sdk7/jre"
  23. export JBOSS_HOME="/home/alumno/herramientas/jboss7
  24. export PATH=$JBOSS_HOME/bin:$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
en la linea 27 nos fijamos y no cerre con las comillas por lo que no asignaba bien el valor a la variable por lo que me da un error,

asi que aviso a navegantes.

Restauracion joomla de servidor a localhost

La restauracion llevada a cabo con akeeba-kickstart que es la herramienta de recuperacion de akeeba-backup, por la que me he encontrado dos problemillas referente a php a dos libririas de php.

Una es la libreria mysql por la que a la hora de tratar la base de datos en tipo de base de datos aparece JNONE y la gd para el tratamiento de los graficos que no es capaz de mostrar miniaturas de graficos.

Comandos utilizados para su instalacion es:
sudo apt-get update
sudo apt-get install php5-mysql
sudo apt-get install php5-gd


jueves, 12 de diciembre de 2013

Test 1ª conexion a mi datasource


Pagina para probar la conexion al datasource de test que hemos creado
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>

  3. <%@page import="java.sql.*,javax.naming.*,javax.sql.*, java.io.*" %>
  4. <html>
  5.     <head>
  6.        
  7.         <title>Ejemplo de conexión a BD con DataSource</title>
  8.     </head>
  9.     <body>
  10.         <%
  11.         Connection conDB = null;
  12.         out.println("Intentando conectar con la base de datos mediante DataSource...");
  13.         try {
  14.        InitialContext initCtx = new InitialContext();
  15.        DataSource ds = (DataSource) initCtx.lookup("java:jboss/datasources/MySqlDS");
  16.        conDB = ds.getConnection();
  17.        Statement s = conDB.createStatement();
  18.        out.println("Todo está ¡¡OK!!");
  19.         }
  20.         catch(Exception e) 
  21.         {
  22.         
  23. out.println("No ha sido posible conectarse.\n"+e.toString());
  24.         }
  25.         finally
  26.         {
  27.  
  28. if (conDB!=null)
  29.         
  30. conDB.close();
  31.         
  32. conDB = null;
  33.         }
  34.         
  35.         %>
  36.     </body>
  37. </html>


Configuracion del modulo mysql para los datasource

Abrimos con el editor de texto (previa copia seguridad) el archivo:
standalone.xml->
  1. .........
  2.         <datasource jndi-name="java:jboss/datasources/MySqlDS" 
  3.                             pool-name="MySqlDS" 
  4.                             enabled="true" 
  5.                             jta="true" 
  6.                             use-java-context="true" 
  7.                             use-ccm="true">
  8.                     <connection-url>jdbc:mysql://localhost:3306/test</connection-url>
  9.                     <driver>mysql5</driver>
  10.                     <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
  11.                     <pool>
  12.                         <min-pool-size>10</min-pool-size>
  13.                         <max-pool-size>20</max-pool-size>
  14.                         <prefill>true</prefill>
  15.                     </pool>
  16.                     <security>
  17.                         <user-name>root</user-name>
  18.                         <password>root</password>
  19.                     </security>
  20.                 </datasource>
  21. .................
  22. <drivers>
  23. ........
  24.                  <driver name="mysql5" module="com.mysql.jdbc">
  25.                         <xa-datasource-class>
  26.                                           com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
  27.                         </xa-datasource-class>
  28.                     </driver>
  29. ......
  30. </drivers>



miércoles, 11 de diciembre de 2013

Instalacion controlador j como modulo en jboss7

Dentro de la carpeta jboss en modules:

com.mysql.jdbc

por lo que

dentro de la carpeta modules crearemos una carpeta y el archivo:
com
    |->mysql
          |->jdbc
                 |->main
                         |--module.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <module xmlns="urn:jboss:module:1.0" name="com.mysql.jdbc">
  3.     <resources>
  4.         <resource-root path="mysql-connector-java-5.1.25-bin.jar"/>
  5.         <!-- Insert resources here -->
  6.     </resources>
  7.     <dependencies>
  8.         <module name="javax.api"/>
  9.     </dependencies>
  10. </module>


    copia en este misma carpeta el controlador j descrito en resource-root path:
                              mysql-connector-java-5.1.25-bin.jar

creamos el index del conector j y extraemos del propio archivo jar del conector de la carpeta META-INF y extraemos el archivo INDEX.LIST y lo renombramos con el con el nombre del controlador terminado en .index:

                       $> jar -i mysql-connector-java-5.1.25-bin.jar

y extraemos del propio archivo jar del conector de la carpeta META-INF y extraemos el archivo INDEX.LIST y lo renombramos con el con el nombre del controlador terminado en .index:

                                  INDEX.LIST-----> mysql-connector-java-5.1.25-bin.jar.index


                 Contenido del archivo INDEX.LIST:

META-INF
META-INF/services
com
com/mysql
com/mysql/jdbc
com/mysql/jdbc/authentication
com/mysql/jdbc/configs
com/mysql/jdbc/exceptions
com/mysql/jdbc/exceptions/jdbc4
com/mysql/jdbc/integration
com/mysql/jdbc/integration/c3p0
com/mysql/jdbc/integration/jboss
com/mysql/jdbc/interceptors
com/mysql/jdbc/jdbc2
com/mysql/jdbc/jdbc2/optional
com/mysql/jdbc/jmx
com/mysql/jdbc/log contenido del archivo:
com/mysql/jdbc/profiler
com/mysql/jdbc/util
org
org/gjt
org/gjt/mm

org/gjt/mm/mysql


jueves, 28 de noviembre de 2013

Practica 1

Enunciado del ejercicio:
Enunciado:
Diseñar una aplicación Web que posibilite registrar nuevos clientes en un servicio postventa de un 
fabricante de objetivos fotográficos. Para ello se solicitará que se rellene un formulario que contiene 
los siguientes campos: login, clave, email, nombre del cliente, apellidos del cliente, dirección postal 
del cliente, modelo del objetivo adquirido, fecha de compra, nombre de la tienda donde se adquirió y 
número de serie del objetivo.
Se validará el formulario. Si el login ya existe se indicará y pedirá uno nuevo. Se valida la clave de 
forma que posea entre 8 y 16 caracteres, al menos una letra mayúscula y al menos un dígito. 
También se valida el email (debe ser un email válido), la fecha de compra (formato dd/mm/aaaa) y 
además no debe ser posterior a la fecha de hoy. Si todo es correcto, se añade la información a la base 
de datos y se informa de que el registro ha sido correcto.
La aplicación mostrará inicialmente una página en la que se ofrece al usuario registrarse en el 
servicio. Si pulsa el botón de nuevo registro, se procederá a ofrecer el formulario, validarlo e informar 
de ello. Si hay errores se mostrará de nuevo el formulario indicando la razón del error. Si no hay 
errores, se indicará que todo ha sido correcto.
Nombre del proyecto Eclipse: ApRegistroPostVenta
Contexto raiz: regpostventa
Nombre de la base de datos MySQL: postventa
Se pide: El proyecto Eclipse completo, código fuente java debidamente documentado en Javadoc, 
script de creación y rellenado inicial de la base de datos MySQL, diagrama del modelo relacional 
creado con WorkBench, archivo WAR (sin contener librería ConectorJ).
Se sube todo comprimido en un archivo denominado PR01-<Primerapellido><SegundoApellido>.[zip|
rar]
Nota: Se supone que la base de datos está en 3 forma normal.

El ejercicio funcionando: http://negrero.no-ip.org:8081/regpostventa/
Planteamiento de la base de datos:





Utilizo cuatro archivos para la web dos clases beans y tres clases pojo de las cuales el peso lo llevan:
registro.jsp y las clases Control y Validador:


registro.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
form.elegante input {
  padding: .2em;
}
form div {
  margin: .4em 0;
 
}
.pequeño{
width: 22%;
}
.mediano{
width: 22%;
}
.grande{
width: 22%;
}
form div label {
  float: left;
}
#contenedor {
  width: 700px;
  margin: 0 auto;
}
font{
color:red;
 font-size:12px;
}
</style>
</head>
<body>
<!--  Mi clases para capturar los datos  -->
<jsp:useBean id="usuario" class="pojo.Usuario"></jsp:useBean>
<jsp:useBean id="cliente" class="pojo.Cliente"></jsp:useBean>
<jsp:useBean id="producto" class="pojo.Producto"></jsp:useBean>
<jsp:useBean id="validador" class="beans.Validador"></jsp:useBean>
<!--  Clase que recoge los valores si los datos son correctos como es validar datos -->
<jsp:useBean id="control" class="beans.Control"></jsp:useBean>
<jsp:setProperty property="*" name="usuario"/>
<jsp:setProperty property="*" name="cliente"/>
<jsp:setProperty property="*" name="producto"/>
<jsp:setProperty property="control" name="validador" value="<%=control%>"/>
<%if (request.getParameter("aceptar")!=null){%>
<jsp:setProperty property="usuario" name="control" value="<%= usuario%>"/>
<jsp:setProperty property="cliente" name="control" value="<%=cliente%>"/>
<jsp:setProperty property="producto" name="control"  value="<%=producto%>"/>
<jsp:setProperty property="aceptar" name="control" value='<%=request.getParameter("aceptar")%>'/>
<%} %>
<div id="contenedor" >
<form action="registro.jsp">
<fieldset>
<legend>Datos de usuario</legend>
<div>
<!--
Exlicacion de la validacion de los campos de formulario:
value=si no es null(=null primera vez, al cargar la pagina) no muestra el valor null pero sino muestra el valor que tenia anterior
<font> Entre las etiquetas font pregunto si se ha pulsado aceptar(primera vez) y despues  pregunto si es valido 
a partir de un patron dado, si no es valido mensaje de error
  
-->
<label for="login" class="pequeño">Login:</label> 
<input type="text" name="login" size="15"
value="<%if (usuario.getLogin()!=null){ %><jsp:getProperty property='login' name='usuario'/><%}%>"
maxlength="15" /> <font ><jsp:getProperty property="validarLogin" name="validador"/></font>
</div>
<div>
<label for="clave"class="pequeño">Clave:</label> 
<input type="password" maxlength="16" name="clave"
value="<%if (usuario.getClave()!=null){ %><jsp:getProperty property='clave' name='usuario'/><%}%>"
size="16" /> <font><jsp:getProperty property="validarClave" name="validador"/></font>
</div>
<div>
<label for="email" class="pequeño">Email:</label> <input
type="email" name="email" 
value="<%if (usuario.getEmail()!=null){ %><jsp:getProperty property='email' name='usuario'/><%}%>"
size="30" maxlength="30" /> <font><jsp:getProperty property="validarEmail" name="validador"/></font>
</div>
</fieldset>
<fieldset>
<legend>Datos de cliente</legend>
<div>
<label for="nombre"class="mediano">Nombre:</label>
<input type="text" max="15" maxlength="15" name="nombre"
value="<%if (cliente.getNombre()!=null){ %><jsp:getProperty property='nombre' name='cliente'/><%}%>"/>
<font><jsp:getProperty property="validarNombre" name="validador"/></font>
</div>
<div>
<label for="apellidos"class="mediano">Apellidos:</label>
<input type="text" max="30" maxlength="30" name="apellidos"
value="<%if (cliente.getApellidos()!=null){ %><jsp:getProperty property='apellidos' name='cliente'/><%}%>"/>
<font><jsp:getProperty property="validarApellidos" name="validador"/></font>
</div>
<div>
<label for="direccion"class="mediano">Direccion:</label>
<input type="text" size="30" maxlength="50" name="direccion"
value="<%if (cliente.getDireccion()!=null){ %><jsp:getProperty property='direccion' name='cliente'/><%}%>"/>
<font><jsp:getProperty property="validarNombre" name="validador"/></font>

</div>
</fieldset>
<fieldset>
<legend>Datos del Producto</legend>
<div>
<label for="objetivo"class="grande">Modelo objetivo:</label>
<input type="text" size="15" maxlength="15" name="objetivo"
value="<%if (producto.getObjetivo()!=null){ %><jsp:getProperty property='objetivo' name='producto'/><%}%>"/>
<font><jsp:getProperty property="validarObjetivo" name="validador"/></font>
</div>
<div>
<label for="fecha" class="grande">Fecha de compra:</label>
<input type="text" name="fecha"
value="<%if (producto.getFecha()!=null){ %><jsp:getProperty property='fecha' name='producto'/><%}%>"/>
<font><jsp:getProperty property="validarFecha" name="validador"/></font>
</div>
<div>
<label for="tienda" class="grande">Nombre de la tienda:</label>
<input type="text" size="30" maxlength="30" name="tienda"
value="<%if (producto.getTienda()!=null){ %><jsp:getProperty property='tienda' name='producto'/><%}%>"/>
<font><jsp:getProperty property="validarTienda" name="validador"/></font>
</div>
<div>
<label for="serie" class="grande">Nº de serie del objetivo:</label>
<input type="number" name="nserie" size="5" maxlength="5"
value="<%if (producto.getNserie()!=null){ %><jsp:getProperty property='nserie' name='producto'/><%}%>"/>
<font><jsp:getProperty property="validarNserie" name="validador"/></font>
</div>
</fieldset>
<fieldset>
<div>
<input type="submit" value="Aceptar" name="aceptar"/>
</div>
</fieldset>
<%if (request.getParameter("aceptar")!=null){
if (control.getGrabar()){%>
<jsp:forward page="grabado.html"></jsp:forward>
<%
}else{
out.write("<font>Error al grabar los datos</font");
}
}
 %>
</form>
</div>

</body>
</body>
</html>

Validador.java
package beans;

import java.io.Serializable;


/**
 * @author Andres Carmona gil
 * Clase que encapsula las validaciones de los datos del formulario
 * a la cual se le pasa los datos a traves de la clase Control
 *
 */
@SuppressWarnings("serial")
public class Validador implements Serializable {


/**
* Clase control que recibe los datos del formulario
*/
private Control control=null;

public Validador(){

}


/**
* Retorna la clase control
* @return the control
*/
public Control getControl() {
return control;
}


/**
* Le pasamos la clase control
* @param control the control to set
*/
public void setControl(Control control) {
this.control = control;
}


/**
* Devuelve un String con el error si no es valido el login:
* esta vacio el campo o si el login existe ya en la base de datos
* @return String error
*/
public String getValidarLogin(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getUsuario().getLogin()==null){
error="<-- Usuario requerido no puede estar vacio) ";
}else{
if (control.getExisteLogin()){
error="<--Nombre de usuario ya existe";
}
}
}

return error;
}
/**
* Devuelve un String con el error si no es valida la clave segun patron
* o el campo esta vacio
* @return String error
*/
public String getValidarClave(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getUsuario().getClave()==null ||
!control.validar(control.getUsuario().getClave(), "patronClave")){
error="<-- Clave requerida(8-15 caracteres al menos un digito y una mayuscula)";
}
}

return error;

}

/**
* Devuelve un String con el error si no es valida la email segun patron
* o el campo esta vacio
* @return String error
*/
public String getValidarEmail(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getUsuario().getEmail()==null ||
!control.validar(control.getUsuario().getEmail(), "patronEmail")){
error="<-- Email requerido o mal escrito(nombre@compañia.com)";
}
}
return error;
}

/**
* Devuelve un String con el error si el nombre del cliente esta vacio
* @return String error
*/
public String getValidarNombre(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getCliente().getNombre()==null){
error="<-- Nombre requerido no puede estar vacio";
}
}
return error;
}
/**
* Devuelve un String con el error si el apellidos del cliente esta vacio
* @return String error
*/
public String getValidarApellidos(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getCliente().getApellidos()==null){
error="<-- Apellidos requerido no puede estar vacio";
}
}
return error;
}

/**
* Devuelve un String con el error si el direccion del cliente esta vacio
* @return String error
*/
public String getValidarDireccion(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getCliente().getDireccion()==null){
error="<-- Direccion requerida no puede estar vacio";
}
}
return error;
}

/**
* Devuelve un String con el error si el nombre del objetivo esta vacio
* @return String error
*/
public String getValidarObjetivo(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getProducto().getObjetivo()==null){
error="<--Nombre objetivo requerido no puede estar vacio";
}
}
return error;
}

/**
* Devuelve un String con el error si la fecha de compra del objetivo no es valida
* segun patron (dd/mm/yyyy) y no es posterior a hoy
* @return String error
*/
public String getValidarFecha(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (!control.validar(control.getProducto().getFecha(),"patronFecha")){
error="<-- Fecha requerida  o no valida(dd/mm/aaaa)";
}else{
if (control.getFecha()){
error="<-- la fecha tiene que ser anterior a la de hoy";
}
}
}
return error;
}

/**
* Devuelve un String con el error si el nombre de la tienda esta vacia
* @return String error
*/
public String getValidarTienda(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getProducto().getTienda()==null){
error="<--Nombre tienda requerido no puede estar vacio";
}
}
return error;
}
/**
* Devuelve un String con el error si el numero de serie no es un numero con el patron numero
* @return String error
*/
public String getValidarNserie(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getProducto().getNserie()==null ||
control.validar(control.getProducto().getNserie(), "patronNumero")){
error="<-- Numero de serie no puede estar vacio o no es valido";
}
}
return error;
}


}

viernes, 15 de noviembre de 2013

Expresiones Regulares

1. Validar una URL

¿Quieres saber si una dirección web es válida? No hay problema con esta expresión regular lo tendremos muy fácil:
  1. /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \?=.-]*)*\/?$/  

2. Validar un E-mail

En muchas ocasiones necesitaremos saber si un e-mail con el que se trata de registrar un usuario es válido:
  1. ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$  

3. Comprobar la seguridad de una contraseña

Para aquellos que necesitáis sugerir / comprobar la fortaleza de una contraseña:
  1. (?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$  
De esta forma comprobaremos:
  • Contraseñas que contengan al menos una letra mayúscula.
  • Contraseñas que contengan al menos una letra minúscula.
  • Contraseñas que contengan al menos un número o caracter especial.
  • Contraseñas cuya longitud sea como mínimo 8 caracteres.
  • Contraseñas cuya longitud máxima no debe ser arbitrariamente limitada.

4. Validar un número de teléfono

Con este snippet se validarán todos los número de teléfono pertenecientes a los listados en la Wikipedia:
  1. ^\+?\d{1,3}?[- .]?\(?(?:\d{2,3})\)?[- .]?\d\d\d[- .]?\d\d\d\d$  

5. Validar número de tarjeta de crédito

Ahora que tan de moda está el e-commerce seguro que esto le vendrá bien a más de uno:
  1. ^((67\d{2})|(4\d{3})|(5[1-5]\d{2})|(6011))(-?\s?\d{4}){3}|(3[4,7])\ d{2}-?\s?\d{6}-?\s?\d{5}$  

6. Recoger ID de un vídeo de Youtube

Si necesitas recoger el ID de un vídeo de Youtube en sus múltiples combinaciones, esta es tu expresión regular:
  1. /http:\/\/(?:youtu\.be\/|(?:[a-z]{2,3}\.)?youtube\.com\/watch(?:\?|#\!)v=)([\w-]{11}).*/gi  

7. Validar todas las etiquetas de imagen sin cerrar

Ahora que prácticamente todos empleamos xHTML es interesante comprobar que todas nuestras etiquetas de imagen están correctamente cerradas:
  1. <img([^>]+)(\s*[^\/])></img([^>  

8. Validar una dirección IP

Si necesitas validar una dirección IP introducida por un usuario, esto te será de gran ayuda:
  1. /^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/  

9. Validar código postal

En muchas ocasiones necesitamos recoger en los formularios de alta el código postal:
  1. ^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$  

10. Validar un nombre de usuario

Si por ejemplo quisiésemos validar un nombre de usuario con un mínimo de 4 caracteres y un máximo de 15 haríamos lo siguiente:
  1. /^[a-z\d_]{4,15}$/i  
Además el nombre estaría utilizando sólo caracteres de la A-z y números.