Как интегрировать разделяемые библиотеки servicemix с помощью jbi-maven-plugin? - PullRequest
1 голос
/ 04 января 2012

Я использую ServiceMix 3.5 У меня есть несколько ServiceAssemblies, каждый для ServiceUnit.У сервисных модулей много общих библиотек, поэтому я отмечаю их в maven pom областью «предоставлено».Совместно используемая библиотека содержит все библиотеки, которые я хочу, чтобы сервисные единицы совместно использовали.Я построил в соответствии со следующими pav.xml maven, но эффект является простым исключением:

java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource в classloader org.apache.xbean.spring.context.FileSystemXmlApplicationContext

Что я могу сделать (возможно, с помощью jbi-maven-plugin), чтобы мои сервисные единицы могли использовать банки из общей библиотеки?

POM службы общих библиотек 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 службы общих библиотек 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>

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

1 Ответ

0 голосов
/ 12 января 2012

Я думаю, вы неправильно понимаете какую-то концепцию JBI Component / SharedLib / SA / SU или загрузчик классов, как работает JBI, пожалуйста, посмотрите здесь , чтобы получить более подробную информацию.

Я могу 'Чтобы понять, что вы имеете в виду под "модулем службы общих библиотек pom", как в спецификации JBI, SharedLib не должен иметь никакого модуля службы, он просто упоминается компонентом JBI, таким как servicemix-camel, все компоненты JMI servicemix ссылаются только на одинSharedLib по умолчанию, имя которой является servicemix-shared.

Класс org.apache.commons.dbcp.BasicDataSource взят из commons-dbcp.jar, но commons-dbcp.jar не входит в smx3.x стандартную службу sharedlib по умолчанию smx3.x-shared - $ {version} -installer.zip, поэтому по умолчанию все servicemix-camel su не могут видеть этот класс, если вы явно не добавите <library>your_shared_lib_name</library> в свой файл xbean.xml.

...