Error al conectar mediante Proxy con MySQL

Bueno, luego de diseñar un sistema para una empresa que utilizaba SQUID (servidor proxy, firewall y demás) me encontré con una sorpresa, el sistema no era capaz de traer los datos de MySQL. Revise desde los ByPASS, hasta los puertos abiertos y no encontré nada fuera de lo común, fue entonces cuando decidí abrir el fuente y comenzar a modificar.

   Ejecutando el sistema desde el IDE me encuentro con una excepción particular:
com.mysql.jdbc.CommunicationsException: Communications link failure

   Cambie el driver al 5.0 en caso de que diera fallas o tuviese algún bug, y este fue el error:
Can't connect to SOCKS proxy:Conexión rehusada

   Y ahora viene lo interesante del tema....

   El sistema fue hecho desde Netbeans con elementos Swing, y resulta que Java tiene un detalle muy importante al cargar "Swing Application Framework" (utilizado al crear un proyecto "Java Desktop Application"), específicamente en el método "org.jdesktop.application.Application.create()", el cual setea la propiedad "useSystemProxies" en verdadero, esta propiedad es usada por "ProxySelector" (otra propiedad del sistema) para determinar nuestra conexión al proxy.

   El detalle es que ya tenemos definido un proxy en la configuración, entonces ¿cuál es la solución?. Simple, debemos volver a setear el valor "useSystemProxy" a "false" una vez mas luego de la carga, para esto colocamos en nuestro método de inicio (startup) esto:
System.setProperty("java.net.useSystemProxies", "false");

   O lo mas sencillo, hacer que en el método principal (método main) nuestro sistema obtenga la configuración proxy por defecto del S.O. y no tener que estar modificando su valor. Entonces justo al inicio del método principal colocamos:
ProxySelector.getDefault();

   Y listo, ya nuestra aplicación puede conectarse a la base de datos sin ningún inconveniente. Para mas información acerca de este fallo podemos Buscar en el lístado de fallos de Netbeans, específicamente el Bug 134745 - JDBC connection does not interpret proxy exceptions correctly.

Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión EmoticonEmoticon