Mostrando entradas con la etiqueta Java. Mostrar todas las entradas
Mostrando entradas con la etiqueta Java. Mostrar todas las entradas

martes, 20 de agosto de 2013

Ejecutar procedimiento almacenado en hibernate 4

De vez en cuando hay que ejecutar procedimiento almacenados en hibernate 4 he aqui un ejemplo, en realidad utiliza hibernate como la capa mas alta, al final lo ejecuta por jdbc, y esto es porque hibernate 4 solo ejecuta procedimientos almacenados de forma directa si estos devuelven datos en plan resultset, en caso contrario segun nos cuenta en su pagina se debe de utilizar por jdbc, que le llaman un "Work"

Ejemplo:

Params es una clase para encapsular lo datos entrada salida.

public void executeProcedimientoAlmacenado(final Params params) {
final StringBuilder sql = new StringBuilder("");
sql.append(" call esquema.nombre_procedimiento_almacenado(");
sql.append(" ?,");//IN_param_1
sql.append(" ?,");//IN_param_2
sql.append(" ?)");//OUT_param_1
getSession().doWork(new Work(){

public void execute(Connection connection) throws SQLException {
CallableStatement callStmt = connection.prepareCall(sql.toString());
int indexParam=1;
callStmt.setInt(indexParam++, params.getInParam_1());//1
    callStmt.setInt(indexParam++, params.getInParam_2() !=null ? params.getInParam_2() : Types.NULL);//2
callStmt.registerOutParameter(indexParam++, Types.INTEGER);//3
callStmt.executeUpdate();

params.setOutParam(callStmt.getInt(3)); //El parametro 3 es la salida, y lo pasamos al objecto params
}

});
}

Como se ve se utiliza "Work" que es una ejecución directa jdbc encampsulada por hibernate 4, y el objeto Params contiene los datos de entrada posterioremente se setean los de salida y así desde donde se llama el método el params contiene los resultados.

el getSession() es para obtener la session de hibernate, que se traduce también en sessionFactory.getSession() el sessionFactory es inyectado con Spring al Dao que ejecute los procedimientos almacenados, igual que cualquier otro dao.


jueves, 1 de agosto de 2013

Utileria. Convertir un DTO en String.


Aveces hace falta para sacar en consola o en el log, los valores de un objeto

    /**
     * Transforma un DTO a cadena.
     * @param obj
     * @return
     * @throws SecurityException 
     * @throws NoSuchMethodException 
     */
    public static String dtoToString(Object obj){
    if(obj!=null){
    StringBuilder out = new StringBuilder();
        out.append("[");
        Field[] props = obj.getClass().getDeclaredFields();
        for(Field prop:props){
    try{
    String methodName= "get";
        methodName += String.valueOf(prop.getName().charAt(0)).toUpperCase();
    methodName += prop.getName().substring(1);
    Method getter = obj.getClass().getMethod(methodName);
    Object value = getter.invoke(obj, new Object[0]);
        out.append(prop.getName()+":"+value);
        out.append(", ");
    }catch(Exception e){
    }    
        }
        out.append("]");
        return out.toString();
    }else{
    return "No dto object";
    }
    }


Utileria. Para poblar un pojo con datos provenientes de un resultSet.

Esta es una clase utileria para poblar un objeto DTO con datos provenientes de un resultset en java

package com.inditex.isu4.core.services.factory;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;

/**
 * Factoria de construccion de DTO's
 * @author etereum
 *
 */
public class DTOFactory{

private static Logger log = Logger.getLogger(DTOFactory.class);

/**
* Contrulle la lista de DTO's apartir del tipo de dto que se pase como parametro.
* @param dtoType
* @param rs
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
* @throws InvocationTargetException
* @throws SecurityException
*/
public static <T> List<T> getDTOListFromRS(T dtoType, ResultSet rs) throws SQLException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException{
log.debug("getDTOListFromRS....");
List<T> dataList = new ArrayList<T>();
Constructor[] factories = dtoType.getClass().getDeclaredConstructors();
Constructor factory = null;
for (int i = 0; i < factories.length; i++) {
factory = factories[i];
   if (factory.getGenericParameterTypes().length == 0)
break;
}
while(rs.next()){
   Object dto = factory.newInstance();
   Field[] props = dto.getClass().getDeclaredFields();
  for(Field prop:props){
 try{
Object value = rs.getObject(prop.getName());
  String methodName= "set";
      methodName += String.valueOf(prop.getName().charAt(0)).toUpperCase();
  methodName += prop.getName().substring(1);
  Class<?> classType =null;
  if(value ==null){
  continue;
  }else if(value instanceof String){
      classType=String.class;
  }else if(value instanceof Integer){
      classType=Integer.class;
  }else if(value instanceof Date){
  classType=Date.class;
  }
  Method setter = dto.getClass().getMethod(methodName, classType);
  setter.invoke(dto, value);
 }catch(Exception e){
 log.warn("No fue posible asignar el valor. ["+prop+"]");
   log.warn("Exception.getDTOListFromRS", e);
   }
           }
dataList.add((T)dto);
}
log.debug("getDTOListFromRS.OK.");
return dataList;
}

}

