2013-09-30 2 views
0

Я очень старался выяснить, как подключить это подключение к базе данных, но не удалось, и, следовательно, это сообщение здесь.Как мне вызвать Config.java в моем сервлете?

В основном, я использую этот код, который нашел мой этот сайт - тот, который преподается BalusC.

public class Config implements ServletContextListener { 
    private static final String ATTRIBUTE_NAME = "config"; 
    private DataSource dataSource; 

    @Override 
    public void contextInitialized(ServletContextEvent event) { 
     ServletContext servletContext = event.getServletContext(); 
     String databaseName = servletContext.getInitParameter("pract1"); 
     try { 
      dataSource = (DataSource) new InitialContext().lookup("java:/comp/env/jdbc/TestDB"); 
     } catch (NamingException e) { 
      throw new RuntimeException("Config failed: datasource not found", e); 
     } 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent event) { 
     System.out.println("contextDestroyed...."); 
    } 

    public DataSource getDataSource() { 
     return dataSource; 
    } 

    public static Config getInstance(ServletContext servletContext) { 
     return (Config) servletContext.getAttribute(ATTRIBUTE_NAME); 
    } 
} 

Он объяснил, что у вас есть этот класс, и соединение будет запускаться один для всех сервлетов, поэтому я подумал, что это хорошая практика, чтобы сделать это.

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

Вот что я пытался, но он не работает из:

Connection con = null; 
Config a = new Config(); 
con = (Connection) a.getDataSource(); 
DBConnect dbConnect = new DBConnect(); 
con = dbConnect.getConnection();       

stmt = con.createStatement();     
rs = stmt.executeQuery("SELECT * FROM members"); 

Я надеюсь, что кто-то может сказать мне, как довести соединение в моем doPost Servlet.

+0

Что я s 'a' in' con = (Connection) a.getDataSource(); ' –

+0

Извините, я пропустил эту строку: Config a = new Config(); –

ответ

1

Лучше всего использовать соединение, созданное в ServletContextListner это, установив его в качестве атрибута в ServletContext, как это:

event.getServletContext().setAttribute("connection_name", connection_object); 

После этого, вы можете использовать эту connection_object в любом сервлет, как это:

connection_object = config.getServletContext().getAttribute("connection_name"); 
+0

Код OP уже содержит ссылку на экземпляр Config, у которого есть метод getDataSource(). Это было бы лишним. Посмотрите на код OP еще раз. – stepanian

0

Ваш отливка DataSource для подключения

 Connection con = null; 
    con = (Connection) a.getDataSource(); 

Пожалуйста, измените к

 DataSource dataSource= null; 
    dataSource = (DataSource) a.getDataSource(); // Your casting datasource to Connection 

    //get the connection from datasource 

    if (dataSource!= null) { 
     con = dataSource.getConnection(); 
    } 
    if (con!= null) { 
     stmt = con.createStatement();     
     rs = stmt.executeQuery("SELECT * FROM members"); 
    } 
0

Используйте это:

Connection con = ((DataSource) a.getDataSource()).getConnection(); 

Вместо этого:

Connection con = null; 
con = (Connection) a.getDataSource(); 
DBConnect dbConnect = new DBConnect(); 
con = dbConnect.getConnection();       

Предполагая, что вы установили:

Config a = Config.getInstance(request.getServletContext()); 
+0

Теперь я включил Conig a = Config.getInstance (request.getServletContext()); con = a.getDataSource(). getConnection(); Но Tomcat по-прежнему вызывает ошибку: перезагрузка контекста с именем [/ Web1] началась contextDestroyed .... 30 сентября 2013 г. 7:19:53 org.apache.catalina.core.StandardContext reload INFO: Перезагрузка Контекст с именем [/ Web1] завершен –

+0

Это не ошибка. Работает ли ваш объект con так, как он должен? – stepanian

+0

Я так думаю, потому что тестовое соединение работает нормально. Теперь я добавил autoDeploy = "false", и вышеупомянутая проблема исчезла. Я получаю еще одну ошибку: Запуск протоколаHandler ["http-apr-8080"] 1 октября 2013 г. 8:22:19 org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler ["ajp-apr-8009"] 1 октября 2013 г. 8:22:19 org.apache.catalina.startup.Catalina start –

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