As Tim explained your bundle has the requirement for a LogService OSGi service in its Manifest. Since I think karaf 4.0.5 requirements for services are also checked by the feature service of karaf. In version before these requirements were ignored.

The problem now is that not all bundles that provide such services also define a capability for them in their Manifest. So while the actually is a LogService in karaf that is provided by pax logging this service is not announced statically in the Manifest using a Provide-Capability header. So in fact this is a bug in pax-logging as it should provide the capability. I will take care of an issue and fix at pax logging.

You can fix this quickly by either switching off the functionality of karaf to look into service requirements or by providing the capability in config.

1. Edit etc/org.apache.karaf.features.cfg and set
serviceRequirements=disable

2. Edit etc/config.properties and a line to
org.osgi.framework.system.capabilities=
osgi.service;effective:=active;objectClass=org.osgi.service.log.LogService

The solution 2 wrongly attributes the LogService to the system bundle but this should still work.

Christian

On 22.02.2017 10:09, Timothy Ward wrote:
The missing requirement indicates that you need a Log Service implementation 
(i.e. someone to provide you with the service). The dependency that you’re 
compiling against is just the API (which is a good thing to compile against) 
but you actually need an implementation at runtime. Your build tools know that 
you need this service, and so have added a requirement for the service to your 
bundle. Your bundle therefore will not resolve until you have installed a 
bundle which declares that it provides the service!

Regards,

Tim

On 22 Feb 2017, at 09:05, Olivier21 <[email protected]> wrote:

Hello,

I developed a SOAP service which is encapsulated in a kar archive. Then, I
made a custom karaf distribution from Karaf 4.0.4. Everything works fine (no
error message in the log files and the service works fine).

The problem is when I try to do the same thing with Karaf 4.0.8, I got this
message during the deployement :

missing requirement [...] osgi.service; effective:=active;
filter:="(objectClass=org.osgi.service.log.LogService)"

How can I inject the service "org.osgi.service.log.LogService"?

In my class, I have :

protected LogService logService;

public void setLogService( final LogService logService )
{
        this.logService = logService;
}


In the file pom.xml, I have :
<dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.service.log</artifactId>
</dependency>

Must I use <import-service> and if yes, what must be the contain of this
element?

It seems that the LogService service is not satisfied anymore and it seems
to be the same problem that is specified here :
http://karaf.922171.n3.nabble.com/VOTE-Apache-Karaf-Container-4-0-6-release-td4047647.html

Please, could you help me please?

Olivier




--
View this message in context: 
http://karaf.922171.n3.nabble.com/missing-requirement-osgi-service-effective-active-filter-objectClass-org-osgi-service-log-LogService-tp4049593.html
Sent from the Karaf - User mailing list archive at Nabble.com.


--
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com

Reply via email to