Hi All,
I have an OSGI component and inside that I have used @Reference(policyOption = ReferencePolicyOption.GREEDY) for the below interfaces,
protected HybrisConnection connection;
protected HybrisFactory hybrisFactory;
Once I install the bundle in AEM I'm getting unsatisfied (Reference) error for HybrisFactory (No service bound). The same @Reference I have used for HybrisConnection and its satisfied. For reference I have provide the screen shot. can anyone help me to resolve this?
The generated XML file is below,
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.3.0" name="soa.sample.aem.core.commerce.hybris.importer.DefaultHybrisImporter" activate="activate" deactivate="deactivate">
<implementation class="soa.sample.aem.core.commerce.hybris.importer.DefaultHybrisImporter"/>
<service>
<provide interface="soa.sample.aem.core.commerce.hybris.importer.DefaultHybrisImporter"/>
<provide interface="soa.sample.aem.core.commerce.hybris.importer.HybrisImporter"/>
</service>
<reference name="DeviceProductTransformer" interface="soa.sample.aem.core.commerce.hybris.importer.transformer.DeviceProductTransformer" bind="bindDeviceProductTransformer" unbind="unbindDeviceProductTransformer"/>
<reference name="HybrisConnection" interface="soa.sample.aem.core.commerce.hybris.connection.HybrisConnection" bind="bindHybrisConnection" unbind="unbindHybrisConnection" policy-option="greedy"/>
<reference name="ImportHandler" interface="soa.sample.aem.core.commerce.hybris.importer.ImportHandler" bind="bindImportHandler" unbind="unbindImportHandler" policy-option="greedy"/>
<reference name="Replicator" interface="com.day.cq.replication.Replicator" bind="bindReplicator" unbind="unbindReplicator"/>
<reference name="ServiceAddOnTransformer" interface="soa.sample.aem.core.commerce.hybris.importer.transformer.ServiceAddOnTransformer" bind="bindServiceAddOnTransformer" unbind="unbindServiceAddOnTransformer"/>
<reference name="ServicePlanTransformer" interface="soa.sample.aem.core.commerce.hybris.importer.transformer.ServicePlanTransformer" bind="bindServicePlanTransformer" unbind="unbindServicePlanTransformer"/>
<reference name="HybrisFactory" interface="soa.sample.aem.core.commerce.hybris.api.HybrisFactory" bind="bindHybrisFactory" unbind="unbindHybrisFactory" policy-option="greedy"/>
<property name="getConnectionThreadPoolSize" type="Integer" value="2"/>
<property name="hybris.import.products.path" type="String" value="/etc/commerce/products"/>
<property name="hybris.import.product.asset.removal.enabled" type="String" value=" true"/>
<property name="getProductsPath" type="String" value="/etc/commerce/products"/>
<property name="hybris.import.product.removal.enabled" type="String" value="true"/>
<property name="getExportFields" type="String" value="DEFAULT"/>
<property name="hybris.import.export.fields" type="String" value="DEFAULT"/>
<property name="sample.hybris.connection.threadpoolsize" type="String" value="2"/>
<property name="hybris.import.pagesize" type="String" value="2147483647"/>
<property name="getPageSize" type="Integer" value="2147483647"/>
<property name="getProductRemovalEnabled" type="Boolean" value="true"/>
<property name="getProductAssetRemovalEnabled" type="Boolean" value="true"/>
<property name="commerceProvider" type="String" value="hybris"/>
</scr:component>
Sample piece of code:
protected HybrisConnection connection;
protected HybrisFactory hybrisFactory;
@Reference(policyOption = ReferencePolicyOption.GREEDY)
public void bindHybrisConnection(HybrisConnection connection) {
this.connection = connection;
}
public void unbindHybrisConnection(HybrisConnection connection) {
this.connection = connection;
}
@Reference(policyOption = ReferencePolicyOption.GREEDY)
public void bindHybrisFactory(HybrisFactory hybrisFactory) {
this.hybrisFactory = hybrisFactory;
}
public void unbindHybrisFactory(HybrisFactory hybrisFactory) {
this.hybrisFactory = hybrisFactory;
}
Feike Visser smacdonald2008 dgordon86 navneetjain Arun Patidar Rima Mittal Ratna Kumar vjharry0123 ronnyfm vitis90 edubey
Thanks,
Vijay
Views
Replies
Total Likes
Are you following an online doc - if so please point community to it.
An unsatisfied Reference typically means that there is no target service available in the service registry. Therefore your component is not satisfied.
Views
Replies
Total Likes
Hi Scott,
I have used like this below and now the component is active. But not sure is it a correct way to activate the component.
@Reference(policyOption = ReferencePolicyOption.GREEDY, cardinality =
ReferenceCardinality.OPTIONAL)
public void bindHybrisFactory(HybrisFactory hybrisFactory) {
this.hybrisFactory = hybrisFactory;
}
public void unbindHybrisFactory(HybrisFactory hybrisFactory) {
this.hybrisFactory = hybrisFactory;
}
Got the below input from this link,https://osgi.org/specification/osgi.cmpn/7.0.0/service.component.html . Seems I should use 0..1? am I right?
Thanks,
Vijay
Views
Replies
Total Likes
Looks like you are trying to use dependency injection in a bind method following that doc.
To use dependency injection, there is no need to place the @Reference within any specific method in Java. You can place @Refenence in a a Java class that uses @Component and then use that object in methods. See this article where we use this annotation.
@Component
public
class
EmployeeImpl
implements
EmployeeInter {
/** Default log. */
protected
final
Logger log = LoggerFactory.getLogger(
this
.getClass());
private
Session session;
//Inject a Sling ResourceResolverFactory
@Reference
private
ResourceResolverFactory resolverFactory;
See -- Adobe Experience Manager Help | Querying Adobe Experience Manager 6.4 JCR data
This is how you can use any of the Services within AEM. If @Reference does not work - then the service is not available within AEM.
Views
Replies
Total Likes
Views
Like
Replies
Views
Likes
Replies