Sounds exactly like the JPA rules, so it makes sense to me. If there
are supposed to be differences in comparison to the JPA rules, I
suggest you explicitly call them out due the the extreme similarity
between the two in this text.
-dain
On Feb 9, 2007, at 2:00 PM, Craig L Russell wrote:
Please review and comment on this proposed change to the
specification, as part of the JDO 2.1 maintenance release.
<proposal>
(PersistenceManagerFactory interface)
11.3.1 Access via proxy
PersistenceManager getPersistenceManagerProxy();
Returns a PersistenceManager instance that is thread-safe, for use
in web and application servers and outside servers. The instance
returned can be used in a servlet init method to initialize a
static variable in a web server application. Similarly, it can be
used in a session bean to initialize a static variable in an
application server application.
If this method is used with a PersistenceManagerFactory that is
configured with TransactionType JTA, the proxy returned will
dynamically delegate to a PersistenceManager. The close method on
the proxy has no effect.
o If there is a PersistenceManager currently associated with the
thread’s transaction, the method in the proxy delegates to the
corresponding method in the PersistenceManager currently associated
with the thread’s transaction.
o If there is no PersistenceManager currently associated with the
thread’s transaction, a PersistenceManager is created and
associated with the thread’s transaction.
o If there is no transaction currently associated with the calling
thread, a new PersistenceManager is created with no transaction
association, and no possibility of beginning a transaction (in this
case, the begin method on the Transaction instance throws
JDOUserException). Persistent instances returned as a result of
queries can be used to navigate via nontransactional access,
regardless of whether a transaction is subsequently associated with
the thread. The PersistenceManager returned from methods
Query.getPersistenceManager, JDOHelper.getPersistenceManager, and
PersistenceCapable.getPersistenceManager return the actual
PersistenceManager to which the proxy delegated the original method.
If this method is used with a PersistenceManagerFactory that is
configured with TransactionType RESOURCE_LOCAL, the proxy returned
will dynamically delegate to the PersistenceManager currently
associated with an implementation-defined thread-local variable.
The thread-local variable is inherited by any threads created by
the thread that currently has a PersistenceManager associated with
it. The close method on the proxy clears the thread local variable
to null, and a subsequent invocation on the proxy will create a new
PersistenceManager.
</proposal>
Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:[EMAIL PROTECTED]
P.S. A good JDO? O, Gasp!