OSGi Services
Learn the basics of OSGi services development, including:
- How to convert a Java POJO into an OSGi Service
- How to bind an OSGi Service to a Java interface
Resources
Code
Activities.java
/core/src/main/java/com/adobe/aem/wknd/examples/core/adventures/Activities.java
package com.adobe.aem.wknd.examples.core.adventures;
import org.osgi.annotation.versioning.ProviderType;
@ProviderType
public interface Activities {
String getRandomActivity();
}
ActivitiesImpl.java
/core/src/main/java/com/adobe/aem/wknd/examples/core/adventures/impl/ActivitiesImpl.java
package com.adobe.aem.wknd.examples.core.adventures.impl;
import java.util.Random;
import com.adobe.aem.wknd.examples.core.adventures.Activities;
import org.osgi.service.component.annotations.Component;
@Component(
service = { Activities.class }
)
public class ActivitiesImpl implements Activities {
private static final String[] ACTIVITIES = new String[] {
"Camping", "Skiing", "Skateboarding"
};
//private final int randomIndex = new Random().nextInt(ACTIVITIES.length);
private final Random random = new Random();
/**
* @return the name of a random WKND adventure activity
*/
public String getRandomActivity() {
int randomIndex = random.nextInt(ACTIVITIES.length);
return ACTIVITIES[randomIndex];
}
}
package-info.java
/core/src/main/java/com/adobe/aem/wknd/examples/core/adventures/package-info.java
@Version("1.0")
package com.adobe.aem.wknd.examples.core.adventures;
import org.osgi.annotation.versioning.Version;
Adding a package-info.java
is required to ensure other OSGi bundles in AEM can resolve the OSGi service interface (or any Java class). If the package-info.java
is missing, the Java package and its Java interfances or classes are not exported. Other OSGi bundles trying to import these Java interfaces or classes from this Java package, will error with the message Cannot be resolved in AEM’s OSGi Bundle console.
recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69