Hi all,

It is my first post here, usually I would use StackOverflow, but there is
almost none questions/ answers tagged with DeltaSpike.

Sorry for wasting your precious time. But I'm struggling for a couple of
hours with not working @Transactional interceptor from
*deltaspike-jpa-module* inside my own interceptor.

Details:
My own interceptor: @DetectIntegrityConstraintViolationInterceptor needs to
have injected an EntityManager instance, but unfortunately I'm always
getting "*java.lang.IllegalStateException: Transaction not active*" inside
this interceptor (injection of EntityManager works fine, but transaction is
not started automatically).

Do somebody know why?

My use case is quite simple: one service, marked with @Transactional, and
its one method is also annotated with
@DetectIntegrityConstraintViolationInterceptor.

I've been trying blindly a couple of combinations, but none works:
  * I've marked also my interceptor with @Transactional
  * I've marked also both my Interceptor and InterceptorBinding with
@Transactional

Simplified code:

@ManagedBean // make it a CDI bean
> @Interceptor
> @DetectIntegrityConstraintViolation
> public class DetectIntegrityConstraintViolationInterceptor {
>
>     @Inject
>     private EntityManager em;
>
>     @AroundInvoke
>
    // @Transactional     // ALSO BLINDLY TRIED THIS, but no luck
>
    public Object processInvocation(InvocationContext ctx)
>             throws Exception {
>         Object o = null;
>         try {
>             o = ctx.proceed();
>             em.flush();          // THIS CAUSES EXCEPTION, AS TRANSACTION
> DOESN'T EXIST
>         } catch (PersistenceException ex) {
>             // ....
>         }
>         return o;
>     }
>
}
>

Service class looks like:

import org.apache.deltaspike.jpa.api.transaction.Transactional;
>

>
@Transactional
> public class MyServiceBean implements MyService {
>
>     @Inject
>     EntityManager em;
>
>     @DetectIntegrityConstraintViolation
>     public ResponseEntity<User> createUser(User user) {
>         em.persist(user);
>     }
> }
>

Tip: EntityManager was tried both: @TransactionScoped and @RequestScoped -
result similar, only message was a bit different ;-)

Any clues?
Ps. I'm sorry, if above code is not readable, bu I don't know how to format
code inside an email.

Libs versions used:
 * deltaspike-jpa-module-api 1.4.1
 * weld-servlet-core  2.2.0.Final
 * JDK 1.7

Kind regards
Greg Demecki

Reply via email to