[jboss-dev] Oops, javax.naming.spi.* is dependent on Hashtable , this will make it difficult to change the JBoss jndi naming service to use ConcurrentHashMap instead of Hashtable...

Steve Ebersole steve at hibernate.org
Thu Jul 12 13:13:16 EDT 2007


Does JTA/JTS mandate that a UserTransaction reference obtained and held indefinitely understand the context in which calls against it are invoked?  And that it react accordingly?  

If so, then no big deal I can change this.  

As background, JTATransactionFactory is scoped via a SessionFactory.  So if JTATransactionFactory were to cache this reference, it would be cached for the duration of that SessionFactory (hence my question above).

The only reason I did it this way was perhaps a misunderstanding of how UserTransaction worked in this scenario (based on question above).  As always, my JTS knowledge pales in comparison to yours.  If I misunderstood the above please let me know...

> This just looks like a bug in Hibernate. 
> 
> It is caching the naming context in the JTATransactionFactory
> and then using it concurrently across threads, without 
> the required synchronization.
> 
> This probably only works by luck, because it is looking up in
> "java:comp" for the UserTransaction which is a read only context
> constructed at deployment time and is therefore unlikely 
> to have concurrency problems.
> 
> I'm sure if this class was changed to create a new initial context
> for each request you wouldn't see the contention, but that
> might not be very efficient either. Depends how often the
> isTransactionInProgress() is invoked.
> 
> I don't see why it isn't caching the UserTransaction instead anyway.
> It's probably because some people use Hibernate across transaction
> demarcation boundaries in at least dubious, if not broken ways. :-)





More information about the jboss-development mailing list