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

Reply via email to