Sorry, I misunderstood.

You can use timerService.createSingleActionTimer(...). This will execute
only once and then you don't create more timers in your @Timeout  method.


On Sun, Dec 29, 2013 at 12:40 PM, Leonardo K. Shikida <[email protected]>wrote:

> Hi Kalyan
>
> I don' t want to run it every minute (for this, I could use * as minute)
>
> I want to run it in a specific date and time, and only once.
>
> TIA
>
> Leo
>
> []
>
> Leo
>
>
> On Sat, Dec 28, 2013 at 11:28 PM, Nrkkalyan <[email protected]> wrote:
>
> > If you mean you would like your timer service to run every min 24/7 then
> > you
> > You need only the following.  exp.minutes("*/1").hour("*")
> >
> > Hope I am clearly understanding your need.
> >
> > Regards
> > /Kalyan
> > 0733312584
> >
> > PS: May have typos due to using mobile
> >
> > On 28 dec 2013, at 19:53, "Leonardo K. Shikida" <[email protected]>
> wrote:
> >
> > > Hi
> > >
> > > I'd like to start a calendar scheduled job for 1 minute from now.
> > >
> > > I was trying to assemble a cron expression like this, but instead, it's
> > > generating
> > > a lot of jobs (really)
> > >
> > > looks like something really stupid
> > >
> > > The code is as simple as this
> > >
> > > import java.util.Calendar;
> > > import java.util.GregorianCalendar;
> > >
> > > import javax.annotation.PostConstruct;
> > > import javax.annotation.Resource;
> > > import javax.ejb.ScheduleExpression;
> > > import javax.ejb.Singleton;
> > > import javax.ejb.Startup;
> > > import javax.ejb.Timeout;
> > > import javax.ejb.Timer;
> > > import javax.ejb.TimerService;
> > >
> > > @Singleton
> > > @Startup
> > > public class TimerEJB {
> > >
> > >    @Resource
> > >    private TimerService    timerService;
> > >
> > >    @Timeout
> > >    public void executeTimer(Timer timer) {
> > >        System.out.println(timer);
> > >    }
> > >
> > >    private String toString(ScheduleExpression schedule) {
> > >        return "MyScheduleExpression [getDayOfMonth()=" +
> > > schedule.getDayOfMonth()
> > >                + ", getDayOfWeek()=" + schedule.getDayOfWeek()
> > >                + ", getEnd()=" + schedule.getEnd()
> > >                + ", getHour()=" + schedule.getHour()
> > >                + ", getMinute()=" + schedule.getMinute()
> > >                + ", getMonth()=" + schedule.getMonth()
> > >                + ", getSecond()=" + schedule.getSecond()
> > >                + ", getStart()=" + schedule.getStart()
> > >                + ", getYear()=" + schedule.getYear()
> > >                + ", getTimezone()=" + schedule.getTimezone() + "]";
> > >    }
> > >
> > >    @PostConstruct
> > >    public void create() {
> > >
> > >        Calendar future = new GregorianCalendar();
> > >        future.setTimeInMillis(System.currentTimeMillis() + 60000);
> > >
> > >        int dayOfWeek = future.get(Calendar.DAY_OF_WEEK);
> > >        String dayOfWeekName = null;
> > >
> > >        switch (dayOfWeek) {
> > >            case Calendar.MONDAY:
> > >                dayOfWeekName = "Mon";
> > >                break;
> > >            case Calendar.TUESDAY:
> > >                dayOfWeekName = "Tue";
> > >                break;
> > >            case Calendar.WEDNESDAY:
> > >                dayOfWeekName = "Wed";
> > >                break;
> > >            case Calendar.THURSDAY:
> > >                dayOfWeekName = "Thu";
> > >                break;
> > >            case Calendar.FRIDAY:
> > >                dayOfWeekName = "Fri";
> > >                break;
> > >            case Calendar.SATURDAY:
> > >                dayOfWeekName = "Sat";
> > >                break;
> > >            case Calendar.SUNDAY:
> > >                dayOfWeekName = "Sun";
> > >                break;
> > >        }
> > >
> > >        String cronExp = String.format("%1$s %2$s %3$s %4$s %5$s %6$s
> > %7$s",
> > >                future.get(Calendar.SECOND),
> > >                future.get(Calendar.MINUTE),
> > >                future.get(Calendar.HOUR_OF_DAY),
> > >                dayOfWeekName,
> > >                future.get(Calendar.DAY_OF_MONTH),
> > >                future.get(Calendar.MONTH) + 1,
> > >                future.get(Calendar.YEAR));
> > >
> > >        String[] cron = cronExp.split(" ");
> > >        String[] ss = new String[7];
> > >        for (int i = 0; i < cron.length; i++) {
> > >            ss[i] = cron[i];
> > >        }
> > >
> > >        ScheduleExpression exp = new ScheduleExpression();
> > >        exp.second(0);
> > >        exp.minute(ss[1]);
> > >        exp.hour(ss[2]);
> > >        exp.dayOfWeek(ss[3]);
> > >        exp.dayOfMonth(ss[4]);
> > >        exp.month(ss[5]);
> > >        exp.year(ss[6]);
> > >
> > >        System.out.println(toString(exp));
> > >
> > >        Timer t = this.timerService.createCalendarTimer(exp);
> > >
> > >        System.out.println("Created "+t);
> > >    }
> > >
> > > }
> > >
> > > output for this looks like this
> > >
> > > MyScheduleExpression [getDayOfMonth()=28, getDayOfWeek()=Sat,
> > > getEnd()=null, getHour()=16, getMinute()=53, getMonth()=12,
> > getSecond()=0,
> > > getStart()=null, getYear()=2013, getTimezone()=null]
> > >
> > > Created org.apache.openejb.core.timer.TimerImpl@298a0c11
> > >
> > > an after some seconds
> > >
> > > org.apache.openejb.core.timer.TimerImpl@5f1e961a
> > > org.apache.openejb.core.timer.TimerImpl@5f1e961a
> > > org.apache.openejb.core.timer.TimerImpl@5f1e961a
> > > org.apache.openejb.core.timer.TimerImpl@5f1e961a
> > > org.apache.openejb.core.timer.TimerImpl@5f1e961a
> > > org.apache.openejb.core.timer.TimerImpl@5f1e961a
> > > org.apache.openejb.core.timer.TimerImpl@5f1e961a...
> > >
> > > any help is welcome
> > >
> > > TIA
> > >
> > > Leo
> >
>



-- 
Thanks and Regards
N Radhakrishna Kalyan

P:  +46 733 312 584
http://about.me/nrkkalyan
 <http://about.me/nrkkalyan>

Reply via email to