openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Patrick Linskey (JIRA)" <>
Subject [jira] Commented: (OPENJPA-115) Bottleneck(s) with using OpenJPA in a Container-managed environment
Date Mon, 29 Jan 2007 20:12:49 GMT


Patrick Linskey commented on OPENJPA-115:

>From what I can tell, the locking is needed to guard the _brokers collection. (It is also
guarding the _transactional collection, but findExisting is always false in the OpenJPA codebase,
so that code is never used in OpenJPA.) In IMO, the guarding is overly-granular at best, and
unneeded at worst.

The _brokers collection provides us with a means to ensure that when we close a BrokerFactory,
all open Brokers are closed along with it. Additionally, we use a weak reference map here,
so we don't need to maintain the _brokers collection during Broker.close().

So, we have a number of options:

1. move the locking logic to be just around the code that maintains the _brokers collection

2. implement a concurrent Collection class that uses weak references, and eliminate all locking

3. create a configuration option (openjpa.CloseBrokersOnBrokerFactoryClose or something) that
controls whether or not OpenJPA tracks open brokers. This would allow default behavior to
be pro-active about cleanup, but also allow containers (which are presumably doing a good
job of resource clean-up) to bypass the overhead.

> Bottleneck(s) with using OpenJPA in a Container-managed environment
> -------------------------------------------------------------------
>                 Key: OPENJPA-115
>                 URL:
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>            Reporter: Kevin Sutter
>         Assigned To: Kevin Sutter
>            Priority: Critical
> Running some benchmarks against OpenJPA using the Sun Java System (SunOne) application
server.  Under load, we're not able to push the cpu to 100%.  The culprit seems to be the
lock and synchronization processing within AbstractBrokerFactory.newBroker(..).  According
to sections 5.9.1 and 5.9.2 in the JPA specification, it looks like OpenJPA is attempting
to do too much management of the created EntityManagers.  Within a Container-managed environment,
the Container takes care of the lifecycle of the EntityManagers.  So, there does not seem
to be a need to do the findBroker(..) invocation, nor is there a need to keep track of the
created EntityManagers (_brokers) so that they can be closed when the Factory is closed.
> Once we have verified these changes, there may be others that are needed.  But, we have
to get by this bottleneck first before going to the next layer...
> Kevin

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message