JPA Generic Type Extraño Error

Holas,

No es un tutorial solo quiero dejarles y dejarme un TIP cuando sucede lo siguiente:

- Tiene una tabla ejm Menu y su DTO con id tipo long y demás campos
- Tiene un dao en el estilo DAO
- Tienen un JPA en el estilo MenuImplJPA extends DAOImpl

implements MenuJPA.
- Hacen en sus business methods algo como menuDAO.findByPK(“1″) que devuelve algo mediante JPQL 

Bien,

El primer error les dirá que le están pasando un String al JPQL y esperaba un long, entonces cambian por menuDAO.findByPK(1L)

Ok, no da error “TODO BIEN”

FALSO, el objeto les devuelve solo con contenido para el atributo id y el resto de atributos del la clase Menu(DTO) están nulos…… sabes por que?

Fíjense que la declaración de la interfaz dao y su implementación la declararon así:

MenuImplJPA extends DAOImpl<Menu, String> implements MenuJPA

lo que esta mal ya que el id es un Long y le pusieron String pero en compilación y ejecución no les dice NADASSS y solo se ve un objeto vacío. Obviamente la solución es fijarse bien en el DAO creado para menu que debería ser algo como

MenuImplJPA extends DAOImpl<Menu, Long> implements MenuJPA

Y listop, verán que el objeto ya tiene todos los datos

Este error es escondido y lo complejo es que no da un excepción ,,, lo que me llevo a releer el código varias veces tomando en cuenta que no solo tengo un DTO sino como muchos…

Bueno espero les pueda ayudar en algún momento

Saludos

J2EE - JEE , , , Leave a comment

Error Your preferences can not be read en Google Chrome Linux

Holas,

En varios ambientes inclusive en el mio tuve este error y pues al ser tan repetitivo le dejo la solución.

Primero hay un directorio /home/miusuario/.config/google-chrome , ingresa alli y dale un ls -l . Vas a observar que uno de los archivos “Locale State” pertenece al root, lo cual es un problema ya que tu navegador no puede acceder a el y siempre te presenta el error en mención. Así que dale un…

chown miusuario:miusuario Local\ State

como root, y tienes el primer paso; pero hay otro archivo…. cuando le diste ls -l hay un directorio llamado Default es decir /home/miusuario/.config/google-chrome/Default , alli observaras al archivo Preferences con el mismo caso, así que dale un

chown miusuario:miusuario Preferences

Y listo!!! reinicia el chrome y todo estará bien.

Espero les sirva
Saludos

Other Topics Leave a comment

VirtualBox Network Adapters Virtual Machine y Host problemas

asdasd

Holas,
El sentido de este post es poner en “lenguaje entendible” como tratar este tema de networks adapters, y que basado en mi propia experiencia (que ya me doblaba por dummy) explica como enfrentar un problema.

El caso:
Tengo una laptop con una tarjeta de red wireless y una de cable, en la cual corre un distro de Linux (XUBUNTU que no viene al caso pero le doy crédito porque esta muy bueno!!); y mi necesidad era la de levantar un servicio en Windows (u otro que fuere ya que es lo mismo) y consumirlo desde mi laptop.

Bien instale Virtual Box y me cree mi Virtual Machine (VM) Windows, posteriormente instale el servicio en cuestión (en mi caso Oracle BDD aunque tampoco es relevante), lo cual por defecto me configuro una interfaz de red para mi VM de tipo NAT.

Evidentemente para instalar un servicio consumible debía darle ip fija así que configure la misma en mi VM Windows.

Antes de seguir aclaro un concepto: “Host” es la maquina en donde corre el Virtual Box, o sea en mi caso la laptop con Xubuntu.

Ok, intente hacer un ping desde el host a la VM…. y nada y al revés… y nada tampoco. Hora de leer el manual… pero no entendí y me di muchas vueltas y perdí 2 días, etc.
etc.

