openwebbeans-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From titou10 titou10 <titou10.tito...@gmail.com>
Subject Re: @Alternative Entitymanager producer used once in two..
Date Tue, 12 Mar 2013 20:01:01 GMT
This is almost exactly what I'm doing with maybe 2 small differences:
- my two producers are in two different jars, the unit-test/batch one
annotated with @Alternative is in a jar that is only used during
batch/unit test
- I didn't annotated the alternative with@Exclude(exceptIfProjectStage
= ProjectStage.UnitTest.class) as the jar is only on the classpath
when running batch/unit test.  Will adding this annotation make OWB
use *this* @Alternative producer instead of the not "not alternative"
one? looks very strange to me..

Still don't undertand why the producer annotaded with @Alternative is
only pick up by OWB at runtime from time to time

(BTW DS @Exclude is only usable on classes, not on producer methods...)


2013/3/12 Gerhard Petracek <gerhard.petracek@gmail.com>:
> hi,
>
> implement the default-producer in one class and a test-producer in a second
> class.
> -> annotate only the second class with @Alternative and e.g. with
> @Exclude(exceptIfProjectStage = ProjectStage.UnitTest.class)
>
> + configure the second class as alternative in the beans.xml
> + configure the project-stage for your test-environment (or set it manually
> via ProjectStageProducer#setProjectStage)
>
> regards,
> gerhard
>
>
>
> 2013/3/12 titou10 titou10 <titou10.titou10@gmail.com>
>>
>> Thanks Gerhard for your answer.
>>
>> Yes my unit test already set ProjectStageUnitTest but not the
>> batch..Maybe it will have too?
>>
>> About your post:
>> - @Exclude on what? the producer in the common module used in the
>> online app that is deployed in the online app? If so, I will have to
>> remove this annotation on my producer at build/package time (!)....or
>> maybe you want me to use the
>> @Exclude(exceptIfProjectStage=UnitTest.class) on this producer? wow
>> this is very intrusive and we will have to think of all our producers
>> that HAVE TO be replace for batch/unit-test instead of "MAY BE"
>> replaced by an "alternative" at runtime as in the semantic of the
>> @Alternative mechanism. Looks much more like a dirty workaround than a
>> real solution to me
>>
>> - @ProjectStageActivated on what? the producer in my unit-test/batch
>> startup module? the producer is already activated.. as I can see it in
>> the log and OWB use it about once on two. The problem is that OWB
>> sometimes use it and sometimes use the one not annotated
>>
>> What I need here is that the producer annoted with @Alternative always
>> take precedence on the one that does not have the annotation..I
>> thought it was what CDI should provide out of the box. If not, what is
>> the usage of @Alternative annotations then?
>> ..
>> Thx
>>
>> 2013/3/12 Gerhard Petracek <gerhard.petracek@gmail.com>:
>> > hi,
>> >
>> > you can use ProjectStage.UnitTest.class and
>> >
>> > @ProjectStageActivated provided by codi
>> > or
>> > @Exclude provided by deltaspike
>> >
>> > for your test-producer.
>> >
>> > in both cases you have to ensure that the project-stage is configured
>> > for
>> > your unit-tests (e.g. as system-property).
>> >
>> > regards,
>> > gerhard
>> >
>> >
>> >
>> > 2013/3/12 titou10 titou10 <titou10.titou10@gmail.com>
>> >>
>> >> Hi,
>> >> I'm trying to setup a JUnit test (and a batch process) for our app
>> >> with OWBv1.1.7 and we have problems with the way @Alternative
>> >> producers is used by OWB at runtime
>> >>
>> >> Our setup is the following (by order in the classpath)
>> >> - a jar with test functions (or batch functions) that include an
>> >> @Alternative producer for a local EntityManager using a
>> >> "TestPersistentUnit" defines in a specific persistence.xml file that
>> >> directly points to the test (batch) database . The alternative is
>> >> declared in beans.xml and "seen" (confirmed by the logs) by OWB at
>> >> startup
>> >> - a jar with the business classes  and component  (deployed in the war
>> >> when deployed on WAS and used by the batch end tests process)
>> >> - a jar with persistent/jpa classes (no beans.xml in there) with the
>> >> "onlie/WAS" persistence.xml uses jndi lookup)
>> >> - a jar with "common" classes and component, including an
>> >> EntityMananger producer (using @PersistentContext annotation)
>> >>
>> >> We have OWB, CODI and DS in the classpath and use
>> >> CdiContainerLoader.getCdiContainer().boot() .. to startup OWB
>> >> In the log, OWB sees the 2 EntityManager producers but at runtime the
>> >> alternative is picked up about once in two...Sometimes it works,
>> >> sometimes not...
>> >>
>> >> I've read my posts on the web about @Alternative order/priority and so
>> >> but didn't find  any valid solution, including in the CDI forums
>> >> I didn't find also valid solutions to this in CODI nor DS..
>> >>
>> >> In this state we can not use @Alternative at all if we can not
>> >> guarantee that the alternative EntityManager producer is always picked
>> >> up, this is very true for our batch process
>> >> Of course we could separate the entitymaneger producer in its specific
>> >> jar and include it only when deployed in WAS and not in junit/batch
>> >> but it seems it as the rĂ´le of @Alternative..
>> >>
>> >> Are here solutions to this?
>> >> Thx
>> >
>> >
>> >
>
>

Mime
View raw message