Question

Je me rends compte que, comme les sockets UNIX sont spécifiques à une plate-forme, un code non Java doit être impliqué. Plus précisément, nous aimerions utiliser JDBC pour nous connecter à une instance MySQL sur laquelle seuls les sockets de domaine UNIX sont activés.

Cela ne semble pas être pris en charge, mais d'après ce que j'ai lu, il devrait être au moins possible d'écrire une SocketFactory pour JDBC basée sur des sockets UNIX si nous pouvons trouver une implémentation décente. des sockets UNIX pour Java.

Quelqu'un a-t-il essayé cela? Est-ce que quelqu'un est au courant d'une telle implémentation?

Était-ce utile?

La solution

Commander la bibliothèque JUDS. C'est une bibliothèque Java Unix Domain Socket ...

https://github.com/mcfunley/juds

Autres conseils

Vous pouvez utiliser junixsocket: https://github.com/kohlschutter/junixsocket

Il fournit déjà du code pour se connecter à MySQL à partir de Java (Connector / J) via des sockets Unix.

L'un des gros avantages par rapport aux autres applications est que Junixsocket utilise l'API standard Java Socket.

Comme l'original kohlschutter / junixsocket , mentionné dans une autre réponse semble mort, vous pouvez vérifier ses fourches.

En particulier, fiken / junixsocket semble prometteur. Son auteur a ajouté la prise en charge de la connexion à PostgreSQL à l’aide de la socket Unix via pgjdbc , par exemple.

Découvrez la bibliothèque de la JNA. C'est une maison de transition entre le code pur Java et le code natif JNI

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

Le pilote JDBC MariaDB prend désormais en charge cette fonctionnalité et le reste. compatible avec le pilote MySQL JDBC.

Utilisez une URL JDBC telle que:

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

Il est à noter que cette bibliothèque nécessite l’inclusion de la bibliothèque JNA car elle utilise JNA pour accéder aux sockets de domaine Unix natifs. Cela fonctionne plutôt bien dans mes tests. J'ai constaté une amélioration de la vitesse des processus java liés au processeur, du déchargement au code natif.

Le projet JNR (qui constitue une base souple pour projet panama ) possède un socket unix. mise en œuvre.

Certaines recherches sur Internet ont permis de découvrir la bibliothèque utile suivante:

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

Lien de retour

L'écriture d'une fabrique de sockets devrait être assez simple. Une fois que vous avez terminé, vous pouvez le transmettre à votre pilote THUSLY . ( Lien Wayback ).

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);
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top