You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by Reinis Vicups <to...@orbit-x.de> on 2013/07/22 10:03:33 UTC
Useage of @Alternative for @Startup classes running @Schedule
Hi,
I have two implementations of some SchedulerWorkerManager:
//ALTERNATIVE!
@Startup @Singleton
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@Lock(LockType.READ) @Alternative
public class AzureSchedulerWorkerManager implements SchedulerWorkerManager {
@Override
@Schedule(second = "*/20", minute = "*", hour = "*", info = "Every
20 seconds")
@Lock(LockType.WRITE)
public void manageSchedulerWorkers() {}
}
AND
//DEFAULT!
@Startup @Singleton
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@Lock(LockType.READ) @Default
public class BasicSchedulerWorkerManager implements SchedulerWorkerManager {
@Override
@Schedule(second = "*/5", minute = "*", hour = "*", info = "Every 5
seconds")
@Lock(LockType.WRITE)
public void manageSchedulerWorkers() {}
}
I just noticed that despite AzureSchedulerWorkerManager is annotated as
being @Alternative it is still "ticking".
Thank you, guys, for hints on how to configure them both properly.
br
reinis
Re: Useage of @Alternative for @Startup classes running @Schedule
Posted by Romain Manni-Bucau <rm...@gmail.com>.
the issue which can happen in such a case is the timer condition can change
depending the impl
but great it works :)
*Romain Manni-Bucau*
*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
*Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
*Github: https://github.com/rmannibucau*
2013/7/22 Reinis Vicups <to...@orbit-x.de>
> Thanks Romain for the hints!
>
> I have done this now in quick and dirty way like this:
>
> @Startup @Singleton @TransactionAttribute(**TransactionAttributeType.NOT_*
> *SUPPORTED) @Lock(LockType.READ)
> public class SchedulerWorkerManagerSchedule {
>
> @Inject
> SchedulerWorkerManager schedulerWorkerManager;
>
>
> @Schedule(second = "*/20", minute = "*", hour = "*", info = "Every 20
> seconds") @Lock(LockType.WRITE)
> public void manageSchedulerWorkers() {
> schedulerWorkerManager.**manageSchedulerWorkers();
> }
> }
>
> In WorkerManager implementations removed all the EJB stuff and, voila, it
> works!
>
> br
> reinis
>
>
> On 22.07.2013 10:33, Romain Manni-Bucau wrote:
>
>> hehe, that's a point of view ;)
>>
>> you have another alternative: use xml to configure your @Schedule only on
>> the activated EJB. Not perfect since you'll configure it "twice" (once for
>> the timer, once for the CDI bean) but it works.
>>
>> *Romain Manni-Bucau*
>> *Twitter: @rmannibucau <https://twitter.com/**rmannibucau<https://twitter.com/rmannibucau>
>> >*
>> *Blog: **http://rmannibucau.**wordpress.com/*<http://rmannibucau.wordpress.com/*>
>> <http://**rmannibucau.wordpress.com/ <http://rmannibucau.wordpress.com/>>
>> *LinkedIn: **http://fr.linkedin.com/in/**rmannibucau*<http://fr.linkedin.com/in/rmannibucau*>
>> *Github: https://github.com/**rmannibucau*<https://github.com/rmannibucau*>
>>
>>
>>
>> 2013/7/22 Reinis Vicups <to...@orbit-x.de>
>>
>> Ok that is what I was afraid about.
>>>
>>> And, Romain, it is not normal - it is due to still missing alignment
>>> between cdi and ejb :D
>>>
>>> For those of you reading this question some times later: the "hack" I
>>> will
>>> make is to have only one EJB (facade) and in that EJB inject @Default or
>>> @Alternative implementation based on beans.xml config.
>>>
>>> br
>>> reinis
>>>
>>>
>>> On 22.07.2013 10:07, Romain Manni-Bucau wrote:
>>>
>>> Hi,
>>>>
>>>> @Schedule is an EJB feature not a CDI one so @Alternative is not used
>>>> here
>>>> (so it sounds normal for me).
>>>>
>>>> *Romain Manni-Bucau*
>>>> *Twitter: @rmannibucau <https://twitter.com/****rmannibucau<https://twitter.com/**rmannibucau>
>>>> <https://twitter.**com/rmannibucau <https://twitter.com/rmannibucau>>
>>>>
>>>>> *
>>>>>
>>>> *Blog: **http://rmannibucau.**wordpre**ss.com/*<http://wordpress.com/*>
>>>> <http://rmannibucau.**wordpress.com/*<http://rmannibucau.wordpress.com/*>
>>>> >
>>>> <http://**rmannibucau.**wordpress.com/<http://rmannibucau.wordpress.com/><
>>>> http://rmannibucau.wordpress.**com/ <http://rmannibucau.wordpress.com/>
>>>> >>
>>>> *LinkedIn: **http://fr.linkedin.com/in/****rmannibucau*<http://fr.linkedin.com/in/**rmannibucau*>
>>>> <http://fr.**linkedin.com/in/rmannibucau*<http://fr.linkedin.com/in/rmannibucau*>
>>>> >
>>>> *Github: https://github.com/****rmannibucau*<https://github.com/**rmannibucau*>
>>>> <https://github.**com/rmannibucau* <https://github.com/rmannibucau*>>
>>>>
>>>>
>>>>
>>>>
>>>> 2013/7/22 Reinis Vicups <to...@orbit-x.de>
>>>>
>>>> Hi,
>>>>
>>>>> I have two implementations of some SchedulerWorkerManager:
>>>>>
>>>>> //ALTERNATIVE!
>>>>> @Startup @Singleton @TransactionAttribute(****
>>>>>
>>>>> TransactionAttributeType.NOT_*
>>>>>
>>>>> *SUPPORTED) @Lock(LockType.READ) @Alternative
>>>>> public class AzureSchedulerWorkerManager implements
>>>>> SchedulerWorkerManager
>>>>> {
>>>>> @Override
>>>>> @Schedule(second = "*/20", minute = "*", hour = "*", info =
>>>>> "Every
>>>>> 20
>>>>> seconds")
>>>>> @Lock(LockType.WRITE)
>>>>> public void manageSchedulerWorkers() {}
>>>>> }
>>>>>
>>>>> AND
>>>>>
>>>>> //DEFAULT!
>>>>> @Startup @Singleton @TransactionAttribute(****
>>>>>
>>>>> TransactionAttributeType.NOT_*
>>>>>
>>>>> *SUPPORTED) @Lock(LockType.READ) @Default
>>>>> public class BasicSchedulerWorkerManager implements
>>>>> SchedulerWorkerManager
>>>>> {
>>>>> @Override
>>>>> @Schedule(second = "*/5", minute = "*", hour = "*", info =
>>>>> "Every 5
>>>>> seconds")
>>>>> @Lock(LockType.WRITE)
>>>>> public void manageSchedulerWorkers() {}
>>>>> }
>>>>>
>>>>> I just noticed that despite AzureSchedulerWorkerManager is annotated as
>>>>> being @Alternative it is still "ticking".
>>>>>
>>>>> Thank you, guys, for hints on how to configure them both properly.
>>>>>
>>>>> br
>>>>> reinis
>>>>>
>>>>>
>>>>>
>
Re: Useage of @Alternative for @Startup classes running @Schedule
Posted by Reinis Vicups <to...@orbit-x.de>.
Thanks Romain for the hints!
I have done this now in quick and dirty way like this:
@Startup @Singleton
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@Lock(LockType.READ)
public class SchedulerWorkerManagerSchedule {
@Inject
SchedulerWorkerManager schedulerWorkerManager;
@Schedule(second = "*/20", minute = "*", hour = "*", info = "Every
20 seconds") @Lock(LockType.WRITE)
public void manageSchedulerWorkers() {
schedulerWorkerManager.manageSchedulerWorkers();
}
}
In WorkerManager implementations removed all the EJB stuff and, voila,
it works!
br
reinis
On 22.07.2013 10:33, Romain Manni-Bucau wrote:
> hehe, that's a point of view ;)
>
> you have another alternative: use xml to configure your @Schedule only on
> the activated EJB. Not perfect since you'll configure it "twice" (once for
> the timer, once for the CDI bean) but it works.
>
> *Romain Manni-Bucau*
> *Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
> *Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
> *LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
> *Github: https://github.com/rmannibucau*
>
>
>
> 2013/7/22 Reinis Vicups <to...@orbit-x.de>
>
>> Ok that is what I was afraid about.
>>
>> And, Romain, it is not normal - it is due to still missing alignment
>> between cdi and ejb :D
>>
>> For those of you reading this question some times later: the "hack" I will
>> make is to have only one EJB (facade) and in that EJB inject @Default or
>> @Alternative implementation based on beans.xml config.
>>
>> br
>> reinis
>>
>>
>> On 22.07.2013 10:07, Romain Manni-Bucau wrote:
>>
>>> Hi,
>>>
>>> @Schedule is an EJB feature not a CDI one so @Alternative is not used here
>>> (so it sounds normal for me).
>>>
>>> *Romain Manni-Bucau*
>>> *Twitter: @rmannibucau <https://twitter.com/**rmannibucau<https://twitter.com/rmannibucau>
>>>> *
>>> *Blog: **http://rmannibucau.**wordpress.com/*<http://rmannibucau.wordpress.com/*>
>>> <http://**rmannibucau.wordpress.com/ <http://rmannibucau.wordpress.com/>>
>>> *LinkedIn: **http://fr.linkedin.com/in/**rmannibucau*<http://fr.linkedin.com/in/rmannibucau*>
>>> *Github: https://github.com/**rmannibucau*<https://github.com/rmannibucau*>
>>>
>>>
>>>
>>> 2013/7/22 Reinis Vicups <to...@orbit-x.de>
>>>
>>> Hi,
>>>> I have two implementations of some SchedulerWorkerManager:
>>>>
>>>> //ALTERNATIVE!
>>>> @Startup @Singleton @TransactionAttribute(****
>>>> TransactionAttributeType.NOT_*
>>>>
>>>> *SUPPORTED) @Lock(LockType.READ) @Alternative
>>>> public class AzureSchedulerWorkerManager implements
>>>> SchedulerWorkerManager
>>>> {
>>>> @Override
>>>> @Schedule(second = "*/20", minute = "*", hour = "*", info = "Every
>>>> 20
>>>> seconds")
>>>> @Lock(LockType.WRITE)
>>>> public void manageSchedulerWorkers() {}
>>>> }
>>>>
>>>> AND
>>>>
>>>> //DEFAULT!
>>>> @Startup @Singleton @TransactionAttribute(****
>>>> TransactionAttributeType.NOT_*
>>>>
>>>> *SUPPORTED) @Lock(LockType.READ) @Default
>>>> public class BasicSchedulerWorkerManager implements
>>>> SchedulerWorkerManager
>>>> {
>>>> @Override
>>>> @Schedule(second = "*/5", minute = "*", hour = "*", info = "Every 5
>>>> seconds")
>>>> @Lock(LockType.WRITE)
>>>> public void manageSchedulerWorkers() {}
>>>> }
>>>>
>>>> I just noticed that despite AzureSchedulerWorkerManager is annotated as
>>>> being @Alternative it is still "ticking".
>>>>
>>>> Thank you, guys, for hints on how to configure them both properly.
>>>>
>>>> br
>>>> reinis
>>>>
>>>>
Re: Useage of @Alternative for @Startup classes running @Schedule
Posted by Romain Manni-Bucau <rm...@gmail.com>.
hehe, that's a point of view ;)
you have another alternative: use xml to configure your @Schedule only on
the activated EJB. Not perfect since you'll configure it "twice" (once for
the timer, once for the CDI bean) but it works.
*Romain Manni-Bucau*
*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
*Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
*Github: https://github.com/rmannibucau*
2013/7/22 Reinis Vicups <to...@orbit-x.de>
> Ok that is what I was afraid about.
>
> And, Romain, it is not normal - it is due to still missing alignment
> between cdi and ejb :D
>
> For those of you reading this question some times later: the "hack" I will
> make is to have only one EJB (facade) and in that EJB inject @Default or
> @Alternative implementation based on beans.xml config.
>
> br
> reinis
>
>
> On 22.07.2013 10:07, Romain Manni-Bucau wrote:
>
>> Hi,
>>
>> @Schedule is an EJB feature not a CDI one so @Alternative is not used here
>> (so it sounds normal for me).
>>
>> *Romain Manni-Bucau*
>> *Twitter: @rmannibucau <https://twitter.com/**rmannibucau<https://twitter.com/rmannibucau>
>> >*
>> *Blog: **http://rmannibucau.**wordpress.com/*<http://rmannibucau.wordpress.com/*>
>> <http://**rmannibucau.wordpress.com/ <http://rmannibucau.wordpress.com/>>
>> *LinkedIn: **http://fr.linkedin.com/in/**rmannibucau*<http://fr.linkedin.com/in/rmannibucau*>
>> *Github: https://github.com/**rmannibucau*<https://github.com/rmannibucau*>
>>
>>
>>
>> 2013/7/22 Reinis Vicups <to...@orbit-x.de>
>>
>> Hi,
>>>
>>> I have two implementations of some SchedulerWorkerManager:
>>>
>>> //ALTERNATIVE!
>>> @Startup @Singleton @TransactionAttribute(****
>>> TransactionAttributeType.NOT_*
>>>
>>> *SUPPORTED) @Lock(LockType.READ) @Alternative
>>> public class AzureSchedulerWorkerManager implements
>>> SchedulerWorkerManager
>>> {
>>> @Override
>>> @Schedule(second = "*/20", minute = "*", hour = "*", info = "Every
>>> 20
>>> seconds")
>>> @Lock(LockType.WRITE)
>>> public void manageSchedulerWorkers() {}
>>> }
>>>
>>> AND
>>>
>>> //DEFAULT!
>>> @Startup @Singleton @TransactionAttribute(****
>>> TransactionAttributeType.NOT_*
>>>
>>> *SUPPORTED) @Lock(LockType.READ) @Default
>>> public class BasicSchedulerWorkerManager implements
>>> SchedulerWorkerManager
>>> {
>>> @Override
>>> @Schedule(second = "*/5", minute = "*", hour = "*", info = "Every 5
>>> seconds")
>>> @Lock(LockType.WRITE)
>>> public void manageSchedulerWorkers() {}
>>> }
>>>
>>> I just noticed that despite AzureSchedulerWorkerManager is annotated as
>>> being @Alternative it is still "ticking".
>>>
>>> Thank you, guys, for hints on how to configure them both properly.
>>>
>>> br
>>> reinis
>>>
>>>
>
Re: Useage of @Alternative for @Startup classes running @Schedule
Posted by Reinis Vicups <to...@orbit-x.de>.
Ok that is what I was afraid about.
And, Romain, it is not normal - it is due to still missing alignment
between cdi and ejb :D
For those of you reading this question some times later: the "hack" I
will make is to have only one EJB (facade) and in that EJB inject
@Default or @Alternative implementation based on beans.xml config.
br
reinis
On 22.07.2013 10:07, Romain Manni-Bucau wrote:
> Hi,
>
> @Schedule is an EJB feature not a CDI one so @Alternative is not used here
> (so it sounds normal for me).
>
> *Romain Manni-Bucau*
> *Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
> *Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
> *LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
> *Github: https://github.com/rmannibucau*
>
>
>
> 2013/7/22 Reinis Vicups <to...@orbit-x.de>
>
>> Hi,
>>
>> I have two implementations of some SchedulerWorkerManager:
>>
>> //ALTERNATIVE!
>> @Startup @Singleton @TransactionAttribute(**TransactionAttributeType.NOT_*
>> *SUPPORTED) @Lock(LockType.READ) @Alternative
>> public class AzureSchedulerWorkerManager implements SchedulerWorkerManager
>> {
>> @Override
>> @Schedule(second = "*/20", minute = "*", hour = "*", info = "Every 20
>> seconds")
>> @Lock(LockType.WRITE)
>> public void manageSchedulerWorkers() {}
>> }
>>
>> AND
>>
>> //DEFAULT!
>> @Startup @Singleton @TransactionAttribute(**TransactionAttributeType.NOT_*
>> *SUPPORTED) @Lock(LockType.READ) @Default
>> public class BasicSchedulerWorkerManager implements SchedulerWorkerManager
>> {
>> @Override
>> @Schedule(second = "*/5", minute = "*", hour = "*", info = "Every 5
>> seconds")
>> @Lock(LockType.WRITE)
>> public void manageSchedulerWorkers() {}
>> }
>>
>> I just noticed that despite AzureSchedulerWorkerManager is annotated as
>> being @Alternative it is still "ticking".
>>
>> Thank you, guys, for hints on how to configure them both properly.
>>
>> br
>> reinis
>>
Re: Useage of @Alternative for @Startup classes running @Schedule
Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi,
@Schedule is an EJB feature not a CDI one so @Alternative is not used here
(so it sounds normal for me).
*Romain Manni-Bucau*
*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
*Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
*Github: https://github.com/rmannibucau*
2013/7/22 Reinis Vicups <to...@orbit-x.de>
> Hi,
>
> I have two implementations of some SchedulerWorkerManager:
>
> //ALTERNATIVE!
> @Startup @Singleton @TransactionAttribute(**TransactionAttributeType.NOT_*
> *SUPPORTED) @Lock(LockType.READ) @Alternative
> public class AzureSchedulerWorkerManager implements SchedulerWorkerManager
> {
> @Override
> @Schedule(second = "*/20", minute = "*", hour = "*", info = "Every 20
> seconds")
> @Lock(LockType.WRITE)
> public void manageSchedulerWorkers() {}
> }
>
> AND
>
> //DEFAULT!
> @Startup @Singleton @TransactionAttribute(**TransactionAttributeType.NOT_*
> *SUPPORTED) @Lock(LockType.READ) @Default
> public class BasicSchedulerWorkerManager implements SchedulerWorkerManager
> {
> @Override
> @Schedule(second = "*/5", minute = "*", hour = "*", info = "Every 5
> seconds")
> @Lock(LockType.WRITE)
> public void manageSchedulerWorkers() {}
> }
>
> I just noticed that despite AzureSchedulerWorkerManager is annotated as
> being @Alternative it is still "ticking".
>
> Thank you, guys, for hints on how to configure them both properly.
>
> br
> reinis
>