Below is the code of my simple OSGi component
@Component(metatype = true, label = "My Component", policy = ConfigurationPolicy.REQUIRE)
@Property(label = "My Component expression", name = "my.expression", value = "/5 * * * * ? *")
public class MyComponent {
private static final Logger log = LoggerFactory.getLogger(MyComponent.class);
@Reference
private Scheduler scheduler;
@Activate
public void activate(final ComponentContext context) {
final String quartzExpression = PropertiesUtil.toString(
context.getProperties().get("my.expression"), "");
ScheduleOptions options = scheduler.EXPR(quartzExpression).name("MyJob");
scheduler.schedule(new Runnable() {
@Override
public void run() {
log.info("Hello World!");
}
}, options);
}
}
What he should do: he takes a configuration value, which is an expression of quartz, and uses it to schedule a task that registers a simple greeting.
, 5 , . , ConfigurationPolicy.REQUIRE, . OSGi, My Component . . , , , , . /5\\ *\\ *\\ *\\ *\\ ?\\ * /5\ *\ *\ *\ *\ ?\ *.
, , , . : , , , OSGi ?
: , , Maven SCR, . : .\target\classes\OSGI-INF\MyComponent.xml:
<?xml version="1.0" encoding="UTF-8"?><components xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">
<scr:component name="MyComponent" configuration-policy="require" activate="activate">
<implementation class="MyComponent"/>
<property name="my.expression" value="/5 * * * * ? *"/>
<property name="service.pid" value="MyComponent"/>
<reference name="scheduler" interface="org.apache.sling.commons.scheduler.Scheduler" cardinality="1..1" policy="static" bind="bindScheduler" unbind="unbindScheduler"/>
</scr:component>
</components>
: .\target\classes\OSGI-INF\metatype\MyComponent.xml
<?xml version="1.0" encoding="UTF-8"?><metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0" localization="OSGI-INF/metatype/MyComponent">
<OCD id="MyComponent" name="%MyComponent.name" description="%MyComponent">
<AD id="my.expression" type="String" name="%MyComponent.my.expression" />
</OCD>
<Designate pid="MyComponent">
<Object ocdref="MyComponent"/>
</Designate>
</metatype:MetaData>
, metatype .