Implementación de socket UNIX para Java
jdbc unix-domain-sockets (7)
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?
Algunas búsquedas en Internet han descubierto la siguiente biblioteca de aspecto útil:
http://www.nfrese.net/software/gnu_net_local/overview.html
Escribir una fábrica de sockets debería ser lo suficientemente fácil. Una vez que lo hayas hecho, puedes pasarlo a tu conductor 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);
}
}
}
Como el https://github.com/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.
Consulte la biblioteca de JUDS. Es una biblioteca de socket de dominio Java Unix ...
Echa un vistazo a la biblioteca de JNA. Es una casa intermedia entre Java puro y código nativo JNI
El proyecto JNR (que es una base flexible para el proyecto Panamá ) tiene una implementación de socket unix .
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.
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.