Los tips:
Ok si ustedes se fijan al arrancar el virtual box en el host se crea un interfaz en el mismo (host) que se llama vboxnet o algo parecido; bien no le pierdan el ojo que es clave.
NAT es un tipo que permite el acceso al internet y archivos en la VM a través del host, por tanto jamas harán ping o peor un telnet a un puerto (o sea consumir un servicio), así que para mi necesidad no me sirve
Bridge e Internal Network son tipos que permiten la salida de la maquina en la intranet (virtualbox) o extranet y que SI permiten consumir los servicios inicializados en el la VM, pero que NECESITA, como ya lo mencione, una intranet o extranet a la cual este ligado el host. Tampoco me sirve pues mi maquina a pesar de tener las interfaces de red wireless y cableada no están conectadas, por tanto por mas que las ips de una de las interfaces del host sea afable a la ip configurada en la VM no se podrán ver… porque salen ambas por un gateway que no hay… ejemplo: el host tiene 10.10.10.20 y la VM 10.10.10.40 con la mascara adecuada, pero ambos salen por la 10.10.10.1… ups no hay la tal 10.10.10.1 porque no hay red (espero haberme explicado aunque supongo que con algunas configuraciones en el host se podría pero se complica)
Host-Only es lo que necesito ya que se conecta con la interfaz vbox de la que hablamos al principio. Ejemplo
La interfaz del host que se creo al inicializar el Virtual Box tiene la ip 192.168.56.1, entonces a la interfaz de la VM la seteo con 192.168.56.2…. y listo.. aunque no se hagan ping prueben un telnet al puerto del servicio en cuestión y verán que funciona, sin estar el host ligado a ninguna red interna o externa.

Así entonces desde hoy llevo a mi maquina a todo lado sin conectar nada y puede interactuar normalmente con la base de datos Oracle que esta en el VM del Virtual Box

Los conceptos mas precisos están en el manual, pero el como en un ejemplo no te ponen y espero de verdad que les guie este post un poco.

Saludos

Other Topics Leave a comment

graphic + intel + xorg.conf + linux

Hola amigos,
Esta vez algo de informaciòn super ùtil a los que estamos en aprendizaje de linux, y es el tema de los graficos. Bie el problema fue que cierta resoluciòn no funcionaba en mi distro de debian… y me encajone desde temas como vertRefresh y horizSync hasta pensar que era un tema de mi monitor “LCD”; pues bien nada de eso… si bien es importante setear los valores correctos de tu monitor es mas importante saber que estas haciendo en el fondo.. por eso te invido a dar una vuelta por http://www.x.org/wiki/ para entender porque hay un “Screen”, un “Monitor”, un “Device”, etc y porque todos tienen la declaracion “Identifier”.

Bien, al instalar algunos distros no encontraras la seccion “Device” en tu xorg.conf y si googleas un poco encontraràs que la mayorìa de temas te recomiendan por algo asi:

Section “Screen”

Device “intel xxx” o “intel”

EndSection

Resultado: NO FUNCIONA. Pues si revisaste algo de http://www.x.org/wiki/, veràs que lo señalado en Device es un nombre nadas mas que corresponde a un Seccion de tipo “Device” que tiene como identificador ese nombre…. entonces de nada te sirve porque xorg no encuentra tu especificacion y toma la de defecto de tu distro de linux… por tanto jamas veras un cambio.

Este y otros temas los puedes detectar si te detienes un poco en el log “/var/log/Xorg.0.log”, del mismo modo temas relacionados a tu keyborad, etc.

Bien finalmente te dejo una configuracion “standar” que muy seguramente funcionara para tu instalaciòn. Archivo “/etc/X11/xorg.conf”

Section “Device”
Identifier “Intel G43″
Driver “intel”
EndSection

Section “Monitor”
Identifier “Configured Monitor”
Option “DPMS”
HorizSync 31-80
VertRefresh 56-75
EndSection

Section “Screen”
Identifier “Default Screen”
Monitor “Configured Monitor”
Device “Intel G43″
DefaultDepth 24
SubSection “Display”
Depth 24
Modes “1360×768″ “1024×768″
EndSubSection
EndSection

Espero que les sirva.

Other Topics , , , Leave a comment

