Получение сообщения CommunicationsException в драйвере MySQL, когда вы не вошли в систему как администратор - PullRequest
1 голос
/ 04 ноября 2010

мы программируем программное обеспечение для экономического расчета. Мы используем Java 6, среду приложений Swing, MySQL 5.1, JDBC и Hibernate (JDBC только для начального тестирования соединения). Мы развернули это приложение на компьютере с Windows XP. Пока пользователь с правами администратора запускает приложение, оно работает просто отлично. Если пользователь с ограниченными правами пытается запустить его, мы получаем исключение.

Мы попытались отключить брандмауэр Windows и столкнулись с той же проблемой (администратор тоже активировал брандмауэр!). Затем мы попытались восстановить ситуацию на одном из наших компьютеров и не смогли этого сделать, приложение работает просто отлично.

Наше исследование в интернете не было успешным, потому что в этом случае это очень редкая ситуация. Ниже приведен код, где генерируется исключение, и трассировка стека.

/**
  * Testet ob eine Verbindung zu der Datenbank mit den Werten aus der Properties-Datei
  * möglich ist.
  * @return true, falls die Verbindung zustande kommt
  */
public boolean testConnection(Properties props) {
    Connection conn = null;
    try {
        Class.forName(props.getProperty(SystemParameterModel.HIBERNATE_CONNECTION_DRIVER_CLASS_KEY)).newInstance();
        System.out.println("Driver: " + props.getProperty(HIBERNATE_CONNECTION_DRIVER_CLASS_KEY));
        System.out.println("URL:    " + props.getProperty(HIBERNATE_CONNECTION_URL));
        System.out.println("User:   " + props.getProperty(HIBERNATE_CONNECTION_USER_KEY));
        System.out.println("Pass:   " + props.getProperty(HIBERNATE_CONNECTION_PASSWORD_KEY));
        conn = DriverManager.getConnection(
                props.getProperty(HIBERNATE_CONNECTION_URL),
                props.getProperty(HIBERNATE_CONNECTION_USER_KEY),
                props.getProperty(HIBERNATE_CONNECTION_PASSWORD_KEY));
    } catch (SQLException ex) {
        System.out.println(ex.getLocalizedMessage());
        ex.printStackTrace();
        return false;
    } catch (Exception ex) {
        System.out.println(ex.getLocalizedMessage());
        ex.printStackTrace();
        return false;
    }
    try {
        conn.close();
    } catch (SQLException ex) {
        System.out.println("whateves..." + ex.getMessage());
    }
    return true;
}

И Stacktrace:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
 at java.lang.reflect.Constructor.newInstance(Unknown Source)
 at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
 at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1118)
 at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:343)
 at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2308)
 at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122)
 at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:774)
 at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
 at java.lang.reflect.Constructor.newInstance(Unknown Source)
 at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
 at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375)
 at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)
 at java.sql.DriverManager.getConnection(Unknown Source)
 at java.sql.DriverManager.getConnection(Unknown Source)
 at com.sgp.mybe.calc.model.SystemParameterModel.testConnection(SystemParameterModel.java:153)
 at com.sgp.mybe.calc.dao.InitEntityManagerFactory.loadEMF(InitEntityManagerFactory.java:61)
 at com.sgp.mybe.calc.dao.InitEntityManagerFactory.<clinit>(InitEntityManagerFactory.java:31)
 at com.sgp.mybe.calc.dao.DaoFactory.getAttributeDao(DaoFactory.java:18)
 at com.sgp.mybe.calc.model.ValidationAttributeModel.<init>(ValidationAttributeModel.java:24)
 at com.sgp.mybe.calc.model.CalcDetailModel.<init>(CalcDetailModel.java:36)
 at com.sgp.mybe.calc.main.MybeCalcApplication.startup(MybeCalcApplication.java:46)
 at org.jdesktop.application.Application$1.run(Application.java:171)
 at java.awt.event.InvocationEvent.dispatch(Unknown Source)
 at java.awt.EventQueue.dispatchEvent(Unknown Source)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
 at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
 at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
 at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
 at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.net.SocketException: Malformed reply from SOCKS server
 at java.net.SocksSocketImpl.readSocksReply(Unknown Source)
 at java.net.SocksSocketImpl.connect(Unknown Source)
 at java.net.Socket.connect(Unknown Source)
 at java.net.Socket.connect(Unknown Source)
 at java.net.Socket.<init>(Unknown Source)
 at java.net.Socket.<init>(Unknown Source)
 at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
 at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:292)
 ... 29 more

Свойства правильные, сомнений нет.

Я надеюсь, что кто-то может мне помочь, потому что эта проблема сводит меня с ума. Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 ноября 2010

Проблема решена.Заказчик неправильно проинформировал нас о настройках прокси в локальной сети, что послужило исключением

0 голосов
/ 04 ноября 2010
...