1

Таким образом у меня есть код в context.xml, который содержит информацию для подключения моей базы данныхNullPointerException из источника данных в инициировании пула соединений

<?xml version="1.0" encoding="UTF-8"?> 

<Resources name="jdbc/murach" auth="Containter" 
    driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/murach" 
    username="root" password="root" 
    maxActive="100" maxIdle="30" maxWait="10000" 
    logAbandoned="true" removeAbandoned="true" 
    removeAbandonedTimeout="60" type="javax.sql.DataSource" /> 

<ResourceLink name="jdbc/murach" 
     global="jdbc/mydb" 
      type="javax.sql.DataSource" /> 

Пока для Пул соединений Я создал класс для инициации и подключения в базу данных. ошибка начинается с метода getConnection(). Могу ли я спросить, что мне действительно нужно найти, чтобы он работал. Кстати ошибка NullPointerException в возврате datasource.getConnection()

package lars.data; 

import java.sql.Connection; 
import java.sql.SQLException; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import javax.sql.DataSource; 


public class ConnectionPool { 
    private static ConnectionPool pool = null; 
    private static DataSource dataSource = null; 

    private ConnectionPool() { 
     try { 
      InitialContext ic = new InitialContext(); 
      dataSource = (DataSource) ic.lookup("java:/comp/env/jdbc/murach"); 
      System.out.print(dataSource); 
     } catch (NamingException e) { 
      System.out.println(e); 
     } 
    } 

    public static synchronized ConnectionPool getInstance() { 
     if (pool == null) { 
      pool = new ConnectionPool(); 
     } 
     return pool; 
    } 

    public Connection getConnection() { 
     try { 
      return dataSource.getConnection(); 
     } catch (SQLException e) { 
      System.out.println(e); 
      return null; 
     } 
    } 

    public void freeConnection(Connection c) { 
     try { 
      c.close(); 
     } catch (SQLException e) { 
      System.out.println(e); 
     } 
    } 
} 
+0

Пробовали ли вы это сказать? InitialContext ic = new InitialContext(); dataSource = (DataSource) ic.lookup ("jdbc/murach"); или попробуйте ctx.bind(). Все зависит от того, где вы создали логическое имя – esha

ответ

1

Я считаю, что ваша проблема в конфигурации вашего ResourceLink особенно значение атрибута global, который должен совпадать со значением, определенным в вашем Resource, он должен быть:

<ResourceLink name="jdbc/murach" 
     global="jdbc/murach" 
      type="javax.sql.DataSource" /> 

глобальный: название связанного глобального ресурса в глобальной JNDI контексте.

имя: Имя ссылки ресурса должны быть созданы, по отношению к java:comp/env контекста.

Н.Б. 1: Имя узла, который определяет ресурс Resource не Resources. Другими словами, это должно быть:

<Resource name="jdbc/murach" ... /> 

NB 2: Вы должны попробовать ic.lookup("java:comp/env/jdbc/murach")

+0

Код, который вы предложили, работал! Я просто меняю ресурсную ссылку и ресурсы на ресурс, и это сработало. Большое спасибо @ Николас-филотто! –

+0

@MarcoM. хорошие новости –