Job-wide artifact injection with CDI Producer
TweetPosted on Tuesday Feb 25, 2014 at 05:37PM in Technology
Environment
- jBeret 1.0.1Beta-SNAPSHOT
 - WildFly 8.0.0.Final
 
Why need it?
- Logger injection through CDI is easy and useful, but for jBatch programming of some occasions, I guess that Job-wide Logger is better than typical class-wide logger. thus, I will try it this time.
 - With CDI, we can reduce some annoying code, even related to Job Properties so I also will try to inject a job-level property to a Batchlet through Producer.
 
Sample project
- jBatch resources
 - CDI resources
 - Test class
 
How does it work?
- 2 Injections are declared in InjectBatchlet.
 - Both of them will be produced by JobWideArtifactProducer.
 - JobWideArtifactProducer creates:
- a logger. the name contains job name.
 - a Date. it came from job-level property named “baseDate”.
 
 
Log
18:14:51,064 INFO [job.jobwideproducer] (batch-batch - 3) process(): baseDate=14/02/25 0:00
Remarks
- Injection of variables such as working directory of the job may be useful too.
 
References
Tags: jbatch
Static EJB Timer example
TweetPosted on Tuesday Feb 25, 2014 at 04:08PM in Technology
Environment
- WildFly8.0.0.Final
 - Oracle JDK7u51
 
Resources
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.nailedtothex</groupId>
    <artifactId>ejbtimer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
     <packaging>ejb</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>
TimerService.java
package org.nailedtothex.ejbtimer;
import javax.ejb.Schedule;
import javax.ejb.Singleton;
@Singleton
public class TimerService {
    @Schedule(second = "*/1", minute = "*", hour = "*", persistent = false)
    public void periodic() {
        System.out.println("period");
    }
    @Schedule(dayOfMonth = "25", hour = "16", minute = "10", persistent = false)
    public void schedule() {
        System.out.println("schedule");
    }
}
- Almost all of the code was taken from [1].
 - There are some additional useful informations and conversations so I recommend to visit [1].
 - According to [2], “persistent” attribute means whether timers that missed should fire or not during downtime of the application server.
- Default is true.
 - I don't want many missed timers to fire at once when I launch the application server which stopped unexpectedly so I just set it false.
 
 - Detail of specification of @Schedule here: [4]
 
Log
16:09:44,002 INFO [stdout] (EJB default - 8) period 16:09:45,001 INFO [stdout] (EJB default - 9) period 16:09:46,002 INFO [stdout] (EJB default - 10) period 16:09:47,002 INFO [stdout] (EJB default - 1) period 16:09:48,002 INFO [stdout] (EJB default - 2) period 16:09:49,002 INFO [stdout] (EJB default - 4) period 16:09:50,002 INFO [stdout] (EJB default - 3) period 16:09:51,002 INFO [stdout] (EJB default - 5) period 16:09:52,002 INFO [stdout] (EJB default - 6) period 16:09:53,002 INFO [stdout] (EJB default - 7) period 16:09:54,002 INFO [stdout] (EJB default - 8) period 16:09:55,002 INFO [stdout] (EJB default - 9) period 16:09:56,001 INFO [stdout] (EJB default - 10) period 16:09:57,001 INFO [stdout] (EJB default - 1) period 16:09:58,001 INFO [stdout] (EJB default - 2) period 16:09:59,002 INFO [stdout] (EJB default - 4) period 16:10:00,002 INFO [stdout] (EJB default - 5) period 16:10:00,003 INFO [stdout] (EJB default - 3) schedule 16:10:01,001 INFO [stdout] (EJB default - 6) period 16:10:02,002 INFO [stdout] (EJB default - 7) period 16:10:03,001 INFO [stdout] (EJB default - 8) period 16:10:04,001 INFO [stdout] (EJB default - 9) period 16:10:05,001 INFO [stdout] (EJB default - 10) period 16:10:06,002 INFO [stdout] (EJB default - 1) period 16:10:07,003 INFO [stdout] (EJB default - 2) period
References
Tags: ejb
