eager-release was put in to work around a problem with a leaked connection in JBoss when using managed transactions. I remember at the time thinking the solution stunk a bit, but Armin was in the middle of a big refactoring of the connection stuff and people just needed it to work. I'm seriously swamped at work, otherwise I'd take a look at it, but someone like Armin could probably find the leak and solve the real problem ;) m
-----Original Message----- From: Jin Bal [mailto:[EMAIL PROTECTED] Sent: Mon 6/2/2003 2:17 PM To: OJB Users List; [EMAIL PROTECTED] Cc: Subject: Re: Limited collection returned Setting eager release to false solves the issue ro me. fortunately I am going to production on on tomcat 4 therefore the eager release setting does not need to be set to true. I had set it to true when trying out jboss My set up is Tomcat 4.x mySQL 4 OJB 1.0 rc3 cheers to everyone speaking up about this one! Jin ----- Original Message ----- From: "Thomas Mahler" <[EMAIL PROTECTED]> To: "Gary Richards" <[EMAIL PROTECTED]>; "OJB Users List" <[EMAIL PROTECTED]> Sent: Monday, June 02, 2003 8:15 PM Subject: Re: Limited collection returned > Hi again, > > Gary Richards wrote: > > Hi, > > > > It's almost certain (at least for me with JBoss) the eager-release. I > > turned it off and everything i expected came back through the query. > > > > That's what I expected. I had a closer look at the code. > OJB uses a class StatementManager to handle jdbc statement resources. > the method StatementManager.closeResources(Statement stmt, ResultSet rs) > is meant to close a statement after use. > > it contains the following lines: > /* > ********************************************* > special stuff for OJB within JBoss > ******************************************** > */ > if (m_eagerRelease) > { > m_conMan.releaseConnection(); > } > > clsoing the underlying connection will avoid the JBOSS "Successfully > closed a connection for you" messages. > But it is problematic because a PersistenceBroker uses only one > connection. once the connection is released other operations executed by > the same broker instance will fail! > > The only safe point to release a connection is in the broker commit() or > abort() methods! This looks like a design issue. > But I am not sure as I did not add this feature. I hope Armin can spread > some more light on this... > > For the time being I think the only safe option is to set eager-release > to false. > > We than have to have a closer look at the ODMG insert problem you have. > Do you see any OJB related exceptions in the stacktrace? Or only those > org.jboss.resource.connectionmanager.* exceptions? (They look like > warnings to me and should not do any harm?!) > > cheers, > Thomas > > > > Did get a few stack traces of the sort [CachedConnectionManager] > > Successfully closed a connection for you. Please close them > > yourself: [EMAIL PROTECTED] > > > > at > > org.jboss.resource.connectionmanager.CachedConnectionManager.closeAll(Cached ConnectionManager.java:376) > > at > > org.jboss.resource.connectionmanager.CachedConnectionManager.popMetaAwareObj ect(CachedConnectionManager.java:199) > > at > > org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(Cach edConnectionInterceptor.java:190) > > at > > org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor.invoke(StatefulSess ionInstanceInterceptor.java:271) > > etc... > > > > > > I had eager-release on as thats's what it said to do in the > > deployment docs for JBoss 3.0 and greater. Unfortuanately inserts > > don't seem to work for ODMG when setting eager-release to false. I > > get a first stack trace, > > > > 18:08:22,070 INFO [CachedConnectionManager] Successfully closed a > > connection for you. Please close them yourself: > > [EMAIL PROTECTED] > > java.lang.Exception: Stack Trace at > > org.jboss.resource.connectionmanager.CachedConnectionManager.closeAll(Cached ConnectionManager.java:376) > > at > > org.jboss.resource.connectionmanager.CachedConnectionManager.popMetaAwareObj ect(CachedConnectionManager.java:199) > > at > > org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(Cach edConnectionInterceptor.java:190) > > at > > org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor.invoke(StatefulSess ionInstanceInterceptor.java:271) > > > > > > followed by a few pages of > > > > 18:08:22,070 INFO [CachedConnectionManager] Successfully closed a > > connection for you. Please close them yourself: > > [EMAIL PROTECTED] > > java.lang.Exception: Stack Trace at > > org.jboss.resource.connectionmanager.CachedConnectionManager.closeAll(Cached ConnectionManager.java:376) > > at > > org.jboss.resource.connectionmanager.CachedConnectionManager.popMetaAwareObj ect(CachedConnectionManager.java:199) > > at > > org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(Cach edConnectionInterceptor.java:190) > > at > > org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor.invoke(StatefulSess ionInstanceInterceptor.java:271) > > etc... > > > > which is probably why we need eager-release for JBoss. Presumably the > > eager-release gives OJB a hint to cleanup its connections before > > JBoss comes to repossess them. > > > > regards > > > > Gary > > > > > > -----Original Message----- From: Thomas Mahler [mailto:[EMAIL PROTECTED] > > Sent: 02 June 2003 17:44 To: OJB Users List Subject: Re: Limited > > collection returned > > > > > > So both of you use the eager-release="true" feature. Have you tried > > to disable it? > > > > Maybe Armin knows a bit more about this feature ? > > > > cheers, Thomas > > > > Ken Dempster wrote: > > > >> My setup is as follows: Jboss 3.2.1 OBJ 1.0 RC3 OJB.properties set > >> to PersistenceBrokerImpl, PersistenceBrokerFactoryDefaultImpl, and > >> ConnectionFactoryManagedImpl, ObjectCachePerBrokerImpl. DB2 > >> database Server AS400 running both Jboss and DB2 I generate my own > >> JdbcConnectionDescriptor with the following settings: > >> JdbcConnectionDescriptor descriptor = new > >> JdbcConnectionDescriptor(); descriptor.setBatchMode(false); > >> descriptor.setDatasourceName("java:DB2DS"); > >> descriptor.setDbAlias("serverName"); descriptor.setDbms("Db2"); > >> descriptor.setDefaultConnection(true); > >> descriptor.setEagerRelease(true); > >> descriptor.setIgnoreAutoCommitExceptions(false); > >> descriptor.setJcdAlias("java:DB2DS"); > >> descriptor.setJdbcLevel("2.0"); descriptor.setPassWord("password"); > >> descriptor.setProtocol("jdbc"); descriptor.setSubProtocol("db2"); > >> descriptor.setUseAutoCommit(0); > >> descriptor.setUserName("user_name"); SequenceDescriptor > >> sequenceDescriptor = new > >> SequenceDescriptor("org.apache.ojb.broker.util.sequence.SequenceManagerN > >> extValImpl"); > >> > >> - Ken > >> > >> > >> > >> > >> > >> > >> Ken Dempster Programmer Analyst Vision Solutions, Inc. > >> > >> 17911 Von Karman Ave, 5th Floor Irvine, CA 92614 UNITED STATES > >> > >> Tel: +1 (949) 253-6500 Fax: +1 (949) 253-6501 Email: > >> [EMAIL PROTECTED] <http://www.visionsolutions.com/> > >> Disclaimer - 6/2/2003 The contents of this e-mail (and any > >> attachments) are confidential, may be privileged, and may contain > >> copyright material of Vision Solutions, Inc. or third parties. You > >> may only reproduce or distribute the material if you are expressly > >> authorized by Vision Solutions to do so. If you are not the > >> intended recipient, any use, disclosure or copying of this e-mail > >> (and any attachments) is unauthorized. If you have received this > >> e-mail in error, please immediately delete it and any copies of it > >> from your system and notify us via e-mail at > >> [EMAIL PROTECTED] -----Original Message----- From: > >> McCaffrey, John G. [mailto:[EMAIL PROTECTED] Sent: Monday, > >> June 02, 2003 8:02 AM To: 'OJB Users List' Subject: RE: Limited > >> collection returned > >> > >> > >> Thanks for your investigation Gary. This is exactly what I was > >> suspecting (RSIterator not iterating), now I guess the thing is to > >> figure out how the result set got closed. I am not sure why there > >> seem to be only a few people having this problem, it seems like > >> such basic functionality that there would be more of an uproar. It > >> makes me wonder what the afflicted have in common, and for those > >> people that can get a collection of dependent objects, how is their > >> setup different (assuming that there are people that are not having > >> this problem) > >> > >> my setup I have the basic OJB.props settings default > >> PersistenceBrokerImpl, PersistenceBrokerFactoryDefaultImpl, > >> ConnectionManagerImpl, and I am using ConnectionFactoryDBCPImpl > >> (though I have tried the others and still have the problem). > >> > >> Windows 2000, db-ojb-1.0.rc3.jar, commons-dbcp.jar I am using WSAD > >> (with datasource) and DB2, and I am using the PB API. > >> > >> > >> ###### Gary, Dan, Jin, Ken, etc what is your basic setup? > >> > >> Is there anybody with this same setup that is able to get a > >> collection of dependent objects? (help me figure out what i have > >> that is different) ###### I feel like a solution is right around > >> the corner. (and its a good thing, because I am supposed to go to > >> production by the end of the week!) > >> > >> Thanks to Gary and everyone that is looking into this. -john > >> > >> -----Original Message----- From: Gary Richards > >> [mailto:[EMAIL PROTECTED] Sent: Monday, June 02, 2003 9:05 AM To: > >> OJB Users List Subject: RE: Limited collection returned > >> > >> > >> > >> Hi everyone, > >> > >> Thought I'd offer my current observations on this as I work with > >> Dan and am running off the same codebase (JBoss 3.2.x, MySql, ODMG > >> etc....) and therefore trying to crack the same problem. > >> > >> I've been using the eclipse debugger to step through the action of > >> invoking a query. I have spent most of the recent time observing > >> private ManageableCollection getCollectionByQuery(Class > >> collectionClass, Class itemClass, Query query) of the > >> PersistanceBrokerImpl class (line 1293), inparticular the actions > >> of the while loop on line 1335 which reads as, > >> > >> while (((endAt == Query.NO_END_AT_INDEX) || (retrievedCount < > >> numberOfObjectsToFetch)) && iter.hasNext()) > >> > >> I have witnessed the hasNext() call of this condition to return > >> false during the second cycle of the loop, even though I now there > >> to be 13 rows in the database table and 13 elements behind the > >> Iterator. I have determined this (for those who know eclipse) by > >> editing the detail formatter of the RSIterator class to read > >> "this.size()" which shows 13 when I highlight it. > >> > >> This leads me onto RSIterator.hasNext() (line 216) which I have > >> moved onto observe as a result. I noticed that on the second cycle > >> of the iterator, the call from within hasNext() will issue > >> > >> hasNext = m_rsAndStmt.m_rs.next(); (line 223) > >> > >> This throws an expection which is caught by the same method so that > >> false is returned. > >> > >> catch (Exception ex) { hasNext = false; } > >> > >> I have noticed that the message given by this exception ex (which > >> is not logged, only gets caught) is "Operation not allowed after > >> ResultSet closed". This certainly suggests that something has > >> closed the ResultSet before the iterator has been fininshed with > >> (exactly what it says in the message ;) ). > >> > >> This almost always seems to happen after dependant objects have > >> been retieved as when we set auto-retrieve = "false" in > >> repository_user.xml for the appropriate property we get all rows of > >> the single table we query on but no dependant objects, however when > >> we set auto-retrieve = "true" we get only the first row of the > >> single table and all its dependant objects. > >> > >> Is this possibly linked to the eager-release feature which needs to > >> be enabled for operation on JBoss, or a side effect of bug OJB172? > >> > >> Any other thoughts? > >> > >> regards > >> > >> Gary > >> > >> > >> -----Original Message----- From: Dan Hanley Sent: Mon 02/06/2003 > >> 14:38 To: OJB Users List Cc: Subject: RE: Limited collection > >> returned > >> > >> Jin Are you also running in a managed environment (e.g. jBoss)? I > >> suspect the bug you're referring to is: Type : Defect Issue > >> Id : OJB172 Reported by: Rob Kischuk rkischuk - (rkischuk <at> > >> gttx.org) Details: Platform: PC Operating system: windows 2000 > >> Summary: Loading composite object leads to truncated collection > >> Description: Repeated calls to retrieve a collection of objects > >> that each contain another object are retrieving truncated results, > >> which are incrementally built to their proper length using repeated > >> requests. Status: New Priority: Undecided Severity: Major > >> Functional area: Setup ... which sounds like it could be the > >> culprit. A colleague of mine is trying to trace through with the > >> eclipse debugger to see if we can cast any light on this. You are > >> not alone, its holding a lot of people up... Dan -----Original > >> Message----- From: Jin Bal [mailto:[EMAIL PROTECTED] Sent: Fri > >> 30/05/2003 22:07 To: OJB Users List Cc: Subject: Re: Limited > >> collection returned I'm also having this problem - thank god > >> someone else's said so ! it's been driving me mad ;-) i've been > >> using ojb since 0.9.5 and have only noticed it recently. (sorry > >> can't be more precise than that) here's the offending class > >> descriptor <class-descriptor > >> class="com.buyacar.businessobjects.Vehicle" table="vehicle"> > >> ....blah blah properties etc <!-- IMAGES --> > >> <collection-descriptor name="images" auto-retrieve="true" > >> element-class-ref="com.buyacar.businessobjects.VehicleImage"> > >> <inverse-foreignkey field-id-ref="1"/> </collection-descriptor> > >> </class-descriptor> <class-descriptor > >> class="com.buyacar.businessobjects.BACVehicleDetails" > >> table="bac_details"> <reference-descriptor name="vehicle" > >> class-ref="com.buyacar.businessobjects.Vehicle" > >> auto-retrieve="true"> <foreignkey field-id-ref="2"/> > >> </reference-descriptor> </class-descriptor> whenever I load a > >> BACVehicleDetails (and therefore a Vehicle) I only ever get one > >> image in the collection. more over I have a search engine that > >> only returns 1 result the first time then 2 on the second submit > >> then 3 ......etc :-( heres the search engine code > >> PersistenceBroker broker = null; try { broker = getBroker(); > >> Criteria criteria = new Criteria(); // check if theyve specified a > >> price bracket if(searchParams.getMaxPrice() !=null && > >> searchParams.getMinPrice()!=null) { > >> criteria.addBetween("price",searchParams.getMinPrice(),searchParams.getM > >> axPr ice()); } else if(searchParams.getMaxPrice()!=null && > >> searchParams.getMinPrice()==null) { > >> criteria.addLessOrEqualThan("price",searchParams.getMaxPrice()); } > >> else if(searchParams.getMaxPrice()==null && > >> searchParams.getMinPrice()!=null) { > >> criteria.addGreaterOrEqualThan("price",searchParams.getMinPrice()); > >> } if(searchParams.getManufacturer() !=null && > >> searchParams.getModel()==null) { > >> criteria.addEqualTo("vehicle.model.manufacturerId",searchParams.getManuf > >> actu rer()); } if(searchParams.getModel() !=null) { > >> criteria.addEqualTo("vehicle.modelId",searchParams.getModel()); } > >> if(searchParams.getBodyStyle() != null) { > >> criteria.addEqualTo("vehicle.derivative.bodyStyleId",searchParams.getBod > >> ySty le()); } if(searchParams.getFuelType() != null) { > >> criteria.addEqualTo("vehicle.derivative.fuelId",searchParams.getFuelType > >> ()); } if(searchParams.getOrderBy() !=null) { > >> criteria.addOrderByAscending(searchParams.getOrderBy()); } > >> if(searchParams.getChannel()!=null && > >> !searchParams.getChannel().equals("")) { > >> criteria.addEqualTo("channel",searchParams.getChannel()); } > >> criteria.addEqualTo("status",searchParams.getStatus()); > >> criteria.addEqualTo("visibility",searchParams.getVisibility()); > >> criteria.addGreaterOrEqualThan("displayTo",new java.util.Date()); > >> criteria.addLessOrEqualThan("displayFrom",new java.util.Date()); > >> Query query = new > >> QueryByCriteria(BACVehicleDetails.class,criteria,true); Collection > >> c = broker.getCollectionByQuery(query); logger.debug("collection > >> size: "+c.size()); Iterator results = c.iterator(); ArrayList list > >> = new ArrayList(); while(results.hasNext()) { // perform cast now > >> to check that we've got the correct object type BACVehicleDetails > >> vDetails = (BACVehicleDetails) results.next(); list.add(vDetails); > >> } return list; } finally { if (broker!=null) { broker.close(); } } > >> > > >> sorry for the long code post it seems that when the cache is > >> filled up it works ok help this is stopping me going live with the > >> site :-( BTW I did a search on the dev list and noticed a bug > >> opened on the 23rd MAy but i can't find it now cheers Jin ----- > >> Original Message ----- From: "McCaffrey, John G." > >> <[EMAIL PROTECTED]> To: "'OJB Users List'" > >> <[EMAIL PROTECTED]> Sent: Friday, May 30, 2003 5:52 PM > >> Subject: RE: Limited collection returned > yes, I also noticed > >> that, and I tried pre-fetching, but that didn't help me > either. > > >> > so are you having the same problem then? You are only getting > >> one row back, > instead of many? > > (my collection is filled > >> properly with the right child elements, but I am > not getting all > >> of the parents that match the query, and the query is select > all > >> parents) > > can you see the SQL? I couldn't get P6Spy to work, so > >> I don't know what the > sql looks like. > > thanks for speaking up, > >> I wonder if anyone else has had/is having this > problem! > > -John > >> > > -----Original Message----- > From: Dan Hanley > >> [mailto:[EMAIL PROTECTED] > Sent: Friday, May 30, 2003 11:47 AM > > >> To: OJB Users List > Subject: RE: Limited collection returned > > > > >> John > Setting auto-retrieve = "false" works for me using JBoss & > >> mySQL *except* > that then I don't get any dependant ojbects loaded > >> :-( > > > -----Original Message----- > From: McCaffrey, John G. > >> [mailto:[EMAIL PROTECTED] > Sent: 30 May 2003 17:45 > To: > >> 'OJB Users List' > Subject: RE: Limited collection returned > > > I > >> have been having the same problem. It seems like the initial query > >> > actually gets all the rows, but the RSIterator only gives you one > >> at a time. > In my situation if I have 4 rows that match the > >> query, and I execute the > query once, I only get one row, each > >> additional time I execute the query I > get one more row (all > >> previous rows are also returned in the collection). > This is only > >> happening for a referenced collection, all of my other queries > > >> are working fine. I have no Idea what the deal is, I really hope > >> that > someone can help you. > > -John > > -----Original > >> Message----- > From: Ken Dempster > >> [mailto:[EMAIL PROTECTED] > Sent: Friday, May 30, 2003 > >> 11:38 AM > To: [EMAIL PROTECTED] > Subject: Limited collection > >> returned > > > Most everything works except I only get one out of > >> the know four row > objects from the table in my collection. I > >> want to get all the row > objects in the table. My question is why > >> am I only getting only one row > object? I am not sure what I am > >> doing something wrong. > > Here is how I have things setup. I have > >> set jboss 3.2 as suggested in > the deployment section of the > >> documentation and have jboss configured it > with data source to > >> connect to a DB2 database. I am requesting a > collection from a > >> client to a SessionBean that delegates to a > PersistenceBroker > >> instance. Basicly I am using the code in > PersistenceBrokerBean > >> as a template for my EJB. I do generate my own > > >> JdbcConnectionDescriptor and pass it to the ConnectionRepository > >> instead > of using the repository.xml to define my > >> JdbcConnectionDescriptor. > > My query looks as follows: > Query > >> query = new QueryByCriteria(Runner.class, null); > > Collection > >> list = > getPersistenceBrokerRemote().getCollectionByQuery(query); > >> > > > My ClassDescriptor of the collection of objects I am trying > >> to get is > defined in the repository_user.xml as follows : > > > >> <class-descriptor class="test.ojb.Runner" table="KENLIB.RUNNER"> > > >> > <field-descriptor name="m_id" column="ID" jdbc-type="INTEGER" > > >> primarykey="true" autoincrement="true"/> > > <field-descriptor > >> name="m_name" column="NAME" jdbc-type="VARCHAR"/> > > > >> <collection-descriptor name="m_times" > >> element-class-ref="test.ojb.Time"> > > <inverse-foreignkey > >> field-ref="m_id"/> > > </collection-descriptor> > > > >> </class-descriptor> > > <class-descriptor class="test.ojb.Race" > >> table="KENLIB.RACE"> > > <field-descriptor name="m_id" column="ID" > >> jdbc-type="INTEGER" > primarykey="true" autoincrement="true"/> > > > >> <field-descriptor name="m_location" column="LOCATION" > > >> jdbc-type="VARCHAR"/> > > <field-descriptor name="m_date" > >> column="DATE" jdbc-type="DATE"/> > > </class-descriptor> > > > >> <class-descriptor class="test.ojb.Time" table="KENLIB.RACE_TIME"> > > >> > <field-descriptor name="m_id" column="ID" jdbc-type="INTEGER" > > >> primarykey="true" autoincrement="true"/> > > <field-descriptor > >> name="m_runner_id" column="RUNNER_ID" > jdbc-type="INTEGER"/> > > > >> <field-descriptor name="m_race_id" column="RACE_ID" > > >> jdbc-type="INTEGER"/> > > <field-descriptor name="m_time" > >> column="TIME" jdbc-type="VARCHAR"/> > > <reference-descriptor > >> name="m_race" class-ref="test.ojb.Race"> > > <foreignkey > >> field-ref="m_race_id"/> > > </reference-descriptor> > > > >> </class-descriptor> > > > > > Ken Dempster > Programmer Analyst > > >> Vision Solutions, Inc. > > 17911 Von Karman Ave, 5th Floor > > >> Irvine, CA 92614 > UNITED STATES > > Tel: +1 (949) 253-6500 > Fax: > >> +1 (949) 253-6501 > Email: [EMAIL PROTECTED] > > >> <http://www.visionsolutions.com/> > Disclaimer - 5/30/2003 > The > >> contents of this e-mail (and any attachments) are confidential, may > >> be > privileged, and may contain copyright material of Vision > >> Solutions, Inc. or > third parties. You may only reproduce or > >> distribute the material if you are > expressly authorized by Vision > >> Solutions to do so. If you are not the > intended recipient, any > >> use, disclosure or copying of this e-mail (and any > attachments) > >> is unauthorized. If you have received this e-mail in error, > > >> please immediately delete it and any copies of it from your system > >> and > notify us via e-mail at [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] > > > >> --------------------------------------------------------------------- > >> 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] > > > > > > > --------------------------------------------------------------------- > 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]