Реализация UNIX сокетов для Java? - PullRequest
47 голосов
/ 04 октября 2008

Я понимаю, что, поскольку сокеты UNIX зависят от платформы, должен присутствовать некоторый не-Java-код. В частности, мы заинтересованы в использовании JDBC для подключения к экземпляру MySQL, у которого включены только доменные сокеты UNIX.

Не похоже, что это поддерживается, но из того, что я прочитал, по крайней мере можно написать SocketFactory для JDBC на основе сокетов UNIX , если , мы можем найти достойную реализацию UNIX-сокеты для Java.

Кто-нибудь пробовал это? Кто-нибудь знает о такой реализации?

Ответы [ 7 ]

29 голосов
/ 04 октября 2008

Оформить заказ на библиотеку JUDS. Это библиотека сокетов домена Java Unix ...

https://github.com/mcfunley/juds

24 голосов
/ 09 сентября 2009

Вы можете использовать junixsocket: https://github.com/kohlschutter/junixsocket

Он уже предоставляет код для подключения к MySQL из Java (Connector / J) через сокеты Unix.

Одним большим преимуществом по сравнению с другими реализациями является то, что junixsocket использует стандартный Java Socket API.

4 голосов
/ 18 марта 2017

Поскольку исходный kohlschutter / junixsocket , упомянутый в другом ответе, кажется мертвым, вы можете проверить его вилки.

Особенно fiken / junixsocket выглядит многообещающе. Его автор добавил поддержку подключения к PostgreSQL через сокет unix, например, через pgjdbc .

3 голосов
/ 21 октября 2016

Драйвер MariaDB JDBC теперь поддерживает это и совместим с драйвером MySQL JDBC.

Используйте URL JDBC как:

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

Стоит отметить, что эта библиотека требует включения библиотеки JNA, так как она использует JNA для доступа к собственным сокетам домена Unix. Это работает довольно хорошо в моем тестировании. Я видел улучшения в скорости связанных с процессором Java-процессов от разгрузки до нативного кода.

3 голосов
/ 04 октября 2008

Проверьте библиотеку JNA. Это на полпути между чистым Java и JNI-кодом

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

0 голосов
/ 03 января 2015

Проект JNR (который является свободной основой для проекта Панама ) имеет реализацию unix socket .

0 голосов
/ 13 мая 2009

Некоторые поиски в Интернете обнаружили следующую полезную библиотеку:

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

Wayback Link

Написание фабрики сокетов должно быть достаточно простым. После этого вы можете передать его своему драйверу 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);
        }
    }
}
...