Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn More

View all

Sign in to view all badges

OSGI component - unsatisfied Reference, No service bound issue in AEM 6.4

Avatar

Avatar
Give Back 5
Level 2
sivas61374651
Level 2

Likes

2 likes

Total Posts

37 posts

Correct Reply

0 solutions
Top badges earned
Give Back 5
Give Back 3
Give Back
Ignite 1
Validate 1
View profile

Avatar
Give Back 5
Level 2
sivas61374651
Level 2

Likes

2 likes

Total Posts

37 posts

Correct Reply

0 solutions
Top badges earned
Give Back 5
Give Back 3
Give Back
Ignite 1
Validate 1
View profile
sivas61374651
Level 2

05-09-2018

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?

1564570_pastedImage_1.png

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 Vissersmacdonald2008dgordon86navneetjainArun PatidarRima MittalRatna Kumarvjharry0123ronnyfmvitis90edubey

Thanks,

Vijay

Replies

Avatar

Avatar
Validate 25
Level 10
smacdonald2008
Level 10

Likes

1,408 likes

Total Posts

12,671 posts

Correct Reply

2,278 solutions
Top badges earned
Validate 25
Validate 10
Validate 1
Give back 900
Give back 600
View profile

Avatar
Validate 25
Level 10
smacdonald2008
Level 10

Likes

1,408 likes

Total Posts

12,671 posts

Correct Reply

2,278 solutions
Top badges earned
Validate 25
Validate 10
Validate 1
Give back 900
Give back 600
View profile
smacdonald2008
Level 10

05-09-2018

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.

Avatar

Avatar
Give Back 5
Level 2
sivas61374651
Level 2

Likes

2 likes

Total Posts

37 posts

Correct Reply

0 solutions
Top badges earned
Give Back 5
Give Back 3
Give Back
Ignite 1
Validate 1
View profile

Avatar
Give Back 5
Level 2
sivas61374651
Level 2

Likes

2 likes

Total Posts

37 posts

Correct Reply

0 solutions
Top badges earned
Give Back 5
Give Back 3
Give Back
Ignite 1
Validate 1
View profile
sivas61374651
Level 2

05-09-2018

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?

1564845_pastedImage_1.png

Thanks,

Vijay

Avatar

Avatar
Validate 25
Level 10
smacdonald2008
Level 10

Likes

1,408 likes

Total Posts

12,671 posts

Correct Reply

2,278 solutions
Top badges earned
Validate 25
Validate 10
Validate 1
Give back 900
Give back 600
View profile

Avatar
Validate 25
Level 10
smacdonald2008
Level 10

Likes

1,408 likes

Total Posts

12,671 posts

Correct Reply

2,278 solutions
Top badges earned
Validate 25
Validate 10
Validate 1
Give back 900
Give back 600
View profile
smacdonald2008
Level 10

05-09-2018

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.