[ 
https://issues.apache.org/jira/browse/TOMEE-2050?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16034495#comment-16034495
 ] 

Svetlin Zarev edited comment on TOMEE-2050 at 6/2/17 10:55 AM:
---------------------------------------------------------------

Servlet:

{code}
@WebServlet("/userTransaction")
public final class CdiTransactionaltest extends HttpServlet {
    @Resource
    UserTransaction transaction;

    @Inject
    TransactionalBean transactionalBean;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
        final PrintWriter out = resp.getWriter();
        resp.setContentType("text/plain");

//other test cases here       

        try {
            out.println("Testing with UserTransaction inside transactional 
bean...");
            transactionalBean.testWithTxRequiredAndUserTransaction();
        } catch (Exception ex) {
            out.println("Exception: " + ex);
            ex.printStackTrace(out);
        }
    }
}
{code}

Transactional bean:

{code}
@Default
public class TransactionalBean {

    @Resource
    UserTransaction userTransaction;

//other test methods here

    @Transactional(TxType.REQUIRED)
    public void testWithTxRequiredAndUserTransaction() throws Exception {
        userTransaction.begin();
        userTransaction.commit();
    }
}
{code}

Stack trace from test case:
{code}
Testing with UserTransaction inside transactional bean...
Exception: javax.transaction.NotSupportedException: Nested Transactions are not 
supported
javax.transaction.NotSupportedException: Nested Transactions are not supported
        at 
org.apache.geronimo.transaction.manager.TransactionManagerImpl.begin(TransactionManagerImpl.java:157)
        at 
org.apache.geronimo.transaction.manager.TransactionManagerImpl.begin(TransactionManagerImpl.java:152)
        at 
org.example.TransactionalBean.testWithTxRequiredAndUserTransaction(TransactionalBean.java:43)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at 
org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
        at 
org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
        at 
org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:67)
        at 
org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
        at 
org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at 
org.apache.webbeans.component.InterceptorBean.intercept(InterceptorBean.java:136)
        at 
org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:63)
        at 
org.apache.webbeans.intercept.DefaultInterceptorHandler.invoke(DefaultInterceptorHandler.java:139)
        at 
org.example.TransactionalBean$$OwbInterceptProxy0.testWithTxRequiredAndUserTransaction(org/example/TransactionalBean.java)
        at org.example.CdiTransactionaltest.doGet(CdiTransactionaltest.java:81)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
{code}

Attaching zip with sample app (war + source)


was (Author: svetlinzarev):
Servlet:

{code}
@WebServlet("/userTransaction")
public final class CdiTransactionaltest extends HttpServlet {
    @Resource
    UserTransaction transaction;

    @Inject
    TransactionalBean transactionalBean;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
        final PrintWriter out = resp.getWriter();
        resp.setContentType("text/plain");

//other test cases here       

        try {
            out.println("Testing with UserTransaction inside transactional 
bean...");
            transactionalBean.testWithTxRequiredAndUserTransaction();
        } catch (Exception ex) {
            out.println("Exception: " + ex);
            ex.printStackTrace(out);
        }
    }
}
{code}

Transactional bean:

{code}
@Default
public class TransactionalBean {

    @Resource
    UserTransaction userTransaction;

//other test methods here

    @Transactional(TxType.REQUIRED)
    public void testWithTxRequiredAndUserTransaction() throws Exception {
        userTransaction.begin();
        userTransaction.commit();
    }
}
{code}

Attaching zip with sample app (war + source)

> JTA 1.2 compliance: Calling UserTransaction methods from @Transactional bean
> ----------------------------------------------------------------------------
>
>                 Key: TOMEE-2050
>                 URL: https://issues.apache.org/jira/browse/TOMEE-2050
>             Project: TomEE
>          Issue Type: Bug
>            Reporter: Svetlin Zarev
>         Attachments: sample.zip
>
>
> JTA 1.2, section 3.7:
> {code}
> If an attempt is made to call any method of the UserTransaction interface 
> from within the scope of a bean or method annotated with @Transactional and a 
> Transactional.TxType other than NOT_SUPPORTED or NEVER, an 
> IllegalStateException must be thrown.
> {code}
> Instead TomEE throws:
> {code}
> 13:38:03.710 [http-nio-8080-exec-7] ERROR java.lang.Throwable - 
> javax.transaction.NotSupportedException: Nested Transactions are not supported
> 13:38:03.713 [http-nio-8080-exec-7] ERROR java.lang.Throwable -         at 
> org.apache.geronimo.transaction.manager.TransactionManagerImpl.begin(TransactionManagerImpl.java:157)
> 13:38:03.716 [http-nio-8080-exec-7] ERROR java.lang.Throwable -         at 
> org.apache.geronimo.transaction.manager.TransactionManagerImpl.begin(TransactionManagerImpl.java:152)
> ...
> ...
> ...
> 13:38:03.737 [http-nio-8080-exec-7] ERROR java.lang.Throwable -         at 
> org.apache.webbeans.intercept.AbstractInvocationContext.directProceed(AbstractInvocationContext.java:113)
> 13:38:03.758 [http-nio-8080-exec-7] ERROR java.lang.Throwable -         at 
> org.apache.webbeans.intercept.AbstractInvocationContext.proceed(AbstractInvocationContext.java:106)
> 13:38:03.761 [http-nio-8080-exec-7] ERROR java.lang.Throwable -         at 
> org.apache.webbeans.intercept.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:67)
> 13:38:03.766 [http-nio-8080-exec-7] ERROR java.lang.Throwable -         at 
> org.apache.openejb.cdi.transactional.InterceptorBase.intercept(InterceptorBase.java:67)
> 13:38:03.770 [http-nio-8080-exec-7] ERROR java.lang.Throwable -         at 
> org.apache.openejb.cdi.transactional.RequiredInterceptor.intercept(RequiredInterceptor.java:35)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to