Oops, it's me.

Sorry


On 5/11/06, Bruno CROS <[EMAIL PROTECTED]> wrote:

 Yep, i 'm affraid that _pool.size() is always > than -1 !! (the maxIdle),
so "shouldDestroy" is true, and no pool is added.

May be it's me . Someone can confirm this ?



    private void addObjectToPool(Object obj, boolean decrementNumActive)
throws Exception {
        boolean success = true;
        if(_testOnReturn && !(_factory.validateObject(obj))) {
            success = false;
        } else {
            try {
                _factory.passivateObject(obj);
            } catch(Exception e) {
                success = false;
            }
        }

        boolean shouldDestroy = !success;

        if (decrementNumActive) {
            _numActive--;
        }
        if((_maxIdle >= 0) && (_pool.size() >= _maxIdle)) {
            shouldDestroy = true;
        } else if(success) {
            _pool.addLast(new ObjectTimestampPair(obj));
        }
        notifyAll(); // _numActive has changed

        if(shouldDestroy) {
            try {
                _factory.destroyObject(obj);
            } catch(Exception e) {
                // ignored
            }
        }
    }


On 5/11/06, Armin Waibel <[EMAIL PROTECTED]> wrote:
>
>
>
> Bruno CROS wrote:
> > when MaxIdle is set to 0, it works well, and the 5 maxActive are
> > sufficient.
> > No freeze at all.
>
> it's a moot point whether only one connection or five connections are
> used when maxIdle is 0. I think that maxIdle=0 will immediately close
> returned connections.
>
>
> >
> > The whenExhaustedAction block is well what i want, no error. And it
> works
> > with maxIdle set to 0.
> >
> > I don't see why no connection remaining in the pool leads to a
> > serialization. Dead lock is a good assumption, it looks like that, but
> if
> > code only reads, i don't known at all how to produce dead lock.
>
> A deadlock caused by the pool and and depended broker instances (one
> broker wait for a result of another one or a broker leak), not a
> database deadlock.
>
> > I'm
> > going to
> > look at common-pool settings, if maxIdle is common-pool setting.
>
> yep, maxIdle is a commons-pool setting. I would recommend to check the
> source code.
> http://jakarta.apache.org/commons/pool/cvs-usage.html
> (currently the apache svn is down due a SVN-server problem last night,
> so download the sources).
>
> regards,
> Armin
>
> >
> > regards
> >
> >
> >
> >
> >
> > On 5/11/06, Armin Waibel <[EMAIL PROTECTED]> wrote:
> >>
> >> Bruno CROS wrote:
> >> > Hi Armin,
> >> >
> >> > autoCommit set to 1 does not avoid freeze. The fact is that
> database is
> >> > only
> >> > used to be read, so rollbacks ( by disconnecting) will never be
> long.
> >> > autocommit is however set to 1 now. Thanks for the advice.
> >> >
> >> > I dont' known why it freezes when maxIdle set to -1 and why it does
> not
> >> > when
> >> > maxIdle is set to 0. But if i well guess, 0 closes usable
> connections,
> >> > that's it ?! So it's not optimized.
> >> >
> >>
> >> You enabled whenExhaustedAction="1" this mean that the pool blocks
> till
> >> a connection was returned. Max active connections is set to 5 this
> isn't
> >> much for a mulithreaded application. Maybe your application cause a
> >> deadlock, five different broker instances exhaust the pool and
> another
> >> broker instance try to lookup a connection but other broker instances
> >> still not closed.
> >> What happens when you set whenExhaustedAction="0"?
> >>
> >> I think if you set maxIdle=0 only one connection or none connections
> >> will remain in the pool (maybe I'm wrong, I don't check commons-pool
> >> sources) and all access is "serialized" by this.
> >>
> >> regards,
> >> Armin
> >>
> >>
> >> > Here's my well working conn setup
> >> >
> >> > Regards.
> >> >
> >> >
> >> >        <connection-pool
> >> >            maxActive="5"
> >> >            maxIdle="0"
> >> >            minIdle="2"
> >> >            maxWait="1000"
> >> >            whenExhaustedAction="1"
> >> >
> >> >            validationQuery="SELECT CURRENT_TIMESTAMP"
> >> >            testOnBorrow="true"
> >> >            testOnReturn="false"
> >> >            testWhileIdle="true"
> >> >            timeBetweenEvictionRunsMillis="60000"
> >> >            numTestsPerEvictionRun="2"
> >> >            minEvictableIdleTimeMillis="1800000"
> >> >            removedAbandonned="false"
> >> >            removeAbandonedTimeout="300"
> >> >            logAbandoned="true">
> >> >
> >> >            <!-- Set fetchSize to 0 to use driver's default. -->
> >> >            <attribute attribute-name="fetchSize"
> attribute-value="0"/>
> >> >
> >> >            <!-- Attributes with name prefix "jdbc." are passed
> directly
> >> to
> >> > the JDBC driver. -->
> >> >            <!-- Example setting (used by Oracle driver when
> Statement
> >> > batching is enabled) -->
> >> >            <attribute attribute-name=" jdbc.defaultBatchValue"
> >> > attribute-value="5"/>
> >> >
> >> >            <!-- Attributes determining if ConnectionFactoryDBCPImpl
> >> >                 should also pool PreparedStatement. This is
> >> > programmatically disabled
> >> >                 when using platform=Oracle9i since Oracle statement
> >> caching
> >> > will conflict
> >> >                 with DBCP ObjectPool-based PreparepdStatement
> caching
> >> (ie
> >> > setting true
> >> >                 here has no effect for Oracle9i platform). -->
> >> >            <attribute attribute-name="dbcp.poolPreparedStatements"
> >> > attribute-value="false"/>
> >> >            <attribute attribute-name="
> dbcp.maxOpenPreparedStatements"
> >> > attribute-value="10"/>
> >> >            <!-- Attribute determining if the Commons DBCP
> connection
> >> > wrapper will allow
> >> >                 access to the underlying concrete Connection
> instance
> >> from
> >> > the JDBC-driver
> >> >                 (normally this is not allowed, like in
> J2EE-containers
> >> > using wrappers). -->
> >> >            <attribute attribute-name="
> >> > dbcp.accessToUnderlyingConnectionAllowed" attribute-value="false"/>
> >> >        </connection-pool>
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > On 5/6/06, Armin Waibel <[EMAIL PROTECTED] > wrote:
> >> >>
> >> >> Hi Bruno,
> >> >>
> >> >> Bruno CROS wrote:
> >> >> > Hi Armin,
> >> >> >
> >> >> > In fact, i looked at the DB connections in the DB console. It
> was a
> >> bad
> >> >> > idea, because connection disappear !! I looked with netstat -a ,
> and
> >> i
> >> >> saw
> >> >> > several sockets/connections...
> >> >> >
> >> >> > Well, i was experiencing some freezes with these connections
> with a
> >> >> pool
> >> >> > setup maxActive set to -1. I didn't find any documentation on
> that
> >> >> value.
> >> >>
> >> >> Both ConnectionFactoryPooledImpl and ConnectionFactoryDBCPImpl use
> >> >> commons-pool to manage connections. There you can find details
> about
> >> the
> >> >> settings
> >> >> http://jakarta.apache.org/commons/pool/apidocs/index.html
> >> >>
> >> >> I would recommend to set maxActive connections at most to the
> maximal
> >> >> connections provided by your database server.
> >> >>
> >> >>
> >> >> > What i known is that, when i put 0 (no limit), it seems there is
> no
> >> >> more
> >> >> > freeze.
> >> >> >
> >> >>
> >> >> I think there is a typo in documentation. For unlimited connection
> >> pool
> >> >> you have to set -1.
> >> >>
> >> >>
> >> 
http://jakarta.apache.org/commons/pool/apidocs/org/apache/commons/pool/impl/GenericObjectPool.html
>
> >>
> >> >>
> >> >> Will fix this till next release.
> >> >>
> >> >> In your jdbc-connection-descriptor (posted some time ago) you set
> >> >> useAutoCommit="0". In this case you have to enable autoCommit
> 'false'
> >> in
> >> >> your jdbc-driver configuration setup, else you will run into
> rollback
> >> >> hassle (if autoCommit is 'true' for connections).
> >> >>
> >> >> regards,
> >> >> Armin
> >> >>
> >> >> > Can you ligth up me about that.
> >> >> >
> >> >> > Thanks.
> >> >> >
> >> >> > Regards.
> >> >> >
> >> >> >
> >> >> >
> >> >> > On 5/5/06, Armin Waibel <[EMAIL PROTECTED]> wrote:
> >> >> >>
> >> >> >> Hi Bruno,
> >> >> >>
> >> >> >> Bruno CROS wrote:
> >> >> >> >     Hi,
> >> >> >> >
> >> >> >> >  I have a strange behaviour about the second database i use.
> It
> >> >> seems
> >> >> >> that
> >> >> >> > using "broker =
> >> >> >> > PersistenceBrokerFactory.createPersistenceBroker("rushDb");"
> >> >> >> > always return the same broker/connection.
> >> >> >> >
> >> >> >> > My connection pool is setup as it have to keep 2 idle
> connections
> >> >> >> > available, and it never occured. Still only one.
> >> >> >> >
> >> >> >> > How can i use several connection in this case?
> >> >> >> >
> >> >> >> > Note that this database is not not use to update datas. No
> >> >> transaction
> >> >> >> are
> >> >> >> > used on it.
> >> >> >> >
> >> >> >>
> >> >> >> how do you test this behavior? Please setup a test and lookup
> for
> >> two
> >> >> PB
> >> >> >> instances at the same time:
> >> >> >>
> >> >> >> broker_A = PersistenceBrokerFactory.createPersistenceBroker
> >> ("rushDb");
> >> >> >> broker_B = PersistenceBrokerFactory.createPersistenceBroker
> >> ("rushDb");
> >> >> >>
> >> >> >> Are A and B really the same broker instances? If you execute a
> >> >> query on
> >> >> >> both broker instances (don't close the broker after it) and
> then
> >> >> lookup
> >> >> >> the Connection from A and B - are the connections the same?
> >> >> >>
> >> >> >> regards,
> >> >> >> Armin
> >> >> >>
> >> >> >> >
> >> >> >> > Thanks.
> >> >> >> >
> >> >> >> >
> >> >> >> > Here's my connection setup.
> >> >> >> >
> >> >> >> >    <jdbc-connection-descriptor
> >> >> >> >     jcd-alias="rushDb"
> >> >> >> >     default-connection="false"
> >> >> >> >     platform="MsSQLServer"
> >> >> >> >     jdbc-level="2.0"
> >> >> >> >     driver=" com.microsoft.jdbc.sqlserver.SQLServerDriver"
> >> >> >> >     protocol="JDBC"
> >> >> >> >     subprotocol="microsoft:sqlserver"
> >> >> >> >     dbalias="//xxx.x.x.x:1433"
> >> >> >> >     username="xxxx"
> >> >> >> >     password="xxxx"
> >> >> >> >     batch-mode="true"
> >> >> >> >        useAutoCommit="0"
> >> >> >> >        ignoreAutoCommitExceptions="true"
> >> >> >> >     >
> >> >> >> >
> >> >> >> > and pool setup :
> >> >> >> >
> >> >> >> >            maxActive="5"
> >> >> >> >           maxIdle="-1"
> >> >> >> >            minIdle="2"
> >> >> >> >            maxWait="5000"
> >> >> >> >            whenExhaustedAction="2"
> >> >> >> >
> >> >> >> >            validationQuery="SELECT CURRENT_TIMESTAMP"
> >> >> >> >            testOnBorrow="true"
> >> >> >> >            testOnReturn="false"
> >> >> >> >            testWhileIdle="true"
> >> >> >> >            timeBetweenEvictionRunsMillis="60000"
> >> >> >> >     numTestsPerEvictionRun="2"
> >> >> >> >            minEvictableIdleTimeMillis="1800000"
> >> >> >> >            removedAbandonned="false"
> >> >> >> >            removeAbandonedTimeout="300"
> >> >> >> >            logAbandoned="true">
> >> >> >> >
> >> >> >>
> >> >> >>
> >> ---------------------------------------------------------------------
> >> >> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> >> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >> >> >>
> >> >> >>
> >> >> >
> >> >>
> >> >>
> >> >>
> ---------------------------------------------------------------------
> >> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >> >>
> >> >>
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to