1
+ package com.neva.javarel.processing.scheduler.impl
2
+
3
+ import com.neva.javarel.foundation.api.lang.ReflectionUtils
4
+ import com.neva.javarel.foundation.api.injection.Osgi
5
+ import com.neva.javarel.foundation.api.osgi.OsgiUtils
6
+ import org.quartz.Job
7
+ import org.quartz.Scheduler
8
+ import org.quartz.SchedulerException
9
+ import org.quartz.spi.JobFactory
10
+ import org.quartz.spi.TriggerFiredBundle
11
+ import org.slf4j.LoggerFactory
12
+
13
+ class OsgiJobFactory : JobFactory {
14
+
15
+ companion object {
16
+ val LOG = LoggerFactory .getLogger(OsgiJobFactory ::class .java)
17
+ }
18
+
19
+ override fun newJob (bundle : TriggerFiredBundle , scheduler : Scheduler ): Job {
20
+ val jobDetail = bundle.jobDetail
21
+ val clazz = jobDetail.jobClass
22
+
23
+ if (LOG .isDebugEnabled) {
24
+ LOG .debug(" Producing instance of Job '" + jobDetail.key + " ', class=" + clazz.name)
25
+ }
26
+
27
+ val job = try {
28
+ clazz.newInstance()
29
+ } catch (e: Exception ) {
30
+ throw SchedulerException (" Problem instantiating class '" + clazz.name + " '" , e)
31
+ }
32
+
33
+ ReflectionUtils .getInheritedFields(job.javaClass).forEach { field ->
34
+ if (field.isAnnotationPresent(Osgi ::class .java)) {
35
+ val service = OsgiUtils ().serviceOf(field.type)
36
+ val accessible = field.isAccessible
37
+
38
+ field.isAccessible = true
39
+ field.set(job, service)
40
+ field.isAccessible = accessible
41
+ }
42
+ }
43
+
44
+ return job
45
+ }
46
+
47
+ }
0 commit comments