MyBatis 3 – llamadas a stores

Posted: 10th November 2016 by Jak in j2ee, Java, MyBatis

Como sabrán este framework es muy fácil de usar, pero a veces tiene sus complejidades, una de ellas es la forma en que se deben mapear los objetos cuando se llama a un store. He aqui un ejemplo:

Estamos usando DAOS y los mapeos son atraves de XML.

Primero en el mapper tenemos.

resultOrder es el objeto resultado que se asocia al cursor, mapea los campos de listado que regresa el cursor con el modelo, en este caso el modelo es Order, por lo cual es una lista de orders.

En la llamada al store es importante poner los tipos de datos que ocupan los parametros de entrada y de salida, sino marcara un error.

Ahora para que la magia suceda, el tipo de entrada debe tener los parametros de entrada y salida que ocupe el store, en este caso es SpOrdersInput.


<mapper namespace="mappers">

 <resultMap id="resultOrder" type="Order">
 <result column="FIELD1" property="prop1" />
 <result column="FIELD2" property="prop2" />
ns" />
etc...
 </resultMap>

 <select id="callGetOrders" parameterType="SpOrdersInput" statementType="CALLABLE">
 { CALL SP(#{num, mode=IN, jdbcType=NUMERIC},
 #{user, mode=IN, jdbcType=VARCHAR},
 #{list, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=resultOrder},
 #{code, mode=OUT, jdbcType=NUMERIC},
 #{error, mode=OUT, jdbcType=VARCHAR}) }
 </select>

</mapper>


public class SpOrdersInput {

 private int num;
 private String user;
 private List<Order> list;
 private Integer code;
 private String error;

Ahora para obtener la lista en el metodo del DAO


public SpOrdersOuput getOrdersByCard(SpOrdersInput input){
 SqlSession session = getSession();
 SpOrdersOuput result = new SpOrdersOuput();

 try {
 session.selectOne("mappers.callGetOrders", input);
 List<Order> list = (List<Order>) input.getList();

 result.setOrders(list);
 result.setCode(input.getCode());
 result.setError(input.getError());

Con esto ya pueden iterar su lista y obtener los registros….

Y recuerden…

“Nunca dejen de programar….”

Share

Base64 encoder and decoder

Posted: 25th October 2016 by Jak in hack, hacking, Herramientas, Tools

Una herramienta básica que ya me había tardado en hacer, me llevo unos 15 minutos hacerla.

http://b64.softiux.mx/

Share

Implementar swagger en Jersey 2

Posted: 25th October 2016 by Jak in j2ee, Java, jersey2, rest, swagger

Swagger es una grandisima idea, simple y efectiva para crear la documentación de servicios rest, todo lo hace a partir de anotaciones. Se expone una app web donde están los contratos de interfaz y desde ahi mismo se pueden realizar las peticiones de prueba, es importante que solo se haga en desarrollo, en produccion se debe quitar la app web.

Para mas información: http://swagger.io/

Esta implementación es es con maven y con jersey 2 por servlet.

agregar en el pom:


<swagger.version>1.5.0</swagger.version>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey2-jaxrs</artifactId>
<version>${swagger.version}</version>
</dependency>

En el web.xml, en el servlet del jersey agregar: io.swagger.jaxrs.listing


<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value><strong>io.swagger.jaxrs.listing,</strong> com.*.srews.resource</param-value>
</init-param>

Y otro servlet: com.*.*.servlets.Bootstrap


<servlet>
<servlet-name>SwaggerBootstrap</servlet-name>
<servlet-class>com.*.*.servlets.Bootstrap</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>

Esta clase lo que hará es definir la entrada para crear el swagger.json, que básicamente es el archivo que la app web leerá con toda la documentación.

La clase :


/**
*
* @author Jakofff
*/
public class Bootstrap extends HttpServlet {

@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);

BeanConfig beanConfig = new BeanConfig();
beanConfig.setTitle("API");
beanConfig.setDescription("API");
beanConfig.setVersion("1.0.0");
beanConfig.setContact("[email protected]");
beanConfig.setSchemes(new String[]{"http", "https"});
beanConfig.setHost("localhost");
beanConfig.setBasePath("/rest/api");
beanConfig.setResourcePackage("com.*.resource");
beanConfig.setScan(true);
}
}

Después bajar el UI:

https://github.com/swagger-api/swagger-ui/releases

Copiar todo el contenido de la carpeta dist

Y ponerlo en una carpeta en WebPages/ui

Acceder a http://localhost/rest/api/ui

y listooo!

 

Share

Cloudflare creo un modulo para apache, el cual nos permite obtener la ip real del usuario en lugar de la ip de sus servidores.

Primero se debe de bajar el código de github

https://github.com/cloudflare/mod_cloudflare

Despues instalar las herramientas de desarrollo de apache:

yum install httpd-devel

Compilar el codigo:
$ apxs -a -i -c mod_cloudflare.c

si no esta el apxs usa apxs2

sino se puede con apxs usa gcc:

$ autoconf
$ ./configure
$ make
$ make install

Despues se instalar y cargara automaticamente el modulo en el http.conf

LoadModule cloudflare_module /usr/lib/apache2/modules/mod_cloudflare.so

Ya solo resta reiniciar el apache: 

apachectl stop
apachectl start

con esto en los logs de apache ya podras ver la ip real del usuario

Share

Glassfish – directorios utiles – cache

Posted: 19th October 2016 by Jak in glassfish

Para limpiar la cache de glassfish

$GLASSFISH_HOME/glassfish/domains/domain1/osgi-cache/*

 

 

 

Share

Drobpox hackeado!

Posted: 19th October 2016 by Jak in hack, hacking, pwned

A principios de Octubre un hacker publico una lista con 66 millones de cuentas, aparentemente segun lo dicho son cuentas hackeadas en 2012, sin embargo pudieran ser todas o solo ser una parte del hackeo, para que todos pudieran buscar su cuenta y saber si fue comprometida, hice un dump de los archivos y los pase a una base de datos mysql, de tal forma que cree una herramienta de búsqueda la cual pueden encontrar aquí:

http://dropboxpwned.passwordator.com/

Si tu cuenta esta en la lista, lo mejor es que cambies la contraseña, si no esta, aun así recomendamos que cambies la contraseña.

Recomendamos ampliamente usar contraseñas aleatorias, puedes usar nuestra herramienta para esta tarea:

http://passwordator.com/

saludos. happy hacking!

Share

JSF2 – Validar un campo readonly

Posted: 9th October 2016 by Jak in j2ee, Java, jsf2

Deben saber que los campos que no son readonly, cuando haces un submit o un ajax se pueden validar del lado del cliente con ValidateClient=true en el botón, sin embargo cuando son readonly debido al mismo ciclo del Java Server Faces, esto no es posible, sin embargo existe un truco para poder hacerlo, esto es por que el ciclo de vida esta en fases y una de ellas es el render, esto quiere decir que le podemos indicar al control que solo sea readonly cuando este sea renderizado, para todo lo demás que sea editable, y esto básicamente hará que tome la validación.

 


readonly="#{facesContext.currentPhaseId.ordinal eq 6}"

Share

JSF2 – comentarios

Posted: 9th October 2016 by Jak in j2ee, Java, jsf2

Un error básico que se comete con el front de JSF2 es que al comentar html o controles con métodos bean, en realidad el código html no se ejecuta pero el bean y sus métodos que estén en el control si se ejecutan. Para que esto no suceda se debe colocar el tag en el web.xml


<context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>

Share

Nunca dejen de programar

Posted: 9th October 2016 by Jak in vivencias de programador

La nostalgia de aquellos días… donde no usaba svn, git…. nada… tus copias eran en discos de 3 1/2 o 5 1/4, y tenias la manera artesanal de hacer scripts para hacer dichos backups, frontpage o hotmetalpro eran lo mejor de lo mejor, y claro tu editor de textos en plano favorito… geocities y altavista era lo que había, IE4 era algo que impresionaba… javascript, todo estaba plagado de javascript y gifs, dias de logo, basic, c, fortran, y clipper, luego algo de vbasic…. windows 3 y 3.11, 95, unix…. las competencias con mi mejor amigo de ver/saber quien hacia el código mas limpio, mas util, menos lineas, mas eficiente… las lans de fines de semana de la colonia… el dialup o conexion por telnet hacia el isp….

2016 seguiré escribiendo código con la misma pasión de siempre…

Share

Soft reset Fenix 3

Posted: 25th July 2016 by Jak in Fenix 3

El fenix 3 es un excelente dispositivo sin embargo, como todo software tiene sus deficiencias, en el caso de este reloj, tiende a pasmarse repentinamente, no sucede a menudo, pero cuando suceda es bueno saber que hacer…. y es muy fácil, presiona el botón de light por varios segundos hasta que el reloj se apague, y para encenderlo con el mismo botón durante varios segundos, con esto basta para que vuelva a funcionar sin ningún problema.

Share