2014-01-20 5 views
0

Я строю с помощью java servlet/jsp. У меня есть класс для обработки соединения с базой данных, но я не знаю, должен ли я создавать каждый экземпляр для каждого запроса или одного экземпляра для всех запросов. Например:Должен ли новый экземпляр создаваться для каждого запроса?

Сценарий 1:

class HandleDB { 
    public static HandleDB getInstance(); // singleton pattern 
    public void initConnection(); 
    public void releaseConnection(); 
} 

затем,

//at the beginning of a request: 
HandleDB.getInstance().initConnection(); 
// handle tasks 
// at the end of request 
HandleDB.getInstance().releaseConnection(); 

Сценарий 2:

class HandleDB { 
    public void initConnection(); 
    public void releaseConnection(); 
} 

//at the beginning of a request: 
HandleDB db = new HandleDB(); 
db.initConnection(); 
// handle tasks 
// at the end of request 
db.releaseConnection(); 
db = null; 

Какой сценарий следует использовать в PRA ctice?

ответ

1

Перейти к Сценарий 2. Проблема со сценарием 1 заключается в том, что тот же экземпляр HandleDB будет использоваться всеми запросами и может привести к проблемам безопасности потоков. Имейте в виду, что запросы могут выполняться параллельно. Стандарт должен иметь одно соединение на поток/запрос.

Большинство веб-приложений используют пул соединений (например, C3P0 или Apache DBCP), чтобы избежать необходимости создавать новое соединение для каждого запроса. Вы получаете соединение из пула в начале запроса и возвращаете его в пул в конце запроса, поэтому другие запросы могут повторно использовать его позже.

+0

Да, мы используем DBCP для подключения к пулу соединений, и я поеду за вашим предложением. – ipkiss

0

Используйте Слушателей LINK

public class AppServletContextListener implements ServletContextListener{ 

    @Override 
    public void contextDestroyed(ServletContextEvent arg0) { 
        /// Destroy DB Connection 
    } 

    @Override 
    public void contextInitialized(ServletContextEvent arg0) { 
        /// Create DB Connection 
    } 
} 
0

если у вас есть пакет задач, которые вы должны создать подключение к базе данных только в начале первой задачи, то после завершения всех задач, вы должны освободить или бесплатное подключение дб

для ваш случайный сценарий 1 применим.

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