Platform: Java 1.8, karaf 4.1.3

I have the following DS component that exposes a Servlet to the Pax Web
Whiteboard Extender:
 
https://github.com/steinarb/sonar-collector/blob/master/sonar-collector-webhook/src/main/java/no/priv/bang/sonar/collector/webhook/SonarCollectorServlet.java#L55

The component starts fine, and exposes a Servlet service that is picked
up by the whiteboard extender, and as far as I can tell, it does what it
is expected to do (receive POSTs from SonarQube/SonarCloud and store
build statistics in a PostgreSQL database).

However, if I add an empty activate method, like so:
 @Component(service={Servlet.class}, property={"alias=/sonar-collector"} )
 public class SonarCollectorServlet extends HttpServlet {
     ...
     @Activate
     public void activate(Map<String, Object> config) {
     }
     ...
 }

then the component fails to load, because of missing dependencies:
 karaf@root()> feature:repo-add 
mvn:no.priv.bang.sonar.sonar-collector/sonar-collector-webhook/LATEST/xml/features
 Adding feature url 
mvn:no.priv.bang.sonar.sonar-collector/sonar-collector-webhook/LATEST/xml/features
 karaf@root()> feature:install sonar-collector-webhook
 Error executing command: Unable to resolve root: missing requirement [root] 
osgi.identity; osgi.identity=sonar-collector-webhook; type=karaf.feature; 
version="[1.0.0.SNAPSHOT,1.0.0.SNAPSHOT]"; 
filter:="(&(osgi.identity=sonar-collector-webhook)(type=karaf.feature)(version>=1.0.0.SNAPSHOT)(version<=1.0.0.SNAPSHOT))"
 [caused by: Unable to resolve sonar-collector-webhook/1.0.0.SNAPSHOT: missing 
requirement [sonar-collector-webhook/1.0.0.SNAPSHOT] osgi.identity; 
osgi.identity=no.priv.bang.sonar.sonar-collector-webhook; type=osgi.bundle; 
version="[1.0.0.SNAPSHOT,1.0.0.SNAPSHOT]"; resolution:=mandatory [caused by: 
Unable to resolve no.priv.bang.sonar.sonar-collector-webhook/1.0.0.SNAPSHOT: 
missing requirement [no.priv.bang.sonar.sonar-collector-webhook/1.0.0.SNAPSHOT] 
osgi.service; effective:=ac
 tive; filter:="(objectClass=org.osgi.service.jdbc.DataSourceFactory)"]]
 karaf@root()>

If remove the "@Activate" annotation, the component loads again.

Does anyone know what might cause this?

What's strange about this, that the missing depenency the error message
complains about, ie. org.osgi.service.jdbc.DataSourceFactory, is
essential to the servlet's operation.  Without a DataSourceFactory, no
database can be contacted and no data can be saved (and data _is_ saved).

Is the error message because the bundle can't find the type
org.osgi.service.jdbc.DataSourceFactory? Or is the message about not
getting an instance of org.osgi.service.jdbc.DataSourceFactory?

The full error message from karaf.log below.

Thanks!


- Steinar

Error message from karaf.log follows:

2017-12-04T20:28:57,555 | ERROR | Karaf local console user karaf | ShellUtil    
                    | 42 - org.apache.karaf.shell.core - 4.1.3 | Exception 
caught while executing command
org.osgi.service.resolver.ResolutionException: Unable to resolve root: missing 
requirement [root] osgi.identity; osgi.identity=sonar-collector-webhook; 
type=karaf.feature; version="[1.0.0.SNAPSHOT,1.0.0.SNAPSHOT]"; 
filter:="(&(osgi.identity=sonar-collector-webhook)(type=karaf.feature)(version>=1.0.0.SNAPSHOT)(version<=1.0.0.SNAPSHOT))"
 [caused by: Unable to resolve sonar-collector-webhook/1.0.0.SNAPSHOT: missing 
requirement [sonar-collector-webhook/1.0.0.SNAPSHOT] osgi.identity; 
osgi.identity=no.priv.bang.sonar.sonar-collector-webhook; type=osgi.bundle; 
version="[1.0.0.SNAPSHOT,1.0.0.SNAPSHOT]"; resolution:=mandatory [caused by: 
Unable to resolve no.priv.bang.sonar.sonar-collector-webhook/1.0.0.SNAPSHOT: 
missing requirement [no.priv.bang.sonar.sonar-collector-webhook/1.0.0.SNAPSHOT] 
osgi.s
 ervice; effective:=active; 
filter:="(objectClass=org.osgi.service.jdbc.DataSourceFactory)"]]
        at 
org.apache.felix.resolver.ResolutionError.toException(ResolutionError.java:42) 
~[?:?]
        at 
org.apache.felix.resolver.ResolverImpl.doResolve(ResolverImpl.java:391) ~[?:?]
        at 
org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:377) ~[?:?]
        at 
org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:349) ~[?:?]
        at 
org.apache.karaf.features.internal.region.SubsystemResolver.resolve(SubsystemResolver.java:218)
 ~[?:?]
        at 
org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:291) 
~[?:?]
        at 
org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1248)
 ~[?:?]
        at 
org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$1(FeaturesServiceImpl.java:1147)
 ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
[?:?]
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
[?:?]
        at java.lang.Thread.run(Thread.java:748) [?:?]



Reply via email to