karaf no muestra ningún error mientras que el ejemplo de fábrica de componentes
He intentado ejemplo de fábrica de componentes de estoenlazar. interfaz:
package com.java.examplefactoryservice;
public interface ExampleFactoryService {
public void start();
public void stop();
}
proveedor de fábrica:
package com.java.examplecomponentfactoryserviceprovider;
import java.util.Map;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import com.java.examplefactoryservice.ExampleFactoryService;
@Component(name = "ExampleComponentFactoryServiceProvider", factory = "example.factory.provider")
public class ExampleComponentFactoryServiceProvider implements ExampleFactoryService {
@Activate
public void activate(Map<String, Object> properties) {
System.out.println("Actiavted!!!");
}
@Override
public void start() {
System.out.println("Started !!!!");
}
@Override
public void stop() {
System.out.println("Stopped!!!");
}
}
gerente de la fábrica:
package com.java.examplecomponentfatorymanager;
import java.util.Map;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.osgi.service.component.ComponentFactory;
import org.osgi.service.component.ComponentInstance;
import com.java.examplefactoryservice.ExampleFactoryService;
@Component(name = "ExampleComponentFactoryManager", enabled = true, immediate = true)
public class ExampleComponentFactoryManager {
@Reference(target = "(component.factory=example.factory.provider)", bind = "setFactory", unbind = "unsetFactory")
private ComponentFactory factory;
private ComponentInstance instance;
private ExampleFactoryService service;
@Activate
public void activate(Map<String, Object> properties) {
System.out.println("activate in manager !!!!");
instance = factory.newInstance(null);
service = (ExampleFactoryService) instance.getInstance();
System.out.println("service = " + service.toString());
}
public void setFactory(final ComponentFactory factory) {
this.factory = factory;
System.out.println("setfactory called");
}
public void unsetFactory(ComponentFactory factory) {
this.factory = null;
System.out.println("Unset factory called");
}
}
Todo compilado bien e instalado en karaf 2.3.10. La fábrica está registrada con éxito. Pero no se ha mostrado nada.
salida karaf:
[ 71] [Active ] [ ] [ 80] osgi.cmpn (4.3.1.201210102024)
[ 79] [Active ] [ ] [ 80] testI (0.0.1.SNAPSHOT)
[ 80] [Active ] [ ] [ 80] testImpl (0.0.3.SNAPSHOT)
[ 110] [Active ] [ ] [ 80] Apache Felix Declarative Services (1.6.0)
[ 140] [Active ] [ ] [ 80] ExampleFactoryService (0.0.1.SNAPSHOT)
[ 152] [Active ] [ ] [ 80] ExampleComponentFactoryServiceProvider (0.0.1.SNAPSHOT)
[ 158] [Active ] [ ] [ 80] ExampleComponentFatoryManager (0.0.1.SNAPSHOT)
scr: salida de la lista
[9 ] [FACTORY ] ExampleComponentFactoryServiceProvider
scr: detalles
scr:deactivate scr:details
karaf@root> scr:details ExampleComponentFactoryServiceProvider
Component Details
Name : ExampleComponentFactoryServiceProvider
State : FACTORY
Properties :
service.vendor=The Apache Software Foundation
component.factory=example.factory.provider
component.name=ExampleComponentFactoryServiceProvider
References
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ExampleComponentFatoryManager</groupId>
<artifactId>ExampleComponentFatoryManager</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<version>2.3.5</version>
<configuration>
<instructions>
<Import-Package>
*,
javax.servlet*;version="[2.5,4)"
</Import-Package>
</instructions>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-scr-plugin</artifactId>
<version>1.14.0</version>
<executions>
<execution>
<id>generate-scr-scrdescriptor</id>
<goals>
<goal>scr</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.annotations</artifactId>
<version>1.9.6</version>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.osgi.compendium</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>4.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ExampleFactoryService</groupId>
<artifactId>ExampleFactoryService</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
Inicialmente intenté en la línea de comando karaf instalar un paquete en lugar de nombre, muestra la ruta absoluta del paquete. Después de algún tiempo lo intenté poniendo el paquete en implementación, muestra el nombre exacto del paquete. No entendí el comportamiento de karaf por qué no muestra el nombre del paquete al realizar la instalación correcta de la línea de comandos. Y no muestra ningún error [dependencia / compilación / wiredexecption]. ¿Alguien puede decirme qué hay de malo en el paquete?