HTML

JIRA DEV

Az Atlassian termékek felhasználási területei, paraméterezésük és alkalmazásfejlesztési lehetőségeik. Esettanulmány és érdekességek a JIRA-ról, Confluence-ről, GreenHopper-ről és a hozzájuk kapcsolódó plugin fejlesztésről, egy kevés Scrum módszertannal fűszerezve.

Kérdéseket és észrevételeidet a lacimol kukatc gmail pont com címre tudod elküldeni.

Üdv:
lacimol ()

Legutóbbi bejegyzések

Nincs megjeleníthető elem

Címkék

JiraDevTutor

Nincs megjeleníthető elem

Friss topikok

29.
július

Jira plugin fejlesztés 7.

időzített feladatok - SAL scheduling |  lacimol

Mi az a SAL?

A SAL a Shared Access Layer rövidítése. Segítségével Atlassian termékfüggetlen plugin kód írható, azaz nem kifejezetten a JIRA vagy Confluence alatt működő, hanem mindkettő által használható közös elem lehet (pl: időzített feladatok).

Ismétlődő feladatok kezelése

Az időzített taszkok egy felhasználási módját megmutatja a JIRA scheduling példa, amit kisebb átalakítással a Todo példánkba is felhasználhatunk. Akkor érdemes ilyen időzítést használunk, ha nagy számítás vagy időigényű háttérfeladatot futtatunk vagy nincs jelentősége az eredmény azonnali megjelenítésének (pl: nagy adathalmazok összefésülése, rendszer monitorozás), esetleg egy bizonyos feladatot időponthoz kötötten vagy ismételődően kell megvalósítanunk (pl: éjszakai adatátadások). A saját példába átültetett kód által végzett feladat nem ilyen, csak az időzítés bemutatását szolgálja.

JIRA scheduling

A plugin SDK ad egy alap szerkezetet az időzítés implementálásához, így nem kell Quartz job-okat megírnunk, hanem használhatjuk a belső megoldásokat. A Todo példában beállítunk egy percenkénti ismétlődést, ami létrehoz egy új rekordot a Todo táblában, majd az INFO logba kiírja, hogy lefutott a taszk. A TodoTask végzi az ismétlődő feladatot, a TodoMonitorImpl pedig időzít és eltárolja az esetleges eredményeket.

TodoTask.java

public class TodoTask implements PluginJob {
	
	private final static Logger logger = LoggerFactory.getLogger(TodoTask.class);
	
	@Override
	public void execute(Map<String, Object> jobDataMap) {
		
		final TodoMonitor monitor = (TodoMonitor) jobDataMap.get("TodoMonitorImpl:instance");
		final TodoService service = (TodoService) jobDataMap.get("TodoService");
		
		Date now = DateTime.now().toDate();
		service.create("TodoTask description " + now.getTime());
		monitor.setLastRun(now);
		logger.info("TodoTask executed at " + monitor.getLastRun());
	}
}

TodoMonitorImpl.java

public class TodoMonitorImpl implements TodoMonitor, LifecycleAware {
	
	private final static Logger logger = LoggerFactory.getLogger(TodoMonitorImpl.class);
	private static final String JOB_NAME = TodoMonitorImpl.class.getName() + ":job";
	private static final long INTERVAL = DateTimeConstants.MILLIS_PER_MINUTE;
	
	private final PluginScheduler pluginScheduler;
	private TodoService todoService;
	private Date lastRun;
	
	private HashMap<String, Object> jobDataMap = new HashMap<String, Object>();
	
	public TodoMonitorImpl(PluginScheduler pluginScheduler, TodoService todoService) {
		this.pluginScheduler = pluginScheduler;
		this.todoService = todoService;
	}
	
	@Override
	public void schedule() {
		
		jobDataMap.put("TodoMonitorImpl:instance", TodoMonitorImpl.this);
		jobDataMap.put("TodoService", todoService);
		
		Date startTime = DateTime.now().toDate();
		pluginScheduler.scheduleJob(JOB_NAME, TodoTask.class, jobDataMap, startTime, INTERVAL);
		
		logger.info(String.format("TodoMonitorImpl scheduled to run every %d ms", INTERVAL));
		
	}
	
	@Override
	public void onStart() {
		schedule();
	}
	
	@Override
	public void setLastRun(Date lastRun) {
		this.lastRun = lastRun;
	}
	
	@Override
	public Date getLastRun() {
		return lastRun;
	}
	
}
[INFO] hu.lacimol.tutorial.todo.scheduling.TodoMonitorImpl - TodoMonitorImpl scheduled to run every 60000 ms
[INFO] Starting Coyote HTTP/1.1 on http-2990
[DEBUG] net.java.ao.sql - INSERT INTO AO_595B84_TODO (ID) VALUES (NULL)
[DEBUG] net.java.ao.sql - UPDATE PUBLIC.AO_595B84_TODO SET DESCRIPTION = ?,COMPLETE = ? WHERE ID = ?
[INFO] hu.lacimol.tutorial.todo.scheduling.TodoTask - TodoTask executed at Wed Jul 17 21:07:53 CEST 2013
[INFO] Server startup in 68986 ms
[INFO] Tomcat 6.x started on port [2990]
[INFO] jira started successfully in 113s at http://Laci-PC:2990/jira
[INFO] Type Ctrl-D to shutdown gracefully
[INFO] Type Ctrl-C to exit
[DEBUG] net.java.ao.sql - INSERT INTO AO_595B84_TODO (ID) VALUES (NULL)
[DEBUG] net.java.ao.sql - UPDATE PUBLIC.AO_595B84_TODO SET DESCRIPTION = ?,COMPLETE = ? WHERE ID = ?
[INFO] hu.lacimol.tutorial.todo.scheduling.TodoTask - TodoTask executed at Wed Jul 17 21:08:52 CEST 2013

Az eredmény

Két perc futás után a lenti lista két új elemmel bővült:

scheduilng_view.png

A fenti módosítások letölthetők SVN-en keresztül és becsomagolva a blog GoogleCode oldaláról a JiraDevTutor projektből.

Címkék: jira sal scheduling

komment

süti beállítások módosítása