2012-09-25 35 views
3

我嘗試開發Apache ServiceMix處理Web服務的入門應用程序。什麼是一個正確的方式部署到ServiceMix的osgi包?

1)I構建應用程序(使用 'MNV安裝' 命令)

2)將其部署到ServiceMix的(使用「karaf @根>的OSGi:安裝MVN:com.company/ws-test-fuse/ 1.0.0快照」在服務器控制檯命令)

3)看它是怎麼安裝( '的OSGi:列表')

[ 157] [Installed ] [   ] [  ] [ 60] A Camel Spring Route (1.0.0.SNAPSHOT) 

4)我嘗試啓動應用程序

[email protected]>osgi:start 157 

我得到這個:

org.osgi.framework.BundleException: Unresolved constraint in bundle com.company.ws-test-fuse [157]: Unable to resolve 157.0: missing requirement [157.0] package; (&(package=commonj.sdo)(version>=2.1.0)(!(version>=3.0.0))) 

什麼是安裝包,這樣所有的Maven依賴得到自動下載並安裝一個正確的方法是什麼?

另外,我說的是,所有的依賴關係都將作爲osgi-bundles部署到osgi-container?

我的pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
    license agreements. See the NOTICE file distributed with this work for additional 
    information regarding copyright ownership. The ASF licenses this file to 
    You under the Apache License, Version 2.0 (the "License"); you may not use 
    this file except in compliance with the License. You may obtain a copy of 
    the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
    by applicable law or agreed to in writing, software distributed under the 
    License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
    OF ANY KIND, either express or implied. See the License for the specific 
    language governing permissions and limitations under the License. --> 
<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/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.company</groupId> 
    <artifactId>ws-test-fuse</artifactId> 
    <packaging>bundle</packaging> 
    <version>1.0.0-SNAPSHOT</version> 

    <name>A Camel Spring Route</name> 
    <url>http://www.myorganization.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    </properties> 

    <repositories> 
     <repository> 
      <id>release.fusesource.org</id> 
      <name>FuseSource Release Repository</name> 
      <url>http://repo.fusesource.com/nexus/content/repositories/releases</url> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
     </repository> 
     <repository> 
      <id>snapshot.fusesource.org</id> 
      <name>FuseSource Snapshot Repository</name> 
      <url>http://repo.fusesource.com/nexus/content/repositories/snapshots</url> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
      <releases> 
       <enabled>false</enabled> 
      </releases> 
     </repository> 
     <repository> 
      <id>ea.fusesource.org</id> 
      <name>FuseSource Early Access Repository</name> 
      <url>http://repo.fusesource.com/nexus/content/groups/ea</url> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
     </repository> 
    </repositories> 

    <pluginRepositories> 
     <pluginRepository> 
      <id>release.fusesource.org</id> 
      <name>FuseSource Release Repository</name> 
      <url>http://repo.fusesource.com/nexus/content/repositories/releases</url> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
     </pluginRepository> 
     <pluginRepository> 
      <id>snapshot.fusesource.org</id> 
      <name>FuseSource Snapshot Repository</name> 
      <url>http://repo.fusesource.com/nexus/content/repositories/snapshots</url> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
      <releases> 
       <enabled>false</enabled> 
      </releases> 
     </pluginRepository> 
     <pluginRepository> 
      <id>ea.fusesource.org</id> 
      <name>FuseSource Early Access Repository</name> 
      <url>http://repo.fusesource.com/nexus/content/groups/ea</url> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
     </pluginRepository> 
    </pluginRepositories> 

    <dependencies> 

     <!-- Core --> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-core</artifactId> 
      <version>2.9.0.fuse-7-061</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-spring</artifactId> 
      <version>2.9.0.fuse-7-061</version> 
     </dependency> 

     <!-- Apache Cxf --> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-cxf</artifactId> 
      <version>2.9.0.fuse-7-061</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-jetty</artifactId> 
      <version>2.9.0.fuse-7-061</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-transports-http-jetty</artifactId> 
      <version>2.5.0.fuse-7-061</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-databinding-sdo</artifactId> 
      <version>2.5.0.fuse-7-061</version> 
     </dependency> 


     <!-- Apache tuscany SDO --> 
     <dependency> 
      <groupId>org.apache.tuscany.sdo</groupId> 
      <artifactId>tuscany-sdo-api-r2.1</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tuscany.sdo</groupId> 
      <artifactId>tuscany-sdo-impl</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tuscany.sdo</groupId> 
      <artifactId>tuscany-sdo-lib</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tuscany.sdo</groupId> 
      <artifactId>tuscany-sdo-tools</artifactId> 
      <version>1.1.1</version> 
     </dependency> 

     <!-- SDO Support --> 

     <dependency> 
      <groupId>org.eclipse.xsd</groupId> 
      <artifactId>xsd</artifactId> 
      <version>2.2.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.xsd</groupId> 
      <artifactId>xsd</artifactId> 
      <version>2.2.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.emf</groupId> 
      <artifactId>ecore</artifactId> 
      <version>2.2.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.emf</groupId> 
      <artifactId>ecore-change</artifactId> 
      <version>2.2.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.emf</groupId> 
      <artifactId>ecore-xmi</artifactId> 
      <version>2.2.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.emf</groupId> 
      <artifactId>common</artifactId> 
      <version>2.2.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.emf</groupId> 
      <artifactId>codegen-ecore</artifactId> 
      <version>2.2.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.emf</groupId> 
      <artifactId>codegen</artifactId> 
      <version>2.2.3</version> 
     </dependency> 
     <dependency> 
      <groupId>backport-util-concurrent</groupId> 
      <artifactId>backport-util-concurrent</artifactId> 
      <version>3.0</version> 
     </dependency> 


     <!-- logging --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.16</version> 
     </dependency> 

     <!-- testing --> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-test</artifactId> 
      <version>2.9.0.fuse-7-061</version> 
      <scope>test</scope> 
     </dependency> 

    </dependencies> 

    <build> 
     <defaultGoal>install</defaultGoal> 

     <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> 

      <!-- allows the route to be ran via 'mvn camel:run' --> 
      <plugin> 
       <groupId>org.apache.camel</groupId> 
       <artifactId>camel-maven-plugin</artifactId> 
       <version>2.9.0.fuse-7-061</version> 
      </plugin> 

      <!-- Maven bundle plugin --> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <version>2.3.7</version> 
       <extensions>true</extensions> 
       <configuration> 
        <instructions> 
         <Import-Package>*,org.apache.camel.osgi</Import-Package> 
        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

