deltaspike-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gerhard Petracek <gerhard.petra...@gmail.com>
Subject Re: Exception "Transaction not active" inside my own interceptor combined with @Transactional
Date Sat, 19 Sep 2015 20:25:16 GMT
hi greg,

#1 please have a look at e.g. [1] and [2] to see a valid (and even simpler)
way to implement a cdi-interceptor
     (the source-code of ds itself is also a nice reference to see valid
usages of the cdi-api)
#2 check if your stereotype-annotation is correct (you can compare it e.g.
with [3]).
#3 use e.g. @Priority(Interceptor.Priority.APPLICATION) for your
interceptors
     (per default ds-interceptors get called before interceptors with that
priority, but you could even change that via config.)

fyi (since you are using weld anyway):
you can have a look at their documentation. it's quite detailed and nice to
read.

regards,
gerhard

[1]
https://github.com/CDIatWork/IdeaFork/blob/master/ideafork_core/src/main/java/at/irian/cdiatwork/ideafork/core/impl/monitoring/Monitored.java
[2]
https://github.com/CDIatWork/IdeaFork/blob/master/ideafork_core/src/main/java/at/irian/cdiatwork/ideafork/core/impl/monitoring/MonitoredInterceptor.java
[3]
https://github.com/CDIatWork/IdeaFork/blob/master/ideafork_core/src/main/java/at/irian/cdiatwork/ideafork/core/impl/repository/Repository.java


http://www.irian.at

Your JavaEE powerhouse -
JavaEE Consulting, Development and
Courses in English and German

Professional Support for Apache
MyFaces, DeltaSpike and OpenWebBeans

2015-09-19 19:35 GMT+02:00 Grzesiek <gregory.d3@gmail.com>:

> Hi Gerhard, thanks for answering. Nice to see that somebody cares.
>
> your code isn't valid with cdi.
> >
>
> I'm surprised. Why? Could you give me a reason?
>
> I've tried both of your hints also. But still no luck.
>
> ... just create a cdi-stereotype annotation (e.g. @Service) and annotate
> > that one with both interceptor-annotations.
> >
>
> // btw. to be honest, I've already created this stereotype annotation,
> exactly with name "@Service" ;-)
>
>
> I guess my whole problem is about the order of the interceptors. My custom
> *@DetectIntegrityConstraintViolation* is processed first, before
> *@Transactional* - thus exception during execution of the former
> interceptor. If yes how to solve this? Any other clues?
>
> Greg
>
>
> 2015-09-19 18:16 GMT+02:00 Gerhard Petracek <gpetracek@apache.org>:
>
> > hi greg,
> >
> > you are very welcome to ask questions on this list.
> > (helping deltaspike-users is the main intention here...)
> >
> > @your issue:
> > your code isn't valid with cdi. if you don't like to use both
> > interceptor-annotations in your service-classes, just create a
> > cdi-stereotype annotation (e.g. @Service) and annotate that one with both
> > interceptor-annotations.
> >
> > regards,
> > gerhard
> >
> >
> >
> > 2015-09-19 17:56 GMT+02:00 Grzesiek <gregory.d3@gmail.com>:
> >
> > > 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
> > >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message