AFAIR? Jean-Louis, that's funny. Are you telling me that you're not using
or testing on 32-bit hardware any longer? :)

On a serious note...what platforms/hardware are TomEE test cases tested on?
Do you all test on a 'similar' platform to my 'current' production platform
(Windows Server 2003 32bit 4GB RAM)?



On Wed, Dec 12, 2012 at 9:44 AM, Jean-Louis MONTEIRO <jeano...@gmail.com>wrote:

> 32 Bits = 3,2GB max AFAIR
>
>
> 2012/12/12 Howard W. Smith, Jr. <smithh032...@gmail.com>
>
> > I really think this is hardware related issue. Why would 64bit 16GB RAM
> > development server (2 seconds for 2 emails) out perform 32bit 4GB RAM
> > production server (10 minutes for same 2 emails). ? :-)
> >
> > I am requesting newer better hardware now.
> > On Dec 12, 2012 4:21 AM, "Romain Manni-Bucau" <rmannibu...@gmail.com>
> > wrote:
> >
> > > Hi,
> > >
> > > please reproduce it in a small maven project with a unit test
> > >
> > > this is tested and we never had such an issue so opening a jira will
> > > not help without any sample to reproduce it IMO
> > >
> > > Romain Manni-Bucau
> > > Twitter: @rmannibucau
> > > Blog: http://rmannibucau.wordpress.com/
> > > LinkedIn: http://fr.linkedin.com/in/rmannibucau
> > > Github: https://github.com/rmannibucau
> > >
> > >
> > >
> > > 2012/12/12 Howard W. Smith, Jr. <smithh032...@gmail.com>:
> > > > After implementing 'workaround' option # 1 in my previous email
> > (below),
> > > > the test results were really really bad. :(
> > > >
> > > > for 4 emails, it took 30 minutes to insert the data into the
> database,
> > > and
> > > > then it seemed as though the single @Stateless EJB held onto the
> > > > transaction, even after the @Schedule method, getEmails(), was done
> and
> > > > exited.
> > > >
> > > > Should I file a JIRA? I would assume that the @Stateless bean would
> > 'let
> > > > go' of the transaction, but transaction remained opened. Maybe, I
> > should
> > > > have issued a entityManager.flush() after completing each email, but
> I
> > > did
> > > > flush() a lot throughout the process.
> > > >
> > > > Please note that this machine is Windows Server 2003 32bit 4GB RAM,
> and
> > > it
> > > > takes 10 to 15 minutes to insert data from 2 emails (which is a very
> > > small
> > > > amount of data embedded in the email). I could not select any data
> from
> > > > database after login. I had to shutdown TomEE.
> > > >
> > > > Also, note, when I originally developed this, one @Stateless EJB
> with 1
> > > > entity manager, it took 2 seconds on Windows Server 2008 64bit 16GB
> > RAM,
> > > > and it did not hold the transaction (or database locks). also, i
> could
> > > > select data afterwards.
> > > >
> > > > I still need to try what David mentioned, but it's been an
> all-nighter
> > > for
> > > > me, so i need to stop right here for now.
> > > >
> > > > I think I will open a JIRA for this.
> > > >
> > > >
> > > > On Tue, Dec 11, 2012 at 10:10 PM, Howard W. Smith, Jr. <
> > > > smithh032...@gmail.com> wrote:
> > > >
> > > >> Shaking my head... test results were not good at all.
> > > >>
> > > >> 1. @StatelessEJB EmailStatelessBean has @Schedule getEmails()
> > > >> 2. @EmailStatelessBean has multiple @EJB references to @Stateless
> > > >> (sessionfacade) classes that are the DAO classes
> > > >> 3. EmailStatelessBean gets invoked when triggered by @Schedule
> > > >> 4. EmailStatelessBean execution locks the tables, still, and locks
> up
> > > the
> > > >> entire app, and seems to take longer...since endusers (myself) are
> > > making
> > > >> requests against database (and web app).
> > > >> 5. Last but not least, EmailStatelessBean failed to commit the
> > changes;
> > > >> transaction rolled back for EmailStatelessBean as well as enduser
> > > requests.
> > > >>
> > > >> So, my workaround options include the following:
> > > >>
> > > >> 1. EmailStatelessBean, when invoked by @Schedule method, will check
> > the
> > > >> CDI @ApplicationScoped bean (ApplicationScopeBean), and see if any
> > > endusers
> > > >> are logged in; i developed a sessionInfo class that is updated
> > everytime
> > > >> enduser does a HTTP request; if any endusers are logged in, then I
> can
> > > use
> > > >> Atmosphere (PrimeFaces Push) to push a message to the endusers,
> > > notifying
> > > >> them to 'please logout, as there are customer requests pending that
> > > need to
> > > >> be retrieved and inserted into the web app's database', and
> > > >> EmailStatelessBean will 'return' (or exit) and not perform the
> > > operation.
> > > >> This way, everytime @Schedule invokes the bean method, it will
> > continue
> > > to
> > > >> check for an available time to perform the
> > > >> get-emails-and-insert-into-database operation. Also, I'll set when
> > > >> EmailStatelessBean begins the operation, then I'll set flag on
> > > >> @ApplicationScoped bean (insertingCustomerRequestsIntoDatabase =
> > true);
> > > >> this flag will be checked when endusers attempt to login web app,
> and
> > > >> FacesMessage will be displayed, Please login a few minutes later as
> > > system
> > > >> is inserting customer requests into database.
> > > >>
> > > >> 2. Another option would be to send a message to all clients via
> > > Atmosphere
> > > >> (PrimeFaces Push), and the UI will be locked immediately, and user
> > will
> > > be
> > > >> required to wait.
> > > >>
> > > >> Honestly, I don't like either of these approaches, but I think the
> > > >> endusers will accept the 1st option (above). If I go with 1st
> > approach,
> > > >> then I may revert back to single transaction, which will complete
> the
> > > >> entire operation much faster than multiple transactions (via
> multiple
> > > EJB
> > > >> DAO classes).
> > > >>
> > > >> As you can see, I don't have enough experience locking database for
> > > such a
> > > >> batch operation as this. I know the endusers want the customer
> > requests
> > > to
> > > >> show up into the database 'immediately', and they want to know when
> it
> > > >> happens. Right now, this is my only option until I redesign the
> > business
> > > >> website to interface directly with the web app. right now, the web
> app
> > > is
> > > >> 'only' used by 'personnel' (the owners of the business...which is my
> > > >> family). hahaha :)
> > > >>
> > > >> They love the app (honestly, they liked the speed and reliability of
> > the
> > > >> web app when it was on Glassfish), but I'm doing all i can to win
> them
> > > over
> > > >> with TomEE. :)
> > > >>
> > > >> Your thoughts, please.
> > > >>
> > > >> Thanks,
> > > >> Howard
> > > >>
> > > >>
> > > >>
> > > >> On Tue, Dec 11, 2012 at 9:23 PM, Howard W. Smith, Jr. <
> > > >> smithh032...@gmail.com> wrote:
> > > >>
> > > >>> Done. testing now and watching JVM. I need to read that article you
> > > >>> shared, so i can learn a bit about heap dump. I see the heap dump
> > > button
> > > >>> there, but never used it 'yet'. :)
> > > >>>
> > > >>>
> > > >>> On Tue, Dec 11, 2012 at 3:53 PM, Howard W. Smith, Jr. <
> > > >>> smithh032...@gmail.com> wrote:
> > > >>>
> > > >>>> I think I'm going to avoid the single transaction (via single
> > > @Stateless
> > > >>>> EJB) approach, and use other @Stateless EJBs to make the database
> > > table
> > > >>>> updates. This approach works everywhere else throughout the web
> app.
> > > >>>>
> > > >>>> I'll just keep the @Stateless EJB for the purpose of being invoked
> > by
> > > >>>> @Schedule, and it will be the 'driver', and call the
> > > >>>> already-defined-and-already-used other @Stateless EJBs that
> contain
> > > >>>> Persistent context and entity manager to update tables, so this
> > > clearly
> > > >>>> will be a multiple transaction commit, which should 'not' lock any
> > > tables.
> > > >>>> :)
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>> On Tue, Dec 11, 2012 at 3:21 PM, Howard W. Smith, Jr. <
> > > >>>> smithh032...@gmail.com> wrote:
> > > >>>>
> > > >>>>> Prior to adding this @Stateless EJB (that's invoked via @Schedule
> > > every
> > > >>>>> 10 minutes), my JSF web app has been running 100% okay without
> any
> > > >>>>> deadlocks or anything else like that.
> > > >>>>>
> > > >>>>> So, is it okay if I just add optimistic locking, em.lock(entity,
> > > >>>>> LockType.Optimistic) before any/all em.persist(...) that I have
> in
> > > the
> > > >>>>> @Stateless EJB?
> > > >>>>>
> > > >>>>> JSF web app is working okay, because the JSF components call
> > multiple
> > > >>>>> @Stateless EJB that usually do any of the following, SELECT,
> > UPDATE,
> > > >>>>> DELETE,  on one table at time.
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>> On Tue, Dec 11, 2012 at 2:35 PM, Howard W. Smith, Jr. <
> > > >>>>> smithh032...@gmail.com> wrote:
> > > >>>>>
> > > >>>>>> You're absolutely right, David. Thanks for the response.
> > > >>>>>>
> > > >>>>>> It is a transaction issue and the @Stateless EJB is holding a
> > > >>>>>> transaction open and writing into 6 to 10 tables in a single
> > > database,
> > > >>>>>> which is also the database accessed by JSF components (by
> > > endusers). The
> > > >>>>>> @Stateless EJB is on a timer ( @Schedule), checks email server
> for
> > > incoming
> > > >>>>>> requests from customers, and takes that data and inserts it into
> > > database,
> > > >>>>>> so endusers don't have to manually enter the data (that they
> > > receive from
> > > >>>>>> these formmail results).
> > > >>>>>>
> > > >>>>>> Below is the exception that I saw maybe an hour or two ago, and
> I
> > > >>>>>> confirmed that it's a locking/transaction issue, and from the
> > > stacktrace,
> > > >>>>>> it seems as though the JSF components cannot access the table,
> > that
> > > is
> > > >>>>>> evidently locked by @Stateless EJB. The @Stateless @EJB updated
> > all
> > > tables
> > > >>>>>> on my faster/dev/test server on average of 1 to 2 seconds,
> and/so
> > > in my
> > > >>>>>> opinion, the data is not that much at all, maybe a few kbytes of
> > > data being
> > > >>>>>> inserted into the database. Anyway, I've been reading up on
> > > pessismistic
> > > >>>>>> and optimistic locking, and that's where I was in my reading
> > before
> > > I
> > > >>>>>> noticed your email. I really don't know what the database or JPA
> > is
> > > >>>>>> defaulting to, because honestly, I have no code that specifies
> any
> > > locks.
> > > >>>>>> Recently, I only added query hint (readonly) to JPA queries.
> > > Personally, I
> > > >>>>>> feel as though I can use 'no locking' for these inserts, since
> > this
> > > is
> > > >>>>>> brand new data, but the JSF components may be locking the
> > > entites/tables
> > > >>>>>> during simple queries (SELECT statements).  Feel free to change
> > this
> > > >>>>>> email/topic to a more suitable topic/subject, if necessary. :)
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>
> > > >>>
> > > >>
> > >
> >
>
>
>
> --
> Jean-Louis
>

Reply via email to