回答

4

另一種方法是使用FAB部署到ServiceMix的(你需要安裝FAB)/保險絲ESB(自帶FAB)。

FAB能夠理解您的maven pom.xml文件並在部署時部署所需的捆綁包。我張貼了更多的細節和視頻一些鏈接在: http://www.davsclaus.com/2012/08/osgi-deployment-made-easy-with-fab.html

另一種方法是創建一個features.xml文件,並使用功能安裝應用程序。然後在功能文件中,您可以指定應用程序所需的osgi軟件包。您可以參考其他功能等。例如,您可以使用單個命令安裝Camel組件。例如安裝駱駝FTP組件,您可以運行:

features:install camel-ftp 

所以,如果你有你的應用程序中的功能,你可以做類似。

+0

嗯,我有使用FAB的可能性,但是一旦我嘗試運行它,就會毀掉我的FuseESB服務器實例。 (在FAB安裝過程中它會失敗,當我重新啓動服務器時,它會啓動類似'Starting Fuse server'但沒有響應的東西)。 – snowindy

+0

但FAB和FuseESB並非如此。最糟糕的是我不明白ServiceMix如何管理依賴關係的原理。例如,'mvn dependency:tree'顯示完整的依賴關係樹。樹很大。儘管如此,我仍然試圖安裝它們。他們中的許多人並沒有從像org.osgi.framework.BundleException這樣的解釋開始:bundle org.apache.camel中的未解決的約束。camel-core-osgi [199]:無法解析199.0:缺少requireme nt [199.0]包; (&(包= org.osgi.service.event)(版本> = 1.2.0)(!(版本> = 2.0.0)))」。儘管如此,dep樹中沒有'org.osgi.service.event' – snowindy

+0

您能解釋一下哪些代碼真的有用,哪些代碼是可選的?不能相信你將整個樹木部署到tre容器。我錯過了什麼嗎? – snowindy

2

Karaf不分析你的pom.xml,以解決依賴關係必須與功能手動安裝:安裝或捆綁:安裝。 F.ex.你的情況

bundle:install mvn:org.eclipse.persistence/com.springsource.commonj.sdo/2.1.1 
+0

這裏的一個問題是,在他的Maven項目中,SDO是2.2.3版本,並且正在安裝的軟件包是不同的2.1.1版本。 –

+0

你可以使用wrap來包含實際上並不是捆綁包的jar,就像這樣換行:mvn:... – white

相關問題