7 Kasım 2017 Salı

Jakarta EE TimerService Arayüzü - Programmatic Timer

Giriş
Şu satırı dahil ederiz.
import jakarta.ejb.ScheduleExpression;
import jakarta.ejb.TimerConfig;
import jakarta
.ejb.TimerService;
Bu arayüz yerine @Schedule anotasyonu da kullanılabilir. Açıklaması şöyle. Yani TimerService ile timer başlatıldıktan sonra @Timeout olarak işaretli metodumuz çağrılır
the timer service can be injected into any bean (except a stateful session bean) and the business logic should be placed in a method annotated with @Timeout. The timer can be initialized by a method annotated @PostConstruct of the beans or it can also be initialized just by calling a method.
Bu sınıf ile birlikte kullanılan javax.ejb.TimerConfig nesnesi timer nesnesinin persistent olup olmadığını belirtmek için kullanılır

Bu sınıfı bir EJB içine enjekte etmek için şöyle yaparız.
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.ScheduleExpression;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.TimerConfig;
import javax.ejb.TimerService;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Singleton
@Startup
@TransactionManagement(TransactionManagementType.BEAN)
public class NightlyWorkTerminationEmailSender extends SchedulableService {
  private final static String TIMER_ID = "WorkTerminationEmailNotificationServiceTimer";

  @Resource
  private TimerService timerService;
  ...
}
createCalendarTimer metodu
Belirtilen cron cümlesine göre timer başlatır. cron cümlesi tek seferlik veya periyodik bir iş olabilir.

Örneğin periyodik işi için ScheduleExpression şöyle olabilir.
ScheduleExpression result = new ScheduleExpression();
result.hour("12").dayOfMonth("1").minute("0").month("*");
Örnek
Şöyle yaparız.
// get the configuration parameter from DB
Date notificationTime = ...;

Calendar calendar = Calendar.getInstance();
calendar.setTime(notificationTime);

// create schedule
ScheduleExpression schedule = new ScheduleExpression();
schedule.hour(calendar.get(Calendar.HOUR_OF_DAY)).minute(calendar.get(Calendar.MINUTE));

timerService.createCalendarTimer(schedule, new TimerConfig("MyTimer", false));
createTimer metodu - Periyodik Timer
Örnek
Şöyle yaparız
timerService.createTimer(0,1000, "Every second timer with no delay");




3 Kasım 2017 Cuma

LinkedList Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.util.LinkedList;
Sınıf List, Queue ve Dequeue arayüzülerini gerçekleştirerek bence inanılmaz bir iş ortaya koyuyor.

Bu sınıf ArrayList'e göre daha az kullanılıyor.

constructor
Şöyle yaparız.
LinkedList<Foo>list = new LinkedList<Foo>();
Queue arayüzü için şöyle yaparız.
Queue<Foo> q = new LinkedList<Foo>() ;
Dequeue arayüzü için şöyle yaparız.
Deque<Character> deq = new LinkedList<>();
add metodu
Açıklaması şöyle
public void add(int index, E element)
Inserts the specified element at the specified position in this list. Shifts the element currently at that position (if any) and any subsequent elements to the right (adds one to their indices).
Şöyle yaparız.
list.add (10,foo);
addAll metodu
Şöyle yaparız.
Deque<Character> var = new LinkedList<>();

// add elements to queue
var.addAll(Arrays.asList('A', 'B', '*', 'C', 'D', '*', 'E'));
descendingIterator metodu
Reverse iterator sağlar. Şöyle yaparız.
Deque<Character> var = new LinkedList<>();

// add elements to queue
var.addAll(Arrays.asList('A', 'B', '*', 'C', 'D', '*', 'E'));

// remove '*' elements and immediately preceding element
for (Iterator<Character> i = var.descendingIterator(); i.hasNext(); ) {
  if (i.next() == '*') {
    i.remove();
    i.next(); // next() when descending actually means previous queue element
    i.remove();
  }
}

System.out.println(var); // prints: [A, C, E]
getFirst metodu
Şöyle yaparız.
LinkedList<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
Integer mostRecent = queue.getLast()//Gives most recent element
getLast metodu
Şöyle yaparız.
LinkedList<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
Integer mostRecent = queue.getLast()//Gives most recent element
isEmpty metodu
Şöyle yaparız.
if (!list.isEmpty () ){...}
remove metodu
İlk elemanı siler ve döndürür. Şöyle yaparız.
Foo f = list.remove();
removeFirst metodu
Şöyle yaparız.
LinkedList<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);

queue.removeFirst();