Schedule Java EE 7 Batch Jobs (Tech Tip #36)

Java EE 7 added the capability to perform Batch jobs in a standard way using JSR 352.

This code fragment is the Job Specification Language defined as XML, a.k.a. Job XML. It defines a canonical job, with a single step, using item-oriented or chunk-oriented processing. A chunk can have a reader, optional processor, and a writer. Each of these elements are identified using the corresponding elements in the Job XML, and are CDI beans packaged in the archive.

This job can be easily started using:

A typical question asked in different forums and conferences is how to schedule these jobs in a Java EE runtime. Batch 1.0 API itself does not offer anything to be schedule these jobs. However Java EE platform offers three different ways to schedule these jobs:

  1. Use the @javax.ejb.Schedule annotation in an EJB.
    Here is a sample code that will trigger the execution of batch job at 11:59:59 PM every day.
    Of course, you can change the parameters of @Schedule to start the batch job at the desired time.
  2. Use ManagedScheduledExecutorService using javax.enterprise.concurrent.Trigger as shown:
    Call runJob to initiate job execution and cancelJob to terminate job execution. In this case, a new job is started a day later than the previous task. And its not started until previous one is terminated. You will need more error checks for proper execution.

    MyJob is very trivial:

    Of course, you can automatically schedule it by calling this code in @PostConstruct.

  3. A slight variation of second technique allows to run the job after a fixed delay as shown:

    The first task is executed 2 hours after the runJob2 method is called. And then with a 3 hours delay between subsequent execution.

This support is available to you within the Java EE platform. In addition, you can also invoke BatchRuntime.getJobOperator().start("myJob", new Properties()); from any of your Quartz-scheduled methods as well.

You can try all of this on WildFly.

And there are a ton of Java EE 7 samples at

This particular sample is available at

How are you scheduling your Batch jobs ?

Be Sociable, Share!
  • Tweet

15 thoughts on “Schedule Java EE 7 Batch Jobs (Tech Tip #36)

  1. It’s not very clear to me what this job does or what it’s supposed to do.

    I got the part about scheduling it.

    Could you explain it to me?

  2. I am not sure #3 is a good option. Because you directly instantiated MyJob, you won’t get dependency injection, right?

  3. Where do I have to place the XML? …/resouces/META-INF/batch-jobs/jobs.xml ?
    By the way, your XML is not well formed, there are 2 tag closures that are missing.

  4. Nice article. I’ve already deployed a batch in the way you explain, it is actually working. But, I wanna get the BatchStatus from an webservice app running on the same app server (Glassfish 4.1) and I’m running into:

    javax.batch.operations.JobSecurityException: The current user is not authorized to
    perform this operation

    I’ve deployed web sevices on the same webapp that is running the jobs and get exactly the same message. I’ve read JSR spec about jobs, and can’t find anything related to its security.

    Hope you can guide me someway. Thanks for your time. Peace.

  5. Is it worth going from Quartz scheduler to jee batch +@schedule. Will I get all the functionality and control avilable in quartz scheduler.

  6. JSR 352 specifically separates concerns so the bunch runtime can satisfy basic foundation concerns, freeing developers to concentrate on the core business logic. This new details fills an essential gap in the Java platforms. With accessibility for both Java EE and SE platforms. dissertation services | Dissertation Time

  7. Your good knowledge and kindness in playing with all the pieces were very useful. I don’t know what I would have done if I had not encountered such a step like this.
    Get Law Dissertation Help By British Dissertations Help

  8. Thank you so much for making this track. and now its available in our window 10 and its so interesting to use anybody can try this here.

  9. Businesses are aiming for better ways to communicate with their clients. Constant calls for little updates are now annoying whereas social media is unreliable. This is where texting comes in and today, you can send messages directly from your system by connecting with a texting service using SMS Gateway.

  10. If you have a list of multiple users that you need to send transactional messages from your website or application, you should look for a quality bulk texting service. This will allow you to send unlimited messages across a range of networks worldwide.

  11. java is very difficult seriously! i have very very much tried a lot but i can not able to get command over this language that’s a reason i switch my self from PHP. but you can say that still, i want to get command on OOP. i am a developer and recently develop cheap essay help this php based.

  12. JSR especially separates issues so the bunch runtime can fulfill simple basis worries, freeing builders to pay attention at the core enterprise logic.
    Essay Help Assistance

Leave a Reply

Your email address will not be published. Required fields are marked *