Реализация UNIX сокетов для Java?
-
05-07-2019 - |
Вопрос
Я понимаю, что, поскольку сокеты UNIX зависят от платформы, должен присутствовать некоторый не-Java-код. В частности, мы заинтересованы в использовании JDBC для подключения к экземпляру MySQL, у которого включены только доменные сокеты UNIX. Р>
Не похоже, что это поддерживается, но из того, что я прочитал, должно быть как минимум возможно написать SocketFactory для JDBC на основе сокетов UNIX if , мы можем найти достойную реализацию UNIX-сокетов для Java. Р>
Кто-нибудь пробовал это? Кто-нибудь знает о такой реализации?
Решение
Оформить заказ на библиотеку JUDS. Это библиотека сокетов домена Java Unix ...
Другие советы
Вы можете использовать junixsocket: https://github.com/kohlschutter/junixsocket
Он уже предоставляет код для подключения к MySQL из Java (Connector / J) через сокеты Unix.
Одним большим преимуществом по сравнению с другими реализациями является то, что junixsocket использует стандартный API-интерфейс Java Socket.
Поскольку оригинальный kohlschutter / junixsocket , упомянутый в другом ответе, кажется мертвым, вы можете проверить его вилки.
Особенно fiken / junixsocket выглядит многообещающе. Его автор добавил поддержку подключения к PostgreSQL с помощью сокета unix, например, через pgjdbc .
Проверьте библиотеку JNA. Это на полпути между чистым Java и JNI-кодом
драйвер JDBC MariaDB теперь поддерживает это и является совместим с драйвером MySQL JDBC.
Используйте URL-адрес JDBC, например:
<код> JDBC: MariaDB: // локальный: 3306 / revmgt localSocket = / вар / запустить / туздЫ / mysqld.sock код>
Стоит отметить, что эта библиотека требует включения библиотеки JNA, так как она использует JNA для доступа к собственным сокетам домена unix. Это работает довольно хорошо в моем тестировании. Я видел улучшения в скорости связанных с процессором Java-процессов от разгрузки до нативного кода. Р>
проект JNR (это свободная основа для проект panama ) имеет сокет unix реализация.
Некоторые поиски в Интернете обнаружили следующую полезную библиотеку:
http://www.nfrese.net/software/gnu_net_local/overview.html р>
Написание фабрики сокетов должно быть достаточно простым. После этого вы можете передать его своему драйверу ТОЛЬКО . ( 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);
}
}
}