[jboss-as7-dev] Issue with access to java:comp/UserTransaction from non EE threads

Stuart Douglas stuart.w.douglas at gmail.com
Thu Jun 2 21:23:55 EDT 2011


On 03/06/2011, at 7:48 AM, David M. Lloyd wrote:

> On 06/02/2011 04:13 PM, Lincoln Baxter, III wrote:
>> Hi Guys,
>> 
>> I've written a little app (using Seam 3, RichFaces, a bunch of our
>> projects, but namely Seam Persistence.) While working with Scott Marlow,
>> we discovered that the reason for this failure:
>> http://pastebin.com/KC7v90YK, is because the thread attempting to access
>> the UserTransaction is outside of the EE threads: http://pastie.org/2010007
>> 
>> This works well on JBoss AS6, but does not on AS7. Wondering if we
>> should loosen up the access to the UserTransaction to anonymous/non-EE
>> threads.
> 
> It's not a question of "loosening up".  The problem is that outside of 
> EE, there is no "comp", it simply doesn't exist.  This is not a 
> draconian policy created to torture users, it's just a reality of what 
> is necessary to implement Java EE these days.
> 
> The "comp" namespace is so-named because it corresponds to a 
> "component", such as an EJB or servlet (though due to historical quirks, 
> "comp" is shared among all servlets in a WAR).  If you're not in a 
> context associated with a component, then the AS cannot know which 
> component's "comp" namespace to examine.
> 
> Java EE really has no provision to support creation of threads from a 
> servlet or EJB, but nevertheless the real right answer is to get your 
> thread associated with the component from which you want to look up 
> UserTransaction, or get the data which needs a transaction back to an EE 
> thread.
> 
> Note that in your example the thread is created by "twitter4j".  The 
> only remotely spec-complaint options you currently have are to use 
> JMS+MDB (overkill for sure) or JCA inflow (only somewhat overkill) with 
> your own custom RA to talk to a custom MDB type.
> 
> In 7.1 we will have app client support, so when that time comes perhaps 
> you could treat your handler as a client and perform direct invocations 
> on your EJBs that way.
> 
> That's all the ideas I have right now...
> -- 
> - DML

The only other option I can think of is to create a default java:comp NamespaceSelector, that just has java:comp/UserTransaction bound. I would not really want to do that though unless this is something that affects a lot of people.

Stuart


> _______________________________________________
> jboss-as7-dev mailing list
> jboss-as7-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/jboss-as7-dev




More information about the jboss-as7-dev mailing list