Play! Suspend Job

เวลาเจอ request ที่ต้องประมวลผลนานกว่าปกติ ถ้าใช้ method ปกติ handle Play! จะยกเลิก thread นั้นทิ้งทำให้ไม่ได้ผลลัพธ์อย่างที่ต้องการ เช่นย่อภาพ หรือหมุนภาพแล้วต้องการรู้ว่าเสร็จเมื่อไหร่เพื่อเอามาแสดง คนทำ Play! ก็คงรู้เลยทำ Suspend Job ไว้ให้สำหรับงานแบบนี้โดยเฉพาะ ลองดูตัวอย่างหมุนภาพด้านล่าง

เริ่มจาก class ที่ทำหน้าที่ในการหมุนภาพไปทางขวาเก้าสิบองศา

public class RotateRightJob extends Job {

  private Photo photo;

  public RotateRightJob(Photo photo) {
    this.photo = photo;
  }

  public void doJob() {
    photo.rotate(90)l
  }

}

จากนั้น controller ที่รับ request มาเพื่อหมุนภาพ

public static void rotateRightPhoto(Long photoID) {
  if (request.isNew) {
    Photo photo = Photo.findById(photoID);
    Future task = new RotateRightJob(photo).now();
    waitFor(task);
  }
  renderText("Success");
}

ใน Play! ยังมี Job อีกสองแบบคือ Bootstrap Job และ Scheduler Job ซึ่งใช้บ่อยพอสมควรเหมือนกันและก็ทำหน้าที่ตามชื่อคือ ทำงานตอนเริ่มต้น หรือ ตามเวลาที่กำหนด หน้าตาก็จะคล้ายกับ Suspend Job ไว้มีเวลาอีกจะค่อยๆ มาเขียนไว้อีกที

About llun

Just a programmer

, ,