I think we should instead change the exception from NamingException to
NameNotFoundException in WildFly, which is the exception type thrown by the Java EE 7 RI.
I’ve tested such change and introduces no issues in the testsuite. And after such change
Seam seems to work fine, at least the build/test issue is gone for the branch referenced
in the issue.
If nobody disagrees I will create an issue and submit the PR.
—E
On 27 Feb 2014, at 13:32, Scott Marlow <smarlow(a)redhat.com> wrote:
On 02/26/2014 08:05 PM, Scott Marlow wrote:
> On 02/26/2014 11:04 AM, Scott Marlow wrote:
>> On 02/26/2014 02:02 AM, Jaikiran Pai wrote:
>>>>> Right the real question is what is Seam using the UT for. There is
>>> only one method on that is “safe” with CMT (getting the status), and
>>> that isn’t all that useful.
>>>
>>> Looking at that stacktrace [1] and the code in Seam [2], it appears that
>>> Seam wants to register a transaction synchronization if a transaction is
>>> active. Unfortunately, a lot of libraries (including Seam) use the
>>> UserTransaction API (UserTransaction.getStatus()) to check if a
>>> transaction is active. The right way to do it is using the
>>> TransactionSynchronizationRegistry which is available and portable (as
>>> mandated by spec) under the java:comp/TransactionSynchronizationRegistry
>>> JNDI name. The TransactionSynchronizationRegistry has a
>>> getTransactionStatus() method which can be used to check the transaction
>>> status in the current (thread) context
>>>
http://docs.oracle.com/javaee/5/api/javax/transaction/TransactionSynchron....
>>> Usage of this API is rarely explained and applications/libraries keep
>>> using UserTransaction instead.
>>>
>>> To answer the other question as to why this started showing up now and
>>> not in earlier versions, the code in Seam tries to deal with this exact
>>> situation by catching a specific (NameNotFoundException) while doing a
>>> UserTransaction lookup [3]. Notice that in that code [3], it doesn't
>>> deal with any other exception other than NameNotFoundException although
>>> that code does realize that using UserTransaction for what it's doing
>>> can run into problems (the comments there indicate something along those
>>> lines). So my guess is that, in previous version of AS, we used to throw
>>> a NameNotFoundException in this specific case and now we are throwing a
>>> IllegalStateException [4]. Maybe in WildFly, to prevent existing
>>> libraries like Seam from breaking, we could just change this bit to
>>> throw NameNotFoundException instead of IllegalStateException (although I
>>> don't remember if the TCK tests for the exact exception type in this
case).
>>
>> Should we catch the ISE somewhere in [5] and throw a
>> NameNotFoundException (with the ISE as the cause) instead of the ISE? I
>> wonder if we did that before in the AS5/AS6 naming code.
>
> A better question is whether we could throw a NameNotFoundException
> instead of a NamingException.
The above change would help Seam applications to work on WildFly 8.0.1.
If we change Seam to catch a NamingException instead of
NameNotFoundException, the newer Seam release, would work with WildFly
8.0.0 (should also work against earlier app server versions I think).
>
>>
>> [5]
>>
>> at
>>
org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:142)
>> at
>>
org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:81)
>> at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:202)
>> at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:179)
>> at
>>
org.jboss.as.naming.InitialContext$DefaultInitialContext.lookup(InitialContext.java:235)
>> at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:188)
>> at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:184)
>> at javax.naming.InitialContext.lookup(InitialContext.java:411)
>> [rt.jar:1.7.0_51]
>> at javax.naming.InitialContext.lookup(InitialContext.java:411)
>> [rt.jar:1.7.0_51]
>> at
>>
org.jboss.seam.transaction.Transaction.getUserTransaction(Transaction.java:82)[jboss-seam.jar:2.2.2.Final]
>>
>>>
>>>
>>> [1]
>>>
>>> at org.jboss.seam.transaction.Transaction.instance(Transaction.java:39)
[jboss-seam.jar:2.2.2.Final]
>>> at
org.jboss.seam.persistence.ManagedPersistenceContext.joinTransaction(ManagedPersistenceContext.java:120)
[jboss-seam.jar:2.2.2.Final]
>>> at
org.jboss.seam.persistence.ManagedPersistenceContext.getEntityManager(ManagedPersistenceContext.java:112)
[jboss-seam.jar:2.2.2.Final]
>>>
>>>
>>> [2]
http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/...
>>>
>>> [3]
http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/...
>>>
>>> [4] Caused by: java.lang.IllegalStateException: JBAS014237: Only session and
message-driven beans with bean-managed transaction demarcation are allowed to access
UserTransaction
>>>
>>> P.S: A big congratulations on the WildFly 8.0 Final release! :) Although
haven't posted here so far, I've been lurking this list. Good luck with the next
releases.
>>
>> Big congratulations to you also Jaikiran, you are always part of the
>> team! :)
>>
>> Thanks for helping with this issue!
>>
>> Scott
>>
>>>
>>>
>>> -Jaikiran
>>>
>>> _______________________________________________
>>> wildfly-dev mailing list
>>> wildfly-dev(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/wildfly-dev
>>>
>>
>> _______________________________________________
>> wildfly-dev mailing list
>> wildfly-dev(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/wildfly-dev
>>
>
> _______________________________________________
> wildfly-dev mailing list
> wildfly-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/wildfly-dev
>
_______________________________________________
wildfly-dev mailing list
wildfly-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/wildfly-dev