2015-05-15 2 views
1

Число подключений к БД превышает допустимый предел.Поддержание нескольких соединений JDBC в Struts2

Это то, что я пробовал до сих пор.

Когда пользователь успешно входит в систему добавить один объект подключения к сеансу:

Connection conn = DatabaseConnectionManager.getConnection(); 
sessionMap.put("Connection", conn); 

тогда, когда мне нужно соединение с базой данных, я принесу из сессии:

Map<String, Object> sessionMap = (Map<String, Object>) ActionContext.getContext().get("session"); 
Connection conn = (Connection) sessionMap.get("Connection"); 

В метод getConnection() Я печатаю количество раз, когда вызывается метод. Итак, хотя я получаю объект Connection из сеанса, почему количество подключений превышает допустимый предел, равный 50?

JNDI Код:

Connection conn = null;   
try { 
    Context initCtx = new InitialContext(); 
    Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
    DataSource ds = (DataSource) envCtx.lookup("jdbc/MySqdb"); 
    conn = ds.getConnection(); 

} 
catch (NamingException ex) { 
    Logger.getLogger(DatabaseConnectionManager.class.getName()).log(Level.SEVERE, null, ex); 
} 
catch (SQLException sqle) { 
    sqle.printStackTrace(); 
} 
System.out.println("connection: "+connection++); 
return conn; 

Я использовал JNDI. Количество подключений находится в пределах допустимого предела. Я не уверен, правильно ли это, пожалуйста, посоветуйте.

+0

ли вы знаете, жизненный цикл и клиент/сервер веб-приложения на стороне программирования ??? Пул соединений JDBC - это свойство сервера, на мой взгляд, он не должен проходить через httpSession. – Sarz

+0

I thiink я. Я ожидал понижения. Я открыт для критики, пока он ведет меня в правильном направлении. – wib

+1

Используйте некоторый пул соединений. –

ответ

2

Одно соединение для каждого пользователя не является хорошим решением. Как уже упоминалось, вы должны использовать какой-либо опрос о подключении, и если вам нужно что-то простое использование https://commons.apache.org/proper/commons-dbcp/. Как уже упоминалось здесь:

Создание нового подключения для каждого пользователя может быть много времени (часто , требующий несколько секунд времени часов), для того, чтобы выполнить транзакцию в базы данных, которая может занять миллисекунды. Открытие соединения на одного пользователя может быть неосуществимым в общедоступном интернет-приложении , где количество одновременных пользователей может быть очень большим. Соответственно разработчики часто хотят поделиться «пулом» открытых соединений между всеми текущими пользователями приложения. Число пользователей, фактически выполняющих запрос в любой момент времени, обычно составляет очень небольшой процент от общего числа активных пользователей, а в течение обработка запросов - это единственный раз, когда требуется подключение к базе данных . Само приложение входит в СУБД и обрабатывает любые проблемы с учетной записью .

Вы можете найти образцы на http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/doc/

+0

Я использовал JNDI. Пожалуйста, посмотрите – wib

+1

С JNDI обратитесь к ресурсу, если ваш ресурс ** JDBC Datasource ** да, вы правы. Прочтите ** Источники данных JDBC ** на странице https://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html. –

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

  • Нет связанных вопросов^_^