abd logcat output

Una vez que logras ejecutar tu aplicación en el emulador es indispensable tener una forma de depurar la aplicación. La forma más sencilla que he encontrado es mediante mensajes en la consola usando el comando

console.log(‘mensaje para el log’)

para poder ver estos mensajes mientras ejecutamos la aplicación en el emulador la única forma que he encontrado es ejecutar en una terminal el comando

adb logcat | grep ‘Web Console’

simplemente filtramos la salida del comando adblogcat en búsqueda de logs que contengan la palabra ‘Web Console’, que para los mensajes producidos por console.log es agregada automáticamente.

Sería mucho mejor hacerlo con un filtro de logcat, pero no he podido encontrar uno que funcione 😦

he intentado

adb logcat Cordova:D DroidGap:D CordovaLog:D *:S

adb logcat ActivityManager:I MyAppName:D *:S

pero sin éxito.

Fuentes:
http://blog.koalite.com/2012/09/depurar-phonegapcordova-en-android-con-adb/
http://developer.android.com/tools/debugging/debugging-log.html
http://blog.joelambert.co.uk/2011/09/20/monitoring-console-log-on-phonegap-android/

Anuncios

Al hacer un debug de un servicio web, me aparecía la siguiente excepción

Error initializing server: At least one valid code-source or import-shared-library element is required for shared-library “global.libraries” embedded-oc4j/config/server.xml

Al parecer, el problema se debe a que moví el directorio donde instalé JDeveloper, y este guarda la ubicación en el archivo de configuración ~/jdevhome/system/oracle.j2ee.10.1.3.41.57/embedded-oc4j/config/server.xml

Así que tuve que sustituir todas las rutas a la nueva ubicación.

Por ejemplo, cambié

<code-source path="/opt/jdeveloper10133/j2ee/home/applib"/>

por

<code-source path="/home/cirovladimir/Apps/jdeveloper/jdeveloper10133/j2ee/home/applib"/>

Fuentes:
https://forums.oracle.com/forums/thread.jspa?threadID=592789

En un proyecto estoy tratando de utilizar un control Calendar para agendar eventos. SmartGwt define propiedades básicas para los eventos: name, startDate, endDate y description -todos ellos se pueden mapear a otras propiedades con métodos como setStartDateField-

Si nuestro evento tiene otras propiedades, además de estas, podemos agregar los campos en los editores mediante los métodos setEventDialogFields y setEventEditorFields.

Al agregar un SelectItem al editor de diálogo, me aparecía el siguiente mensaje de error

[ERROR] [Desktop] – 08:37:54.799:MUP0:WARN:DynamicForm:isc_DynamicForm_2:[Class SelectItem] form item defined with no ‘name’ property – Value will not be saved. To explicitly exclude a form item from the set of values to be saved, set ‘shouldSaveValue’ to false for this item.

Supuestamente este error fue arreglado en las ultimas versiones (04/05/2012) pero en la versión 3.0 me seguía apareciendo.

Después de mucho batallar encontré que el problema sólo se me presentaba cuando hacía la depuración (debug) en Google Chrome. Utilicé Mozilla Firefox y ya no tuve problemas.

De ahora en adelante intentaré depurar mi código en Firefox.

Fuentes:
http://forums.smartclient.com/showthread.php?t=4934
http://www.smartclient.com/smartgwt/javadoc/com/smartgwt/client/widgets/calendar/Calendar.html#setEventDialogFields(com.smartgwt.client.widgets.form.fields.FormItem…)
https://code.google.com/p/smartgwt/source/search?q=%22form+item+defined+with+no%22&origq=%22form+item+defined+with+no%22&btnG=Search+Trunk 
http://www.smartclient.com/smartgwt/javadoc/com/smartgwt/client/widgets/form/fields/FormItem.html 

Para desarrollar aplicaciones GWT utilizo Eclipse y el plugin de Google. Mi navegador por default es Google Chrome así que lo más natural para mí fue utilizarlo para depurar el código. Pues realmente Chrome es una mala elección para esto, me di cuenta cuando un SelecItem no me mostraba las opciones y la aplicación en general era demasiado lenta. Así que si padeces alguno de estos síntomas, mejor prueba con otro navegador –Firefox 😉 –

Fuentes:
http://forums.smartclient.com/showthread.php?t=8159#aChrome
https://groups.google.com/forum/?fromgroups#!topic/google-web-toolkit/qfVFxoieOXg 

Cuando ejecutas una aplicación GWT en Eclipse -ya sea Debug as Web Application ó Run as Web Application- utiliza Jetty como servidor web.

En una aplicación necesitaba poner una serie de archivos disponibles en dicho servidor. Como los archivos ya los tenía en una carpeta, no quise copiarlos a una carpeta en el servidor web (src/main/webapp), así que creé un enlace simbólico a la carpeta. Al querer acceder a los recursos me aparecía el siguiente mensaje en el log

