You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Info <in...@crestax.ca> on 2004/04/24 04:34:57 UTC
Exception from RsIterator
Hello Everybody! I am working through the week end.
---------------------------------------------------------------------------------
J2SE 1.4.2_04 + OJB 1.0 rc6 + Struts 1.1 + J2EE (just in classpath)
---------------------------------------------------------------------------------
I am geting a report query by:
broker = PersistenceBrokerFactory.defaultPersistenceBroker();
Criteria crit = new Criteria();
ReportQueryByCriteria q =
QueryFactory.newReportQuery(ThreadDto.class, crit);
q.setAttributes(new String[]{"priority", "username"});
Iterator it = broker.getReportQueryIteratorByQuery(q);
while (it.hasNext()){
it.next();......................
.....................
}
but from line: while (it.hasNext()) get the following exception
org.apache.ojb.broker.accesslayer.RsIterator$ResourceClosedException:
Resources no longer reachable, RsIterator will be automatic cleaned up
on PB.close/.commitTransaction/.abortTransaction
at
org.apache.ojb.broker.accesslayer.RsIterator.getRsAndStmt(RsIterator.java:876)
at
org.apache.ojb.broker.accesslayer.RsIterator.hasNext(RsIterator.java:228)
I tried to use Query instead of report query, and let it returns a
Colleciton, everything is fine.
Later, I still used Query, but ask it return a Iterator (by method:
getIteratorByQuery()), I get the same exception as above. It looks like
not caused by report query but by Iterator return.
Please give advice,
Thanks!
Wallace
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org
Re: Exception from RsIterator
Posted by Info <in...@crestax.ca>.
Armin, Thanks!
Wallace
Armin Waibel wrote:
> Hi Wallace,
>
> exactly!
> The connection is associated with the PB instance. When the PB
> instance was closed or the current PB-tx end all resources became
> unvalid.
> E.g. the connection returned to the pool on PB.close may used by
> another thread/PB instance and when RsIterator does not close all
> resources it may happend that RsIterator use the same connection as a
> concurrent thread and bad things can start happen ...
>
> You can find comments in RsIterator javadoc, in RsIterator source code
> and some posts at the user-list.
>
> regards,
> Armin
>
> Info wrote:
>
>> Hello week end mid-night!
>>
>> I know the reason. Actually, after I get Iterator, this time OJB
>> hasn't get whole data set yet. So I only get a interface, every time
>> I invoke next(), the Iterator(RsIterator) will retrieve the data from
>> database. So I can't return Iterator from a method. Because, before
>> return the Iterator the following code will be executed:
>>
>> } finally {
>> if (broker != null) {
>> broker.close();
>> }
>> }
>> my database connection has been close before I process the Iterator.
>>
>> I have to retrieve the data from Iterator manually before I return. I
>> guess OJB intend to minimize the database access from Iterator mode.
>>
>> Thanks,
>> Wallace
>>
>>
>> Info wrote:
>>
>>> Hello Everybody! I am working through the week end.
>>>
>>> ---------------------------------------------------------------------------------
>>>
>>> J2SE 1.4.2_04 + OJB 1.0 rc6 + Struts 1.1 + J2EE (just in classpath)
>>> ---------------------------------------------------------------------------------
>>>
>>> I am geting a report query by:
>>>
>>> broker =
>>> PersistenceBrokerFactory.defaultPersistenceBroker();
>>>
>>> Criteria crit = new Criteria();
>>> ReportQueryByCriteria q =
>>> QueryFactory.newReportQuery(ThreadDto.class, crit);
>>> q.setAttributes(new String[]{"priority", "username"});
>>> Iterator it = broker.getReportQueryIteratorByQuery(q);
>>> while (it.hasNext()){
>>> it.next();......................
>>> .....................
>>> }
>>>
>>> but from line: while (it.hasNext()) get the following exception
>>>
>>> org.apache.ojb.broker.accesslayer.RsIterator$ResourceClosedException:
>>> Resources no longer reachable, RsIterator will be automatic cleaned
>>> up on PB.close/.commitTransaction/.abortTransaction
>>> at
>>> org.apache.ojb.broker.accesslayer.RsIterator.getRsAndStmt(RsIterator.java:876)
>>>
>>> at
>>> org.apache.ojb.broker.accesslayer.RsIterator.hasNext(RsIterator.java:228)
>>>
>>>
>>> I tried to use Query instead of report query, and let it returns a
>>> Colleciton, everything is fine.
>>> Later, I still used Query, but ask it return a Iterator (by method:
>>> getIteratorByQuery()), I get the same exception as above. It looks
>>> like not caused by report query but by Iterator return.
>>>
>>> Please give advice,
>>>
>>> Thanks!
>>> Wallace
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>>
>>>
>>>
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
>
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org
Re: Exception from RsIterator
Posted by Armin Waibel <ar...@apache.org>.
Hi Wallace,
exactly!
The connection is associated with the PB instance. When the PB instance
was closed or the current PB-tx end all resources became unvalid.
E.g. the connection returned to the pool on PB.close may used by another
thread/PB instance and when RsIterator does not close all resources it
may happend that RsIterator use the same connection as a concurrent
thread and bad things can start happen ...
You can find comments in RsIterator javadoc, in RsIterator source code
and some posts at the user-list.
regards,
Armin
Info wrote:
> Hello week end mid-night!
>
> I know the reason. Actually, after I get Iterator, this time OJB hasn't
> get whole data set yet. So I only get a interface, every time I invoke
> next(), the Iterator(RsIterator) will retrieve the data from database.
> So I can't return Iterator from a method. Because, before return the
> Iterator the following code will be executed:
>
> } finally {
> if (broker != null) {
> broker.close();
> }
> }
> my database connection has been close before I process the Iterator.
>
> I have to retrieve the data from Iterator manually before I return. I
> guess OJB intend to minimize the database access from Iterator mode.
>
> Thanks,
> Wallace
>
>
> Info wrote:
>
>> Hello Everybody! I am working through the week end.
>>
>> ---------------------------------------------------------------------------------
>>
>> J2SE 1.4.2_04 + OJB 1.0 rc6 + Struts 1.1 + J2EE (just in classpath)
>> ---------------------------------------------------------------------------------
>>
>> I am geting a report query by:
>>
>> broker = PersistenceBrokerFactory.defaultPersistenceBroker();
>>
>> Criteria crit = new Criteria();
>> ReportQueryByCriteria q =
>> QueryFactory.newReportQuery(ThreadDto.class, crit);
>> q.setAttributes(new String[]{"priority", "username"});
>> Iterator it = broker.getReportQueryIteratorByQuery(q);
>> while (it.hasNext()){
>> it.next();......................
>> .....................
>> }
>>
>> but from line: while (it.hasNext()) get the following exception
>>
>> org.apache.ojb.broker.accesslayer.RsIterator$ResourceClosedException:
>> Resources no longer reachable, RsIterator will be automatic cleaned up
>> on PB.close/.commitTransaction/.abortTransaction
>> at
>> org.apache.ojb.broker.accesslayer.RsIterator.getRsAndStmt(RsIterator.java:876)
>>
>> at
>> org.apache.ojb.broker.accesslayer.RsIterator.hasNext(RsIterator.java:228)
>>
>> I tried to use Query instead of report query, and let it returns a
>> Colleciton, everything is fine.
>> Later, I still used Query, but ask it return a Iterator (by method:
>> getIteratorByQuery()), I get the same exception as above. It looks
>> like not caused by report query but by Iterator return.
>>
>> Please give advice,
>>
>> Thanks!
>> Wallace
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>
>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org
Re: Exception from RsIterator
Posted by Info <in...@crestax.ca>.
Hello week end mid-night!
I know the reason. Actually, after I get Iterator, this time OJB hasn't
get whole data set yet. So I only get a interface, every time I invoke
next(), the Iterator(RsIterator) will retrieve the data from database.
So I can't return Iterator from a method. Because, before return the
Iterator the following code will be executed:
} finally {
if (broker != null) {
broker.close();
}
}
my database connection has been close before I process the Iterator.
I have to retrieve the data from Iterator manually before I return. I
guess OJB intend to minimize the database access from Iterator mode.
Thanks,
Wallace
Info wrote:
> Hello Everybody! I am working through the week end.
>
> ---------------------------------------------------------------------------------
>
> J2SE 1.4.2_04 + OJB 1.0 rc6 + Struts 1.1 + J2EE (just in classpath)
> ---------------------------------------------------------------------------------
>
> I am geting a report query by:
>
> broker = PersistenceBrokerFactory.defaultPersistenceBroker();
>
> Criteria crit = new Criteria();
> ReportQueryByCriteria q =
> QueryFactory.newReportQuery(ThreadDto.class, crit);
> q.setAttributes(new String[]{"priority", "username"});
> Iterator it = broker.getReportQueryIteratorByQuery(q);
> while (it.hasNext()){
> it.next();......................
> .....................
> }
>
> but from line: while (it.hasNext()) get the following exception
>
> org.apache.ojb.broker.accesslayer.RsIterator$ResourceClosedException:
> Resources no longer reachable, RsIterator will be automatic cleaned up
> on PB.close/.commitTransaction/.abortTransaction
> at
> org.apache.ojb.broker.accesslayer.RsIterator.getRsAndStmt(RsIterator.java:876)
>
> at
> org.apache.ojb.broker.accesslayer.RsIterator.hasNext(RsIterator.java:228)
>
> I tried to use Query instead of report query, and let it returns a
> Colleciton, everything is fine.
> Later, I still used Query, but ask it return a Iterator (by method:
> getIteratorByQuery()), I get the same exception as above. It looks
> like not caused by report query but by Iterator return.
>
> Please give advice,
>
> Thanks!
> Wallace
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
>
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org