Implementación de socket UNIX para Java

Me doy cuenta de que, dado que los zócalos UNIX son específicos de la plataforma, tiene que haber algún código que no sea de Java involucrado. Específicamente, nos interesa utilizar JDBC para conectarnos a una instancia de MySQL que solo tenga habilitados los sockets de dominio de UNIX.

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

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

Consulte la biblioteca de JUDS. Es una biblioteca de socket de dominio Java Unix …

https://github.com/mcfunley/juds

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 Java Socket estándar.

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

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

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

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

El controlador MariaDB JDBC ahora es compatible con 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 dominio nativos de Unix. Funciona bastante bien en mis pruebas. Vi mejoras de velocidad en los procesos java vinculados a la CPU desde la descarga hasta el código nativo.

El proyecto JNR (que es una base flexible para el proyecto Panamá ) tiene una implementación de socket unix .

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

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

Wayback Link

Escribir una fábrica de sockets debería ser lo suficientemente fácil. Una vez que lo hayas hecho, puedes pasarlo a tu conductor TUSLY ( 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); } } }