2015-11-10 3 views
0

Я пытаюсь развернуть простой маршрут верблюда к экземпляру JBoss Fuse 6.2; однако у меня возникают проблемы с корректным определением зависимостей при попытке использовать конечную точку Netty4.Определение зависимости Netty4 при использовании Fabric8 для развертывания в JBoss Fuse

Я начал с базовым примером чертежа архетипа:

blueprint.xml

<?xml version="1.0" encoding="UTF-8"?> 
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" 
     http://www.osgi.org/xmlns/blueprint/v1.0.0 
     http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd 
     http://camel.apache.org/schema/blueprint 
     http://camel.apache.org/schema/blueprint/camel-blueprint.xsd"> 

    <camelContext xmlns="http://camel.apache.org/schema/blueprint"> 
    <route> 
    <from uri="timer:foo?period=5000"/> 
    <log message="Message Received"/> 
    </route> 
</camelContext> 

</blueprint> 

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
          http://maven.apache.org/xsd/maven-4.0.0.xsd" 
     xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>uk.co.example</groupId> 
    <artifactId>messageprocessor</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>bundle</packaging> 
    <name>Camel Blueprint Route</name> 
    <properties> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    <camel.plugin.version>2.15.1.redhat-620133</camel.plugin.version> 
    <fabric8.version>1.2.0.redhat-133</fabric8.version> 
    <fabric8.features>camel-jms activemq-camel</fabric8.features> 
    <fabric8.featureRepos>mvn:org.apache.camel.karaf/apache-camel/${version:camel}/xml/features</fabric8.featureRepos> 
    <jdk.version>1.8</jdk.version> 
    <jboss.fuse.bom.version>6.2.0.redhat-133</jboss.fuse.bom.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>org.jboss.fuse.bom</groupId> 
     <artifactId>jboss-fuse-parent</artifactId> 
     <version>${jboss.fuse.bom.version}</version> 
     <type>pom</type> 
     <scope>import</scope> 
     </dependency> 
    </dependencies> 
    </dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-core</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-blueprint</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-jms</artifactId> 
    </dependency> 
    </dependencies> 
    <repositories> 
    <repository> 
     <releases> 
     <enabled>true</enabled> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>release.fusesource.org</id> 
     <name>FuseSource Release Repository</name> 
     <url>http://repo.fusesource.com/nexus/content/repositories/releases</url> 
    </repository> 
    <repository> 
     <releases> 
     <enabled>true</enabled> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>ea.fusesource.org</id> 
     <name>FuseSource Community Early Access Release Repository</name> 
     <url>http://repo.fusesource.com/nexus/content/groups/ea</url> 
    </repository> 
    </repositories> 
    <pluginRepositories> 
    <pluginRepository> 
     <releases> 
     <enabled>true</enabled> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>release.fusesource.org</id> 
     <name>FuseSource Release Repository</name> 
     <url>http://repo.fusesource.com/nexus/content/repositories/releases</url> 
    </pluginRepository> 
    <pluginRepository> 
     <releases> 
     <enabled>true</enabled> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>ea.fusesource.org</id> 
     <name>FuseSource Community Early Access Release Repository</name> 
     <url>http://repo.fusesource.com/nexus/content/groups/ea</url> 
    </pluginRepository> 
    </pluginRepositories> 
    <build> 
    <defaultGoal>install</defaultGoal> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.5.1</version> 
     <configuration> 
      <source>${jdk.version}</source> 
      <target>${jdk.version}</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <encoding>UTF-8</encoding> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <version>2.3.7</version> 
     <extensions>true</extensions> 
     <configuration> 
      <instructions> 
      <Bundle-SymbolicName>messageprocessor</Bundle-SymbolicName> 
      <Private-Package>uk.co.example.messageprocessor.*</Private-Package> 
      <Import-Package>*</Import-Package> 
      </instructions> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-maven-plugin</artifactId> 
     <version>2.15.1.redhat-620133</version> 
     <configuration> 
      <useBlueprint>true</useBlueprint> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>io.fabric8</groupId> 
     <artifactId>fabric8-maven-plugin</artifactId> 
     <version>${fabric8.version}</version> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Если развернуть с помощью ткани: развернуть , это прекрасно работает. Я получаю действительный профиль, который можно добавить в контейнер, и будет регистрировать сообщение каждые 5 секунд, как ожидалось.

