JDBC / Connectorj: общие сведения о пуле соединений - PullRequest
1 голос
/ 28 июня 2011

Я думаю, что мне нужно немного лучше понять концепцию пула соединений.Я работаю в java с ConnectorJ и развертываю свой сервлет на сервере Apache Tomcat.Я следил за документом, поэтому мой Tomcat context.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="">
  <Resource auth="Container" driverClassName="com.mysql.jdbc.Driver"
        maxActive="-1" maxIdle="30"
        maxWait="10000" minEvictableIdleTimeMillis="1200000" name="jdbc/MySQLDB"
        removeAbandoned="true" removeAbandonedTimeout="1200"  timeBetweenEvictionRunsMillis="60000"
        type="javax.sql.DataSource" url="jdbc:mysql://my_host"
        username="my_username" password="my_password"
        factory="org.apache.commons.dbcp.BasicDataSourceFactory" /> 
</Context>

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

InitialContext ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/MySQLDB");
Connection conn = null;

try {
        conn = ds.getConnection();

        // Do query etc.
        // Close connection, statement and result set if applicable
}
catch (SQLException){
    // Handle exception here
}

Мой вопросявляется: почему я должен указать пользователя и пароль для моего источника данных в context.xml.Поправьте меня, если я ошибаюсь, но я подумал, что смысл пула соединений заключается в том, чтобы повторно использовать соединения, которые имеют одну и ту же строку соединения?

Я хочу иметь возможность иметь дело с несколькими различными входами (скажем, сервлет получаетучетные данные БД для использования через HTTP), но если мне нужно определить разные источники данных для каждого возможного соединения, не противоречит ли это точке пула соединений?

Ответы [ 3 ]

4 голосов
/ 28 июня 2011

Когда вы открываете соединение с базой данных напрямую, с помощью DriverManager.getConnection, вы вводите имя пользователя и пароль для входа в базу данных в этом вызове.

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

Обычно в веб-приложении Java вы не будете использовать разные учетные данные для входа в базу данных для каждого пользователяваше приложение.У вас будет только одно имя пользователя и пароль, которые использует приложение, для любого, кто использует веб-приложение.Если разные пользователи веб-приложения имеют разные права, вы должны настроить это, имея систему входа в систему для самого приложения, но имена пользователей и пароли, которые вы используете для приложения, не совпадают с теми, которые вы использовали бы для входа в систему.в базу данных.

0 голосов
/ 28 июня 2011

Несколько вещей:

  1. DataSource API предоставляет метод getConnection (имя пользователя, пароль) .По какой-то причине Apache DBCP, который Tomcat использует для себя, не реализует этот метод.Возможно, вы захотите изучить альтернативные реализации, если DBCP не отвечает вашим потребностям.
  2. Как уже говорили другие, изменение учетных данных базы данных для каждого запроса является довольно туманным вариантом использования.Возможно, вам следует пересмотреть свой дизайн, чтобы ваша аутентификация пользователя была отделена от доступа к вашей базе данных.
  3. В более общем смысле, пул - это метод повторного использования нескольких вещей, которые достаточно похожи, чтобы их можно было использовать многократно.Понятно, что DBCP решил, что «достаточно одинаково» не подразумевает возможность повторного использования в разных учетных данных базы данных.Я не думаю, что это правильно или неправильно в принципе.
0 голосов
/ 28 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...