miércoles, 10 de abril de 2013

Oferta laboral

"Empresas" malas, malas, malas, malisimas, o peor aun simples "Gestorias" que regentean personas en otras palabras carroñeros de personal.

De:  ..... @avancesoluciones.com>
Para: ....@hotmail.com
Enviado: Un día, del mes, del año  alas ..50:00:01
Asunto: Propuesta de trabajo Desarrollador Java Sr Mexico Neo

Hola Buen día:

El motivo  de mi correo es porque vi tu cv en OCC, el cual me intereso para la siguiente posición que tengo.

Se solicita JAVA Developer
Se necesita quetenga experiencia en desarrollo Java de  3 años.
Duración:  6 meses
Localidad: México

El esquema que manejamos es el siguiente:
1.- Se te contrata por la duración del proyecto.
2.- Se te da tu pago libre
3.- El pago es Quincenal.
3.-  No se manejan las prestaciones de ley , se te daría Seguro de Gastos médicos Mayores por la duración de tu proyecto.
4.- Se te da seguimiento, es decir cuando este por terminar tu proyecto se trata de ver si el cliente tiene algún proyecto en base a tu perfil.
Si te interesa y cumples con el skill, te pido me mandes estos formatos llenos y tu  cv actualizado, si tienes alguna duda indícamelo para contactarte.
En caso de que no estés disponible o no te interese el proyecto si conoces a alguien que pudiera interesarle el proyecto te pido le pases mis datos.
Espero tu respuesta sea positiva o no.
Saludos :D
  
Lic. C (que tiene nomina, prestaciones de ley, plus, y vive usar y tirar a la gente)
AVANCE|Delivery Center
Empresa Verificada (MOPROSOFT)
 @avancesoluciones.com
Monterrey | Houston | México DF | Chihuahua
-------------------------------------------------------------------------------------

Visitando la pagina de la empresa vemos que no tiene ni la mas mínima información... ademas de estar echa en PHP, (son tan cutres que pagan el hosting mas barato).

Al parecer es una de esas gestorías que se auto nombran "Consultoras expertas en IT" que buscan profesionales en informática para revenderlos, al revendedor, mermar el sueldo del trabajador por el transpaso de manos en mano.

Y porque no dicen lo mas importante? la paga? acaso serán 50,000 pesos mensuales? solo así se compensa su esquema, y eso para un becario, un becario tiene a lo mas 8 meses de experiencia... bueno quizás me estoy excediendo, lo dejamos en 49,999.99, para un becario. Ya que no tienes seguridad social ni para ti, ni para tus padres, hijos o pareja, dice que dan gastos médicos mayores, que de seguro será solo para ti, y solo durante el proyecto, entonces no puedes darles exclusividad porque 2 meses antes tienes que ir buscando otro proyecto. Aunque si nunca te dicen la fecha limite del proyecto, vamos mal!!!!!.

Esta claro que esta oferta se puede tomar mientras se consigue algo mejor, que de verdad de "empresas" como esta estoy hasta los huevos!!!!!!!!!!!






jueves, 17 de enero de 2013

Proyecto Base SWT para windows...

Este es un proyecto base para SWT.
Utiliza maven version 3.0.3
Eclipse, Juno.
SWT v 4.234  para windows

Este proyecto genera un zip con un jar que se puede ejecutar con "java -jar nombre.jar" o doble click en el jar y siempre y cuando se tenga instalado JRE ya se iniciara la aplicacion.

Una vez descomprimido ejecutar:

mvn clean package

Y ya tenemos el zip para distribuir.


Click aqui para descargarlo....