Однако, если я попытаюсь добавить ссылку на Netty4, это не сработает. В JBoss Dev Studio я удалил конечную точку таймера и заменил ее Netty4.

blueprint.xml

<?xml version="1.0" encoding="UTF-8"?> 
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" 
     http://www.osgi.org/xmlns/blueprint/v1.0.0 
     http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd 
     http://camel.apache.org/schema/blueprint 
     http://camel.apache.org/schema/blueprint/camel-blueprint.xsd"> 

    <camelContext xmlns="http://camel.apache.org/schema/blueprint"> 
    <route> 
     <from uri="netty4:tcp://localhost:9999"/> 
     <log message="Message Received"/> 
    </route> 
    </camelContext> 

</blueprint> 

Это изменение автоматически добавляется верблюжьей-netty4 зависимости к POM XML. Я подумал, что для того, чтобы сообщить Fabric8 об этой новой зависимости, мне нужно будет добавить эту ссылку к материалам fabric8.features, поэтому я сделал это.

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>uk.co.example</groupId> 
    <artifactId>messageprocessor</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>bundle</packaging> 
    <name>Camel Blueprint Route</name> 
    <properties> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    <camel.plugin.version>2.15.1.redhat-620133</camel.plugin.version> 
    <fabric8.version>1.2.0.redhat-133</fabric8.version> 
    <fabric8.features>camel-jms activemq-camel camel-netty4</fabric8.features> 
    <fabric8.featureRepos>mvn:org.apache.camel.karaf/apache-camel/${version:camel}/xml/features</fabric8.featureRepos> 
    <jdk.version>1.8</jdk.version> 
    <jboss.fuse.bom.version>6.2.0.redhat-133</jboss.fuse.bom.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>org.jboss.fuse.bom</groupId> 
     <artifactId>jboss-fuse-parent</artifactId> 
     <version>${jboss.fuse.bom.version}</version> 
     <type>pom</type> 
     <scope>import</scope> 
     </dependency> 
    </dependencies> 
    </dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-core</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-blueprint</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.activemq</groupId> 
     <artifactId>activemq-camel</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-jms</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-netty4</artifactId> 
     <version>2.15.1.redhat-620133</version> 
    </dependency> 
    </dependencies> 
    <repositories> 
    <repository> 
     <releases> 
     <enabled>true</enabled> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>release.fusesource.org</id> 
     <name>FuseSource Release Repository</name> 
     <url>http://repo.fusesource.com/nexus/content/repositories/releases</url> 
    </repository> 
    <repository> 
     <releases> 
     <enabled>true</enabled> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>ea.fusesource.org</id> 
     <name>FuseSource Community Early Access Release Repository</name> 
     <url>http://repo.fusesource.com/nexus/content/groups/ea</url> 
    </repository> 
    </repositories> 
    <pluginRepositories> 
    <pluginRepository> 
     <releases> 
     <enabled>true</enabled> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>release.fusesource.org</id> 
     <name>FuseSource Release Repository</name> 
     <url>http://repo.fusesource.com/nexus/content/repositories/releases</url> 
    </pluginRepository> 
    <pluginRepository> 
     <releases> 
     <enabled>true</enabled> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>ea.fusesource.org</id> 
     <name>FuseSource Community Early Access Release Repository</name> 
     <url>http://repo.fusesource.com/nexus/content/groups/ea</url> 
    </pluginRepository> 
    </pluginRepositories> 
    <build> 
    <defaultGoal>install</defaultGoal> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.5.1</version> 
     <configuration> 
      <source>${jdk.version}</source> 
      <target>${jdk.version}</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <encoding>UTF-8</encoding> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <version>2.3.7</version> 
     <extensions>true</extensions> 
     <configuration> 
      <instructions> 
      <Bundle-SymbolicName>messageprocessor</Bundle-SymbolicName> 
      <Private-Package>uk.co.example.messageprocessor.*</Private-Package> 
      <Import-Package>*</Import-Package> 
      </instructions> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-maven-plugin</artifactId> 
     <version>2.15.1.redhat-620133</version> 
     <configuration> 
      <useBlueprint>true</useBlueprint> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>io.fabric8</groupId> 
     <artifactId>fabric8-maven-plugin</artifactId> 
     <version>${fabric8.version}</version> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Однако, если я построю и перераспределять, Предохранитель не в состоянии решить depencency. В журналах я вижу следующее:

