Para poder hacer uso del archivo tsnames.ora en Toad o en PL/SQL Dev, etc…. lo mejor es crear una variable de entorno para que el archivo pueda ser ubicado en automatico


TNS_ADMIN

C:\Oracle\network\admin

La variable debe apuntar al path donde esta el archivo.

Share

Error PerGem space en Glassfish

Posted: 17th January 2017 by Jak in glassfish, j2ee, Java
Tags: ,

Glassfish esta plagado de bugs, sin embargo algunos se pueden arreglar por que es a base de configuraciones.

Uno de ellos es que cuando deployas cierta cantidad de veces, marca un error de PerGem space error.

Para intentar evitar esto hay que subirle la memoria en el archivo:


\glassfish\domains\domain1\config

Y en la siguiente linea subir de 512 a 1024 por ejemplo, esto obviamente si su server lo permite.


<jvm-options>-XX:MaxPermSize=512m</jvm-options>

stop-domain y luego start-domain para aplicar la configuración.

 

Otra forma de arreglarlo, es con la jconsole vaciar la PerGem

 

Nuncaaaa jamas en la vida dejen de programar.

Share

Oracle Store Procedures – MyBatis

Posted: 17th January 2017 by Jak in Java, MyBatis, Oracle
Tags: , , ,

Otra forma de consumir store procedures de Oracle con MyBatis, es con el mismo objeto de entrada solo se llenan los datos tipo IN, pasa por la llamada al store y se llenan en automatico los datos tipo OUT como se ve a continuación:


//DAO

public VoData getLoginSp(VoData input){
SqlSession session = getSession();

try {
session.selectOne("mappers.callSp", input);
} finally {
session.close();
}
return input;
}

 


//setters and getters...

public class SpLogin {

private String pw_id_user;
private String pw_password;
private String pw_error;

 

Los nombres del vo deben coincidir con el mapeo de la query en el xml. Aqui obtenemos la propiedad de salida que se llena en automatico.


String id = vo.getPw_error();

 

El mapeo en el xml


<select id="callSp" parameterType="VO" statementType="CALLABLE">
{ CALL SCC.SCC_P_AUTENTICACION_USUARIO(#{pw_id_user, mode=IN, jdbcType=VARCHAR},
#{pw_password, mode=IN, jdbcType=VARCHAR},
#{pw_error, mode=OUT, jdbcType=VARCHAR}) }
</select>

 

Share

Monitoreo de glassfish

Posted: 23rd November 2016 by Jak in glassfish, j2ee, Java

Uno de las cosas que siempre debemos hacer es monitorear nuestros webservers, esto siempre nos dara la pauta para saber si necesita o no mas galleta… para glassfish una forma de monitorearlo es a través de la jconsole

Basicamente vas al bin de tu instalacion de java…

Abres la jconsole, y si estas en el mismo server, simplemente eliges el proceso local que detecte como glassfish y listo…

Si no estas en el mismo server, es decir en remoto usas:

service:jmx:rmi:///jndi/rmi://localhost:8686/jmxrmi

Share

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("jakofff@email.com");
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