[WARN] Aliased resource: file:/home/cirovladimir/projects/java/videohaus/videohaus-gwt/target/videohaus-gwt-0.0.1-SNAPSHOT/storage/videos/demo.mp4==file:/home/cirovladimir/Videos/videohaus/demo.mp4
[WARN] 404 – GET /storage/videos/demo.mp4 (127.0.0.1) 1446 bytes

El problema es que, por cuestiones de seguridad, Jetty no permite acceder a los recursos mediante un alias (mayúsculas y minúsculas, nombres cortos, enlaces simbólicos y carácteres extras).

Para desactivar esta carácteristica y permitir los enlaces simbólicos, podemos agregar un parámetro a la configuración de ejecución. Selecciona el proyecto y da clic en el menú “Run->Debug Configurations..”, luego agrega el parámetro “-Dorg.mortbay.util.FileResource.checkAliases=false” en la pestaña de argumentos en la sección de argumentos de la máquina virtual.

UPDATE: Existe una opción con el comando “mount” para montar una carpeta local en otra, y con esto ya no es necesario configurar Jetty para seguir los enlaces simbólicos. El comando es

 sudo mount --bind origen nueva_carpeta
 

si quieres que el montaje permanezca después de reiniciar tu computadora, agrega la siguiente línea en el archivo /etc/fstab

 origen &nbsp; nueva_carpeta &nbsp; none   bind   0   0
 

curiosamente esta solución la encontré cuando investigaba como montar una carpeta mediante NFS.

Fuentes:
https://groups.google.com/d/msg/google-web-toolkit/kMZv6jkYitw/yYfM54duu3wJ
http://docs.codehaus.org/display/JETTY/How+to+enable+serving+aliased+files
https://help.ubuntu.com/community/SettingUpNFSHowTo

GWT – Depuración remota

diciembre 6, 2011

Si usas Linux, para ver como funciona tu aplicación en Internet Explorer, tendrás que hacerlo desde una computadora con Windows (sea virtual o no).
Yo intenté hacerlo desde una máquina virtual (virtualbox) pero no me mostraba la página.

Para poder depurar tu aplicación GWT desde una computadora remota debes agregar el siguiente parámetro a la configuración de depuración
-bindAddress 172.180.0.146
obviamente poniendo la ip de tu máquina 😛

Con ello ya podrás depurar de forma remota.

Fuentes:
http://stackoverflow.com/questions/3944164/debug-gwt-application-in-a-remote-browser

Primero vamos a crear un servicio web (SOAP) utilizando Apache CXF. Necesitas tener instalado m2eclipse -ya viene con Eclipse Indigo– y m2e-wtp

Creamos un nuevo proyecto de Maven


Seleccionamos el arquetipo

Establecemos las coordenadas de Maven

Nos queda un proyecto de la siguiente manera

Para probarlo, abrimos el archivo pom.xml y agregamos el plugin “jetty-maven-plugin

<plugin>
    <groupId>org.mortbay.jetty</groupId>
         <artifactId>jetty-maven-plugin</artifactId>
    <version>8.0.1.v20110908</version>
</plugin>

Ahora podemos ejecutarlo dando clic en el proyecto y luego en “Run As…->Maven build…”, pon “jetty:run” en Goals

Al final, verás en la consola un texto como el siguiente

INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1f60f2b: defining beans []; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@16d8a64
Oct 10, 2011 3:59:37 PM org.apache.cxf.transport.servlet.AbstractCXFServlet replaceDestinationFactory
INFO: Servlet transport factory already registered
2011-10-10 15:59:37.112:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080 STARTING
[INFO] Started Jetty Server

Abre tu navegador y ve a http://localhost:8080

Si das clic en el enlace que te muestra podrás ver el WSDL del servicio web. Puedes probar el servicio con una herramienta como SoapUI o el WSDL Explorer de Eclipse.

Bueno, pues ahora lo importante de este artículo, ¿cómo podemos depurar el código de los servicios web? Y con depurar me refiero a establecer breakpoints, examinar variables, ejecutar línea por línea, etc.
Tienes que abrir una consola -no pude hacerlo directamente en Eclipse- e ir al directorio de tu proyecto, una vez ahí, ejecuta el comando

mvnDebug jetty:run

deja abierta la consola y regresa a Eclipse. Da clic derecho en tu proyecto y luego en “Debug As…->Debug Configurations…”. Da clic derecho en “Remote Java Application” y selecciona “New”

deja los valores por default y da clic en Debug. Establece un breakpoint en el código generado e invoca el servicio, verás como la ejecución se detiene y podrás examinar las variables 😀