Pisu jen ze zkusenosti:K tomu GenericObjectPool,
muzou v nem byt ruzne typy objektu, kdyz maji spolecny superclass(ve vasem
pripade Connection?). Metoda borrow se da volat i s klicem, ktery urci typ
vraceneho objektu.
Kdyz jsou vsechny objekty z poolu vypujcene, dalsi volani borrow defaultne
blokuje a ceka na vraceni objektu.
Zkontrolujte, ze se connections obravdu vraceji do poolu pomoci spravne
metody(returnObject?). Alternativne zmente strategii pri pool exhaustion.
On Mar 23, 2013 10:42 AM, "Ivan Polak" <ivan.po...@f4s.sk> wrote:

> ahojte,
>
> vo webovej aplikacii mam problem s pripojenim na DB (PostgreSQL) a na
> noSQL REDIS, pomocou connectoru JEDIS, pouzivam tomcat 7.0.29.
>
> aplikacia po par minutach pouzivania "zastane". predpokladam, ze je
> problem v apache commons connection pool-e.
>
> pouzivam:
>
> - pripojenie na REDIS pomocou JEDIS connector (jedis-2.1.0.jar)
> - pripojenie na PostgreSQL DB (JDBC driver: postgresql-9.1-901.jdbc4.jar).
>
> REDIS server version: 2.4 (windows version)
> JEDIS version: 2.1.0
> connection pool: apache commons pool version 1.6
> tomcat version: 7.0.29
>
> po debugovani som zistil, ze sa pouziva pravdepodobne jeden connection
> pool a v triede:
>
> org.apache.commons.pool.impl.GenericObjectPool, v funkcii
>
> public T borrowObject() throws Exception {
> ...
> if (latch.getPair() == null && !latch.mayCreate()) {
> if(maxWait <= 0) {
> latch.wait();
>
> pretoze latch.getPair() = null, maxWait is -1 a latch.mayCreate() ==
> false, takze latch.wait() sa vykona, a aplikacia "zastane".
>
> je mozne vobec pouzivat jeden connection pool pre pripojenie na
> PostgreSQL DB aj na pripojenie na REDIS ? nemam skusenosti s
> pripojenim na viacere "zdroje" dat v jednej aplikacii.
>
> nastavenie connection pool-u je default.
>
> pre informaciu, pouzivanie JEDIS-u:
>
> 1.
> RedisTemplate<String, String> redisTemplate = (RedisTemplate<String,
> String>) BeanUtil.getBean("redisTemplate");
> return redisTemplate.boundZSetOps(set).incrementScore(key , value);
> 2.
> RedisTemplate<String, String> redisTemplate = (RedisTemplate<String,
> String>) BeanUtil.getBean("redisTemplate");
> Set<Tuple> mostViewed = redisTemplate.execute(new
> RedisCallback<Set<Tuple>>() {
> @Override
> public Set<Tuple> doInRedis(RedisConnection con)
> throws DataAccessException {
> Set<Tuple> zRangeByScoreWithScore =
> con.zRangeByScoreWithScores(ARTICLE_VIEWS_SET.getB ytes(), 1, 10);
> return zRangeByScoreWithScore;
> }
> });
>
> ---
>
> jedisConnectionFactory definicia:
>
> <bean id="jedisConnectionFactory"
> class="org.springframework.data.redis.connection.j
> edis.JedisConnectionFactory">
> <property name="hostName" value="${redis.host}"/>
> <property name="port" value="${redis.port}"/>
> <property name="timeout" value="2000"/>
> </bean>
>
> dakujem za akekolvek rady
>
> Ivan
>

Odpovedet emailem