Pergunta

Eu percebo que desde soquetes UNIX são específicos da plataforma, tem que haver algum código não-Java envolvidos. Especificamente, estamos interessados ??em usar JDBC para se conectar a uma instância MySQL que só tem soquetes de domínio UNIX habilitado.

Ele não se parece com isso é suportado, mas pelo que tenho lido, deve ser pelo menos possível escrever um SocketFactory para JDBC com base em soquetes UNIX se , podemos encontrar uma implementação decente de sockets UNIX para Java.

Alguém já tentou isso? Alguém sabe de tal implementação?

Foi útil?

Solução

Checkout a biblioteca Juds. É uma biblioteca Java Domínio Unix soquete ...

https://github.com/mcfunley/juds

Outras dicas

Você pode usar junixsocket: https://github.com/kohlschutter/junixsocket

Ele já fornece o código para conectar ao MySQL de Java (Connector / J) através de sockets Unix.

Uma das grandes vantagens em comparação com outras implementações é que junixsocket usa o padrão API Java Socket.

Como o original kohlschutter / junixsocket , mencionado em outra resposta parece estar morto, você pode verificar as suas garfos.

Especialmente fiken / junixsocket parece promissor. Seu autor adicionou suporte para conexão com PostgreSQL usando unix tomada via pgjdbc , por exemplo.

Confira a biblioteca ANJ. É uma casa a meio caminho entre puro Java e código nativo JNI

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

O MariaDB driver JDBC agora suporta isso e é compatível com o driver MySQL JDBC.

Use a url JDBC como:

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

Vale notar que esta biblioteca exigem incluindo a biblioteca JNA, pois utiliza JNA para acesso soquetes nativos de domínio UNIX. Ele funciona muito bem no meu teste. melhorias de velocidade viu que eu sobre obrigado CPU processos Java a partir do offload para código nativo.

O JNR projeto (que é uma base solta para projeto panamá ) tem uma href="https://github.com/jnr/jnr-unixsocket" rel="nofollow"> tomada .

alguma pesquisa na internet descobriu o seguinte biblioteca útil de aparência:

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

Wayback Fazer a ligação

Escrevendo uma fábrica de soquete deve ser fácil o suficiente. Uma vez feito isso, você pode passá-lo para o driver thusly . ( Wayback Fazer a ligação ).

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top