GWT – Utilizando FormPanel ejemplo

Amigos buenos días, esta ocación dejo a su consideracion un ejemplo básico de un FormPanel con su action a un URL externo por ejemplo y el submit implicito para conseguir la navegación adecuada.  Esto debido a que normalmente las operaciones en GWT son ajax y se utiliza el redirect para ir a otro modulo un aplicación.

Porque?: bueno resulta que en mi caso tuve que delegar el login a un proveedor de openid y tratar la respuesta, siendo un tema algo mas extenso pero eso lo posteare específicamente. Sin mas les dejo el código puntual….


com.google.gwt.user.client.ui.FormPanel form = new com.google.gwt.user.client.ui.FormPanel("_self");
form.setAction("../ec.com.bancoInternacional.modulos.propuesta.lista.Form/Form.html");
form.setMethod(com.google.gwt.user.client.ui.FormPanel.METHOD_POST);
form.setVisible(false);
RootPanel.get().add(form); //OJO si no incluyen esta instrucción jamas habrá un login :-)
form.submit();

Espero les sirva y les ahorre las búsquedas del caso.

AJAX , , , , 2 Comments

Descargando archivos con PHP y readfile

Buenas amigos,

Bueno es esta ocasión quiero compartir una experiencia con descargas de archivos. En la gestión de un requerimiento necesita descargar un archivo sin que obviamente escriba algo como un href en la pagina para tener el control de bajo que condiciones el usuario podía acceder a el.
Bueno la opción fue readfile una función que admite un url o path de el archivo objetivo y esta en combinación con headers produce una descarga eficiente.
Mi problema fue que ciertos usuarios no pudieron descargarse la aplicación o mejor dicho ellos pensaron que si pero en realidad se descargaron un archivo incompleto con semblante de completo.
Mi código fue este
$file = ‘mi_archivo.exe’;
header(‘Content-Type: application/octet-stream’);
header(‘Content-Transfer-Encoding: binary’);
header(‘Content-Length: ‘ . filesize($file));
header(‘Content-Disposition: attachment; filename=”mi_archivo.exe”‘);
readfile($file);

Al parecer todo ok pero tuve un problema invisible, y fue que mi servidor apache tenia configurado por defecto compresión gzip y por tanto los browser IE en la mayor parte al tener dead locks en la comunicación con la descarga de stream finalizaban la misma y voilá!!! archivo corrupto pero eso si con un semblante de correcto y con extensión completa y etc.

Esto sobreescribia mi header Content-Length y nos ponía en el aprieto de que el browser no sabia ni que tamaño tiene la descarga ni si ya finalizo.

Solución: fue escribir en el .htaccess actual o uno nuevo la directiva correspondiente para evitar comportamiento de compresión, así:

SetEnv no-gzip dont-vary

Listo deploye nuevos archivos y hasta hoy no tengo inconvenientes.

Espero les sirva

General , , , , Leave a comment

Criterio “Interceptor” en jquery

Amigos,
Es esta ocasión quiero compartir la experiencia que tuve al tratar de buscar una solución para interceptar las llamadas ajax de jquery.  Mi problema fue que al tener sesión caducada la respuesta de mi llamada ajax resultaba en error y como estuvo desarrollada la app no se podía evidenciar ese error como caducidad de sesión al usuario a menos que cambiemos manejemos el caso en todas las llamadas ajax (+500 jsp aprox.), la solución era buscar una manera de que: antes de ejecutarse el request XHR averigüe si hay sesión valida.

Para este fin hice desde crear plugins para $.json, $.fn.jqgrid hasta tratar de manejarlo en la capa del servidor (inventando el agua tibia) hasta que leyendo un poco más la documentación encontré “$.ajaxSetup()”, dentro de las ventajas de jquery teniendo un evento de referencia llamado “beforesend”, Eureka esa es la respuesta ya que todos las peticiones ajax en jquery pasan tarde o temprano por $.ajax() entonces ese es el momento de validar.

