1

ServiceMix 3.5 を使用しています。複数の ServiceAssemblies があり、それぞれが ServiceUnit 用です。サービスユニットには多くのライブラリが共通しているため、maven pom で「提供済み」のスコープでマークします。共有ライブラリには、サービス ユニットで共有するすべてのライブラリが含まれています。次のmaven pom.xmlに従って構築しましたが、その効果は単純な例外です:

java.lang.ClassNotFoundException: クラスローダー org.apache.xbean.spring.context.FileSystemXmlApplicationContext の org.apache.commons.dbcp.BasicDataSource

サービスユニットが共有ライブラリの jar を利用できるようにするには、どうすればよいですか (おそらく jbi-maven-plugin を使用します)。

共有ライブラリ サービス ユニット pom:

<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>aaa.bbb</groupId>
  <artifactId>SHARED_SU</artifactId>
  <packaging>jbi-service-unit</packaging>
  <version>0.0.1-SNAPSHOT</version>

  <parent>
    <groupId>aaa.bbb</groupId>
    <artifactId>theParent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <build>
    <defaultGoal>install</defaultGoal>
    <plugins/>
  </build>

  <properties><componentName>servicemix-camel</componentName></properties>

  <dependencies>
  ...
  </dependencies>
</project>

共有ライブラリ サービス ユニット pom:

<?xml version="1.0" encoding="UTF-8"?>
<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>aaa.bbb</groupId>
  <artifactId>SHARED_SA</artifactId>
  <packaging>jbi-shared-library</packaging>
  <version>0.0.1-SNAPSHOT</version>

  <parent>
    <groupId>aaa.bbb</groupId>
    <artifactId>theParent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <dependencies>
    <dependency>
      <groupId>aaa.bbb</groupId>
      <artifactId>SHARED_SU</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>  
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.servicemix.tooling</groupId>
        <artifactId>jbi-maven-plugin</artifactId>
        <version>3.2.3</version>
        <extensions>true</extensions>
        <configuration>
          <type>service-assembly</type>
          <classLoaderDelegation>parent-first</classLoaderDelegation>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

共有ライブラリを使用する必要があるサービス ユニットの Pom:

<?xml version="1.0" encoding="UTF-8"?>
<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>aaa.bbb</groupId>
  <artifactId>theServiceUnit</artifactId>
  <packaging>jbi-service-unit</packaging>
  <version>0.0.1-SNAPSHOT</version>

  <parent>
    <groupId>aaa.bbb</groupId>
    <artifactId>theParent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <build>
    <defaultGoal>install</defaultGoal>
    <plugins>
      <plugin>
        <groupId>org.apache.servicemix.tooling</groupId>
        <artifactId>jbi-maven-plugin</artifactId>
        <version>3.2.3</version>
        <extensions>true</extensions>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    ... <!-- all "PROVIDED" in scope-->
  <properties>
    <componentName>servicemix-camel</componentName>
  </properties>
</project>

サービス ユニットのサービス アセンブリのポン

<?xml version="1.0" encoding="UTF-8"?>
<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>aaa.bbb</groupId>
  <artifactId>theServiceAssembly</artifactId>
  <packaging>jbi-service-assembly</packaging>
  <version>0.0.1-SNAPSHOT</version>

  <parent>
    <groupId>aaa.bbb</groupId>
    <artifactId>theParent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <dependencies>
    <dependency>
      <groupId>aaa.bbb</groupId>
      <artifactId>theServiceUnit</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.servicemix.tooling</groupId>
        <artifactId>jbi-maven-plugin</artifactId>
        <version>3.2.3</version>
        <extensions>true</extensions>
        <configuration>
          <type>service-assembly</type>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
4

1 に答える 1

0

JBI Component / SharedLib / SA / SUまたはクラスローダーのJBIの動作の概念を誤解していると思います。詳細については、こちらをご覧ください。

「共有ライブラリサービスユニットpom」の意味がわかりません。JBI仕様によると、SharedLibにはサービスユニットを含めるべきではありません。servicemix-camel、すべてのservicemixJBIコンポーネントなどのJBIコンポーネントによって参照されるだけです。 servicemix-sharedという名前のデフォルトのSharedLibを1つだけ参照してください。

クラスorg.apache.commons.dbcp.BasicDataSourceはcommons-dbcp.jarからのものですが、commons-dbcp.jarはsmx3.xのデフォルトのsharedlib servicemix-shared-$ {version} -installer.zipに含まれていないため、デフォルト<library>your_shared_lib_name</library>では、SUのxbean.xmlを明示的に追加しない限り、すべてのservicemix-camelsuはこのクラスを表示できません。

于 2012-01-11T20:15:31.223 に答える