Pregunta

Me doy cuenta de que dado que los sockets UNIX son específicos de la plataforma, debe haber algún código que no sea Java. Específicamente, estamos interesados ??en usar JDBC para conectarse a una instancia de MySQL que solo tiene habilitados los sockets de dominio UNIX.

No parece que esto sea compatible, pero por lo que he leído, al menos debería ser posible escribir un SocketFactory para JDBC basado en sockets UNIX if podemos encontrar una implementación decente de sockets UNIX para Java.

¿Alguien ha intentado esto? ¿Alguien sabe de tal implementación?

¿Fue útil?

Solución

Verifique la biblioteca JUDS. Es una biblioteca Java Soix Domain Socket ...

https://github.com/mcfunley/juds

Otros consejos

Puede usar junixsocket: https://github.com/kohlschutter/junixsocket

Ya proporciona código para conectarse a MySQL desde Java (Connector / J) a través de sockets Unix.

Una gran ventaja en comparación con otras implementaciones es que junixsocket utiliza la API de Java Socket estándar.

Como el kohlschutter / junixsocket original, mencionado en otra respuesta parece estar muerto, puede verificar sus horquillas.

Especialmente fiken / junixsocket parece prometedor. Su autor ha agregado soporte para la conexión a PostgreSQL utilizando un socket de Unix a través de pgjdbc , por ejemplo.

Echa un vistazo a la biblioteca JNA. Es una casa a medio camino entre Java puro y código nativo JNI

https://github.com/twall/jna/

El controlador MariaDB JDBC ahora admite esto y es compatible con el controlador JDBC de MySQL.

Use una URL JDBC como:

jdbc:mariadb://localhost:3306/revmgt?localSocket=/var/run/mysqld/mysqld.sock

Vale la pena señalar que esta biblioteca requiere incluir la biblioteca JNA, ya que utiliza JNA para acceder a los sockets de dominios Unix nativos. Funciona bastante bien en mis pruebas. Vi mejoras de velocidad en los procesos de Java vinculados a la CPU desde la descarga al código nativo.

El proyecto JNR (que es una base vaga para project panama ) tiene un socket unix implementación.

Algunas búsquedas en Internet han descubierto la siguiente biblioteca de aspecto útil:

http://www.nfrese.net/software/gnu_net_local/overview.html

Enlace de Wayback

Escribir una fábrica de conectores debería ser lo suficientemente fácil. Una vez que lo haya hecho, puede pasarlo a su controlador THUSLY . ( Wayback Link ).

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import com.mysql.management.driverlaunched.ServerLauncherSocketFactory;

public class ConnectorMXJTestExample {
    public static void main(String[] args) throws Exception {
        String hostColonPort = "localhost:3336";

        String driver = com.mysql.jdbc.Driver.class.getName();
        String url = "jdbc:mysql://" + hostColonPort + "/" + "?"
                + "socketFactory="
                + ServerLauncherSocketFactory.class.getName();
        String userName = "root";
        String password = "";

        Class.forName(driver);
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(url, userName, password);
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT VERSION()");
            rs.next();
            String version = rs.getString(1);
            rs.close();
            stmt.close();

            System.out.println("------------------------");
            System.out.println(version);
            System.out.println("------------------------");
        } finally {
            try {
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            ServerLauncherSocketFactory.shutdown(hostColonPort);
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top