2010-12-11 4 views
0

Вот часть из моей программы:MysqlDataSource вызывающее "Соединение отклонено" Exception

try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     InitializeData data = new InitializeData(); 

     Connection con = null; 
     try { 
      Context ctx = data.getContext(); 
      MysqlDataSource ds = (MysqlDataSource)ctx.lookup("database"); 
      con = ds.getConnection(); 
     ... 

где

public InitializeData() { 

    // configuring data source (data base) 
    ds = new MysqlDataSource(); 
    ds.setUser("root"); 
    ds.setPassword("%"); 
    ds.setServerName("localhost"); 
    ds.setPort(3306); 

    // configuring jndi 
    try { 
     Properties env = new Properties(); 

     try { 
      env.load(new FileInputStream(env_props)); 
     } catch (FileNotFoundException e) { 
      System.err.println("Unable to load jndi properties"); 
      System.exit(1); 
     } catch (IOException e) { 
      System.err.println("IOException"); 
      System.exit(1); 
     } 

     ctx = new InitialContext(env); 
     ctx.rebind("database", ds); 

    } catch (NamingException e) { 
     System.err.println("Naming Exception"); 
     System.exit(1); 
    } 


} 

public Context getContext() { 
    return ctx; 
} 

Как вы можете видеть, я пытаюсь подключиться к MySQL. На самом деле MySQL встроен в мою программу java. Когда я подключаюсь через DriverManager (используя con = DriverManager.getConnection("jdbc:mysql:mxj://localhost", "root", "");), все работает. Но, используя объект DataSource, как это показано выше вызывает исключение:

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.ConnectException 
MESSAGE: Connection refused: connect 

STACKTRACE: 

java.net.ConnectException: Connection refused: connect 
at java.net.PlainSocketImpl.socketConnect(Native Method) 
at java.net.PlainSocketImpl.doConnect(Unknown Source) 
at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 
at java.net.PlainSocketImpl.connect(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:271) 
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771) 
at com.mysql.jdbc.Connection.<init>(Connection.java:1555) 
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) 
at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:425) 
at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:140) 
at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:110) 
at statistics.DatabaseWorks.main(DatabaseWorks.java:26) 

Может кто-нибудь, пожалуйста, помочь мне?


Некоторые тесты рассматривается, что моя программа пытается подключиться к серверу MySQL, который не вложенной (см ответ BalusC в). Если я запустил сервер (не встроенный), все будет работать. Поэтому мне нужно, чтобы моя программа начала локальную. По какой-то причине ds.setUrl("jdbc:mysql:mxj://"); не работает

ответ

1

Вы пытаетесь подключиться к реальному серверу MySQL вместо встроенного сервера MySQL.

Я никогда не пробовал, но следующее должно быть в теории работы:

ds.setUrl("jdbc:mysql:mxj://localhost"); 
ds.setUser("root"); 
ds.setPassword(""); 

Так с точно такими же параметрами, как и в вашем DriverManager#getConnection().

Кстати, InitializeData вещь довольно сложная. Я бы предложил упростить это. Поскольку вы создаете источник данных вручную, вам не нужно размещать его в области JNDI вообще. Просто создайте ds и используйте ds.getConnection() напрямую. JNDI полезен, если вы делегировали создание источника данных в какой-то контейнер JNDI, например, на сервер приложений Java EE.


Update в соответствии с комментариями: это просто смотреть, как этот MysqlDataSource не предназначена для встроенных MySQL вообще. Если все, что вам нужно, это пул данных, связанный с соединением, попробуйте c3p0. Он должен работать повсеместно, поскольку все, что ему нужно, это полный URL, имя пользователя и пароль JDBC, точно так же, как вы переходите на DriverManager.

+0

Я пробовал это, но эти изменения снова предоставили исключение соединения. – Dmitry

+0

также просто ds.setUrl ("jdbc: mysql: mxj: //"); не работает – Dmitry

+0

Ну, я думаю (согласен с вами =)), что я пытаюсь подключиться к серверу MySQL, который не встроен. Как я могу заставить свою программу использовать встроенную? – Dmitry

Смежные вопросы