Закрыть соединение SQL Java Webservice - PullRequest
1 голос
/ 19 января 2010

Я программирую WebService на Java, который создает и вызывает этот класс:

    public class Manager{

        private Connection aConnection;


        public CacheManager(){
            //We get a connection
                aConnection = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/mydb?user=root&password=";


        }
// Insert a datalist into a table
    public void insertIntoDB(List listData, String tableName, StringData previousData)
    {

       // Some code using database

        }

Основная проблема заключается в том, что соединение не закрывается сразу после вызова веб-службы. Это означает, что 100 обращений к веб-службе создают 100 подключений к базе данных. Это создает ошибку MySQL «слишком много пользователей подключено». Если я подожду 2 минуты, объекты будут уничтожены сборщиком мусора, и веб-служба сможет снова работать.

Кто-нибудь имеет представление о том, как обойти эту проблему?

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 22 января 2010

Мне нужно было создать пул соединений на glassfish, затем каждый раз, когда мне нужно соединение в моей программе, я «получаю» соединение и сразу после него освобождаю. Я больше не получаю соединение в конструкторе, только внутри моих функций.

0 голосов
/ 19 января 2010

Я думаю, что вы должны поддерживать пул соединений с базой данных. Например, вы можете сослаться на C3P0 . Таким образом, когда вы инициализируете класс, в конструкторе вы можете настроить пул соединений с базой данных (скажем, 10 соединений с базой данных). В методе insertIntoDB сначала вы получаете соединение из пула соединений, выполняете операции CRUD базы данных и, наконец, возвращаете соединение в пул. Таким образом, вы никогда не будете оказывать давление на базу данных, создавая несколько соединений. Создание соединения для каждого вызова также замедлит работу, и это антипаттерн, называемый Connection Thrashing .

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