Debug ADF + Glassfish 4 (remoto)

Para poder ejecutar una aplicación ADF en modo debug con Glassfish ejecutaremos el servidor con la opción debug = true:

asadmin start-domain –debug=true

Si entramos en la consola de Glassfish y en la pestaña “General information” podremos ver que el puerto por defecto del modo Debug es el 9009:

Debug: Enabled on Port: 9009

Captura74

A continuación, en nuestra aplicación, en el proyecto ViewController tendremos que editar las siguientes opciones en «Project Properties>Run/Debug«:

Captura1

Marcaremos la opción «Remote Debugging» y cambiaremos el puerto para el debug remoto a 9009:

Captura2

Captura3

Por último arrancamos nuestra aplicación en modo Debug y nos aparecerá el siguiente popup: (por defecto aparecerá el puerto que hemos indicado en el paso anterior)

Captura4

Si la conexión con el servidor remoto se ha realizado correctamente se mostrará el siguiente mensaje por consola:

Captura5

 

 

Resolviendo Bug ADF 12c + Trinidad + Glassfish 4.1 (trindiad-impl.jar)

Existe un bug en la última versión de ADF Studio Edition Version 12.2.1.0.0 y Glassfish 4.1 que no permite subir archivos utilizando el componente af:inputFile. El error se produce en la clase MultipartFormHandler.class de trinidad-impl.jar (ver. 2.0.0).

Si estamos utilizando af:inputFile con un af:form y la propiedad usesUpload a true.

<af:form id=»f1″ usesUpload=»true»>

<af:inputFile label=»Archivo» id=»dc_if1″ />

</af:form>

Cuando intentamos subir un archivo a nuestra aplicación, Glassfish devuelve el siguiente error:

java.io.EOFException at org.apache.myfaces.trinidadinternal.share.util.MultipartFormHandler.

_skipBoundary(MultipartFormHandler.java:229) at org.apache.myfaces.trinidadinternal.share.util.MultipartFormHandler.

<init>(MultipartFormHandler.java:102) at org.apache.myfaces.trinidadinternal.share.util.MultipartFormHandler.<init>(MultipartFormHandler.java:75) at org.apache.myfaces.trinidadinternal.config.upload.FileUploadConfiguratorImpl.

beginRequest(FileUploadConfiguratorImpl.java:139) at org.apache.myfaces.trinidadinternal.config.GlobalConfiguratorImpl.

_startConfiguratorServiceRequest(GlobalConfiguratorImpl.java:746) at org.apache.myfaces.trinidadinternal.config.GlobalConfiguratorImpl.

beginRequest(GlobalConfiguratorImpl.java:227) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:184) at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)

El método _parseBoundary(String ), no está devolviendo la cadena correcta. En algunos casos al parámetro boundary que devuelve se le está sumando la cadena “charset=UTF-8”.

MultipartFormHandler.java

Método original:

Captura1
Para resolverlo, descargaremos la versión de trinidad-impl.jar que está usando ADF (trinidad-impl-2.0.0-sources.jar.zip). Y añadiremos el siguiente parche:

Captura2

Donde nos quedamos con el valor de boundary descartando cualquier string que se añada después (“charset=UTF-8” en nuestro caso).

Compilamos trinidad-impl y sustituimos el jar en el despliegue de nuestra aplicación.

trinidad-impl.java

trinidad-impl-2.0.0-sources.jar.zip

 

Hilos abiertos sobre el bug:

https://community.oracle.com/message/13845423#13845423

https://community.oracle.com/message/13845425#13845425

https://community.oracle.com/message/13845473#13845473

https://community.oracle.com/message/13845424#13845424

https://community.oracle.com/message/13845421#13845421