Have you looked at the server.log? What queries are being executed? Don't post the whole file. Give us a summary.
-dain BTW: there is a difference between doesn't work and is not fast enough for me. Frank Morton wrote: > Maybe I should try a different tactic..... > > Does anyone have an entity bean that has a method that > returns a Collection that performs well with ~200 elements > in the Collection? Reaching it through a session bean is > fine. If so, would you share the source? I'm beginning to > believe that no one actually has done this successfully. > > Still working on this without success. I have tried all > suggestions, including wrapping it with a UserTransaction, > but still didn't make any difference. > > Still wanting cmp to work.............. > > >>I think I'm close.Thanks to all who have given advice. If I get >>this going, I'll be glad to write up the results, which based on >>dain's comments, others are also asking about. Here are the >>details (using 3.0.0.RC1): >> >>I have two cmp entity beans: Container and Attribute. >> >>I also have a stateless session bean called ContainerControl. In this >>class, there is a method called findByPrimaryKeyMap. This method >>does a findByPrimaryKey on a Container. It also does a >>findByContainerId, which returns a Collection of ~ 200 elements >>on Attribute, causing the performance problem. The findByPrimaryKeyMap >>method returns what I call a ContainerMap, which encapsulates >>the two find results as well as build a lookup table of the Collection. >> >>I have a web application that does the following: >> >>ContainerControl containerControl = Factory.getContainerControl(); >>ContainerMap containerMap = >> > containerControl.findByPrimaryKeyMap(id,"name"); > >>CollectionMap attributeMap = containerMap.getAttributeMap(); >> >>Basically looks up the session bean, does the find and gets the results >>out of the ContainerMap. When the ContainerMap is built, it iterates >>the Collection, taking over 100 ms per element. Based on that, each >>step must still think it is a transaction. >> >>Based on the ejb-jar below, I think the session bean ought to be a single >>transaction, but it isn't. The ContainerControl ejb-jar.xml files looks >>like: >> >> >><?xml version="1.0" encoding="UTF-8"?> >> >><ejb-jar> >> <description>Container Session Beans</description> >> <display-name>Container Session Beans</display-name> >> <enterprise-beans> >> <session> >> <ejb-name>ContainerControl</ejb-name> >> >><home>com.base2inc.bean.session.container.ContainerControlHome</home> >> >><remote>com.base2inc.bean.session.container.ContainerControl</remote> >> >> > <ejb-class>com.base2inc.bean.session.container.ContainerControlBean</ejb-cla > >>ss> >> <session-type>Stateless</session-type> >> <transaction-type>Bean</transaction-type> >> </session> >> <session> >> <ejb-name>ContainerValue</ejb-name> >> > <home>com.base2inc.bean.session.container.ContainerValueHome</home> > > <remote>com.base2inc.bean.session.container.ContainerValue</remote> > >> > <ejb-class>com.base2inc.bean.session.container.ContainerValueBean</ejb-class > >> <session-type>Stateless</session-type> >> <transaction-type>Bean</transaction-type> >> </session> >> </enterprise-beans> >> >> <assembly-descriptor> >> <container-transaction> >> <method> >> <ejb-name>ContainerControl</ejb-name> >> <method-name>*</method-name> >> </method> >> <trans-attribute>Required</trans-attribute> >> </container-transaction> >> </assembly-descriptor> >></ejb-jar> >> >>Any idea will be tried. Thanks. >> >> >> >>>You must use a transaction for your unseen session bean that is >>> > accessing > >>>the entity beans. Otherwise, as Dain says, everytime you change a bean >>> > in > >>>the collection, it creates a transaction, reads ahead 1000 or so >>> >>(depending >> >>>upon read-ahead limit) then when you edit the bean, it commits the >>>transaction, which loses all the read-ahead information. Then as you >>> > edit > >>>the next bean, it starts the whole process over again. >>> >>>If your session bean was called AttributeManager, you would use a >>>container-transaction like the following in the assembly-descriptor >>> >>element. >> >>>This way, the transactions on the Attribute bean are encompassed by the >>>transaction on the session bean method that is iterating over the >>>collection. >>> >>> <container-transaction> >>> <method> >>> <ejb-name>AttributeManager</ejb-name> >>> <method-name>*</method-name> >>> </method> >>> <trans-attribute>Required</trans-attribute> >>> </container-transaction> >>> >>>Michael >>> >>> >>>>-----Original Message----- >>>>From: Frank Morton [mailto:[EMAIL PROTECTED]] >>>>Sent: Tuesday, April 23, 2002 11:50 AM >>>>To: [EMAIL PROTECTED] >>>>Subject: Re: [JBoss-user] CMP: Iterate Collection Performance Killer >>>> >>>> >>>> >>>>>Use a transaction or turn off read ahead. You are basically reading >>>>>ahead data, tossing the read-ahead information out, and >>>>> >>>>then repeating. >>>> >>>>>-dain >>>>> >>>>Thanks for your response. >>>> >>>>Sorry for my confusion, but I am. Your doc states to use <read-ahead> >>>>with the <strategy>on-load</strategy> for this exact case, but doesn't >>>>seem to make a difference at this point. You are saying strategy=none >>>>is the right thing to do? I tried that, too, which doesn't >>>>appear to make >>>>any difference. Please clarify this. There is a lot of contradictory >>>>info on the web about this. I also tried setting <read-ahead> in >>>>standardjaws.xml to true and false, neither of which seemed to >>>>make any difference. Seems no matter what I do, I get the >>>>same behavior, so I must be missing something. >>>> >>>>While I'm irritating you, can you explain exactly how or refer me to >>>>someplace that explains exactly how to use a transaction to speed up >>>>reading Collections. >>>> >>>>Thanks. I'm guessing I'm not the only one that needs to know >>>>about this. >>>> >>>>Frank >>>> >>>>Here is my ejb-jar.xml file in case it is of use to you: >>>> >>>><?xml version="1.0" encoding="UTF-8"?> >>>> >>>><ejb-jar> >>>> <description>Attribute Management</description> >>>> <display-name>Attribute Management</display-name> >>>> >>>> <enterprise-beans> >>>> <entity> >>>> <description>Attribute</description> >>>> <ejb-name>Attribute</ejb-name> >>>> >>>><local-home>com.base2inc.bean.entity.attribute.AttributeHome</ >>>> >>>local-home> >>> >>>><local>com.base2inc.bean.entity.attribute.Attribute</local> >>>> >>>><ejb-class>com.base2inc.bean.entity.attribute.AttributeBean</e >>>>jb-class> >>>> <persistence-type>Container</persistence-type> >>>> <prim-key-class>java.lang.Long</prim-key-class> >>>> <reentrant>False</reentrant> >>>> <cmp-version>2.x</cmp-version> >>>> >>>><cmp-field><field-name>id</field-name><jdbc-type>BIGINT</jdbc- >>>>type></cmp-fie >>>>ld> >>>> >>>><cmp-field><field-name>containerId</field-name><jdbc-type>BIGI >>>>NT</jdbc-type> >>>></cmp-field> >>>> >>>><cmp-field><field-name>containerType</field-name></cmp-field> >>>> <cmp-field><field-name>name</field-name></cmp-field> >>>> <cmp-field><field-name>value</field-name></cmp-field> >>>> <primkey-field>id</primkey-field> >>>> <read-ahead> >>>> <strategy>on-load</strategy> >>>> <limit>255</limit> >>>> <cache-size>1000</cache-size> >>>> </read-ahead> >>>> </entity> >>>> </enterprise-beans> >>>> >>>> <assembly-descriptor> >>>> <container-transaction> >>>> <method> >>>> <ejb-name>Attribute</ejb-name> >>>> <method-name>*</method-name> >>>> </method> >>>> <trans-attribute>Required</trans-attribute> >>>> </container-transaction> >>>> </assembly-descriptor> >>>> >>>></ejb-jar> >>>> >>>>Frank Morton wrote: >>>> >>>>>>Using 3.0.0RC1 with PostgreSQL underneath. Just converted >>>>>>to using a Local Interface, but didn't make as much performance >>>>>>difference as I hoped. >>>>>> >>>>>>I have a case where I need to iterate a Collection resulting from >>>>>>a finder method with an entity bean. Since the collection >>>>>> >>>>might have >>>> >>>>>>200 items, performance is very bad iterating the Collection. >>>>>>(I do have an index on the field used for finding). >>>>>> >>>>>>Using a Collection in the first place is what I would like to do >>>>>>since some of the elements require an update. But, since I >>>>>>know I will be looking at each item in the Collection, is there >>>>>>some way to fetch the content of the collection as a group >>>>>>prior to iterating instead of getting killed by the performance >>>>>>of fetching one at a time? >>>>>> >>>>>> >> >> >>_______________________________________________ >>JBoss-user mailing list >>[EMAIL PROTECTED] >>https://lists.sourceforge.net/lists/listinfo/jboss-user >> >> > > > _______________________________________________ > JBoss-user mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/jboss-user > _______________________________________________ JBoss-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-user