Bueno entiendo que es un tema de desconocimiento de todo jquery o de la aplicación de algunas de sus ventajas pero evidentemente no es notorio al principio.  Les dejo un código de referencia y espero que les sirva en sus tareas diarias.

Saludos

$.ajaxSetup({

error : function(xhr, tS, eT){

var cur = window.location.href;// aqui averigua donde estoy

if(){// aqui evaluo una condicion que me dice si el error es de tipo especifico

window.open(“../”, “_self”); // lanzo a la pagina inicial

}

}

});

AJAX , , , Leave a comment

Como crear un link de descarga de aplicaciones móbiles java

Amigos,

Como siempre en los primeros pasos de aplicaciones móviles, una vez que tenemos el “Hola Mundo”, no sabemos como dejamos un link instalable en la web para probar las mismas desde nuestro móvil y nos perdemos en errores como:  ver el contenido del jar en el móvil en vez de instalarlo, errores con certificado, etc.

Bueno la respuesta es el archivo jad,  siempre que creamos una nueva app java generamos un jar y un jad al menos al compilarla… pues bien ese es el archivo deberá ir en el link.  Ejemplo:

<a href=”apps/holamundo.jad”>descargar</a>

Sin embargo en el directorio donde se encuentre el jad deberá estar este archivo asi como el jar y demás files de nuestra app que se hayan generado en tiempo de compilación del ide.

La mayoría de veces utilizamos librerías o recursos adicionales los mismo que están en carpetas fuera de nuestro src, pues no se preocupen que el compilador del ide generara el jar con los mismos.

Los certificados son parte de las aplicaciones confiables pero se requiere de un largo proceso para obtener el mismo y en la mayoría de los casos el usuario no se detendrá por este tema, sin embargo existe aplicaciones que manejan recursos delicados del smart phone por lo que no se instalaran de ninguna manera si no poseen un certificado confiable.  Les dejo un link para mas información del tema:  http://es.onsoftware.com/p/error-de-certificado-firma-tus-aplicaciones-symbian-i

Mi consejo no se metan con certificados a menos que sea imperante para su proyecto y la aplicación Java se instalara sin problemas.

Adicional a esto existe consideraciones particulares para la misma aplicación que instalamos en un smartphone al instalarla en blackberry o iphone.  Por ejemplo en el primer caso el movil buscara a demás de los archivos jad y jar, archivos como cod o cso, para fines puntuales de la instalación de la app y si no los encuentra tendrá error en la instalación.

Aunque J2ME se estableció para correo bajo una jvm especial para móviles los fabricantes le han puesto su complicación adicional, por ende es necesario tener una versión para cada móvil o al menos tipo de móvil así aseguraremos que nuestro usuario siempre lleve nuestra app con el.

Espero les sirva la info y nos vemos la siguiente

J2EE - JEE , , , 5 Comments

Zlib support PHP

Al tratar de utilizar cierta funcionalidad de compresión tuve problemas con el soporte para zlib, por lo cual googleando un poco cambie la la instruccion en my php.ini asi:

zlib.output_compression = Off

a

zlib.output_compression = On

El archivo normalmente para ambiente linux esta en /etc/php5/apache2/php.ini

Pues por mucho que revise no habia efecto.. y seguia imposibilitado de acceder a la fucionalidad.

Hay un detalle tienes que reiniciar tu apache2 server asi

/etc/init.d/apache2 restart

y listo funciona bien

Espero les sirva y les ahorre tiempo

Una funcion super importante para saber en donde esta tu archivo php.ini es hacer una pagina info.php por ejemplo y luego pegar:

<?php
phpinfo();
?>

Finalmente la ejecutas en directorio de htdocs correspondiente; y la info te dira de donde esta tu actual php.ini

General Leave a comment

jre 1.6 o jdk 1.6 + Tomcat 6 + error

Existe un bug con este jdk y la solucion es copiar una dll del bin al system32 del OS les dejo dos links utiles por si acaso:

http://robertotrujillo.wordpress.com/20 … en-jdk-16/

http://issues.apache.org/bugzilla/show_bug.cgi?id=41538

SDK Leave a comment