Bundle messageprocessor is waiting for dependencies [(&(component=netty4)(objectClass=org.apache.camel.spi.ComponentResolver))] 

Unable to start blueprint container for bundle messageprocessor due to unresolved dependencies [(&(component=netty4)(objectClass=org.apache.camel.spi.ComponentResolver))] 
java.util.concurrent.TimeoutException 
    at org.apache.aries.blueprint.container.BlueprintContainerImpl$1.run(BlueprintContainerImpl.java:336)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2] 
    at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2] 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_65] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_65] 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)[:1.8.0_65] 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)[:1.8.0_65] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_65] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_65] 
    at java.lang.Thread.run(Thread.java:745)[:1.8.0_65] 

У кого-нибудь есть идеи о том, что мне не хватает?

ответ

0

Ничего, я понял, что мой ПОМ был слишком сложным. В попытке успокоить разработчика Developer Studio я добавил Dependency Management. Как только я восстановил образец и снова попытался с чистой начальной точки, у меня получилось более чистое решение, которое работает без Менеджера зависимостей.

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>uk.co.example</groupId> 
    <artifactId>messageprocessor</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>bundle</packaging> 
    <name>Camel Blueprint Route</name> 
    <properties> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    <fabric8.profile>example-messageprocessor</fabric8.profile> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-core</artifactId> 
     <version>2.15.1.redhat-620133</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-blueprint</artifactId> 
     <version>2.15.1.redhat-620133</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.10</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.7.10</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-test-blueprint</artifactId> 
     <version>2.15.1.redhat-620133</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-netty4</artifactId> 
     <version>2.15.1.redhat-620133</version> 
    </dependency> 
    </dependencies> 
    <repositories> 
    <repository> 
     <releases> 
     <enabled>true</enabled> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>release.fusesource.org</id> 
     <name>FuseSource Release Repository</name> 
     <url>http://repo.fusesource.com/nexus/content/repositories/releases</url> 
    </repository> 
    <repository> 
     <releases> 
     <enabled>true</enabled> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>ea.fusesource.org</id> 
     <name>FuseSource Community Early Access Release Repository</name> 
     <url>http://repo.fusesource.com/nexus/content/groups/ea</url> 
    </repository> 
    </repositories> 
    <pluginRepositories> 
    <pluginRepository> 
     <releases> 
     <enabled>true</enabled> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>release.fusesource.org</id> 
     <name>FuseSource Release Repository</name> 
     <url>http://repo.fusesource.com/nexus/content/repositories/releases</url> 
    </pluginRepository> 
    <pluginRepository> 
     <releases> 
     <enabled>true</enabled> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>ea.fusesource.org</id> 
     <name>FuseSource Community Early Access Release Repository</name> 
     <url>http://repo.fusesource.com/nexus/content/groups/ea</url> 
    </pluginRepository> 
    </pluginRepositories> 
    <build> 
    <defaultGoal>install</defaultGoal> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-maven-plugin</artifactId> 
     <version>2.15.1.redhat-620133</version> 
     <configuration> 
      <useBlueprint>true</useBlueprint> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <extensions>true</extensions> 
     <configuration> 
      <instructions> 
      <Bundle-SymbolicName>messageprocessor</Bundle-SymbolicName> 
      <Private-Package>uk.co.example.messageprocessor.*</Private-Package> 
      <Import-Package>*</Import-Package> 
      </instructions> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>io.fabric8</groupId> 
     <artifactId>fabric8-maven-plugin</artifactId> 
     <version>1.2.0.redhat-133</version> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Это, кажется, работает хорошо, хотя я должен удалить явное определение версии против Maven-расслоением-плагин.

Смежные вопросы