0

非常に単純な ESB アプリケーションを Apache ServiceMix (Fuse ESB) にデプロイしようとしていますが、「AggregationStrategy」インターフェイスを使用しようとするところまではすべて正常に動作します。特に EIP とアグリゲーター パターンを使用して概念実証を構築していますが、NoClassDefFound エラーが原因でアーティファクトをデプロイできません。典型的なクラスの読み込みの問題のように見えますが、解決方法についてのアイデアがありません。サービスユニット(servicemix-camelタイプ)へのcamel-core依存関係の追加と削除の両方を試しました。

アプリケーションの基礎はここにあります。ルート定義を次のように変更しました。

public void configure() {
        from("activemq:test2").split(xpath("/notes/note")).parallelProcessing().process(new NoteProcessor()).to("activemq:test3");

        from("activemq:test3").aggregate(header("id"), new MyAggregationStrategy()).completionTimeout(3000).to("activemq:test");
    }

私のカスタム AggregationStrategy は次のようになります。

package com.softwarepassion.tutorial.camel;

import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.processor.aggregate.AggregationStrategy;

public class MyAggregationStrategy implements AggregationStrategy {

    public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
        Message newIn = newExchange.getIn();
        String oldBody = oldExchange.getIn().getBody(String.class);
        String newBody = newIn.getBody(String.class);
        newIn.setBody(oldBody + newBody);
        return newExchange;
    }
}

通常の ServiceMix と FuseESB で次のエラーが発生しました。

07:50:49,625 | エラー | 使用-01-11/デプロイ | DefaultComponent
| | ? ? | | 151 - サービスミックス共通 - 2011.02.1.fuse-02-11 | 「テンプレート」という名前の Bean の作成中にエラーが発生しました: Bean の初期化に失敗しました。ネストされた例外は org.springframework.beans.factory.BeanCreationException: 'camel' という名前の Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は org.springframework.beans.factory.BeanCreationException: 'com.softwarepassion.tutorial.camel.MyRouteBuilder' という名前の Bean 作成エラーです: ClassLoader からの Bean クラス [com.softwarepassion.tutorial.camel.MyRouteBuilder] の宣言されたコンストラクターの解決[[org.apache.xbean.classloader.JarFileClassLoader: name=org.apache.xbean.spring.context.FileSystemXmlApplicationContext@1c4d3b6 urls=[ファイル:/home/kris/apache-servicemix-4.4. 1-fuse-01-11/data/jbi/tutorial-camel-sa/sus/tutorial-camel-su/] 親=[[org.apache.xbean.classloader.JarFileClassLoader: 名前=SU 親クラスローダーの URL=[ ]parent=[231.0、[camel-spring (org.apache.camel.camel-spring)] の場合は BundleDelegatingClassLoader、[camel-cxf (org.apache.camel.camel-cxf)] の場合は BundleDelegatingClassLoader、[camel-cxf] の場合は BundleDelegatingClassLoader -transport (org.apache.camel.camel-cxf-transport)]]]]]] に失敗しました。ネストされた例外は java.lang.NoClassDefFoundError: org/apache/camel/processor/aggregate/AggregationStrategy 07:50:49,627 | です。エラー | 使用-01-11/デプロイ | ServiceAssemblyインストーラー | ? [camel-cxf (org.apache.camel.camel-cxf)] の BundleDelegatingClassLoader、[camel-cxf-transport (org.apache.camel.camel-cxf-transport)]]]]] の BundleDelegatingClassLoader が失敗しました。ネストされた例外は java.lang.NoClassDefFoundError: org/apache/camel/processor/aggregate/AggregationStrategy 07:50:49,627 | です。エラー | 使用-01-11/デプロイ | ServiceAssemblyインストーラー | ? [camel-cxf (org.apache.camel.camel-cxf)] の BundleDelegatingClassLoader、[camel-cxf-transport (org.apache.camel.camel-cxf-transport)]]]]] の BundleDelegatingClassLoader が失敗しました。ネストされた例外は java.lang.NoClassDefFoundError: org/apache/camel/processor/aggregate/AggregationStrategy 07:50:49,627 | です。エラー | 使用-01-11/デプロイ | ServiceAssemblyインストーラー | ?
? | | 147 - org.apache.servicemix.jbi.deployer - 1.5.1.fuse-01-11 | SU のデプロイ中にエラーが発生しました tutorial-camel-su

4

2 に答える 2

2

レガシー/死んだJBIを使用しないでください。 http://gnodet.blogspot.com/2010/12/thoughts-about-servicemix.html

Camel アーキタイプを使用して、ServiceMix にデプロイする新しい OSGi プロジェクトを作成します。アーキタイプのリストはこちら http://camel.apache.org/camel-maven-archetypes.html

たとえば、camel-archetype-spring-dm または camel-archetype-blueprint

于 2011-12-14T04:49:36.547 に答える
0

上記の問題の解決策を探している人のために、私はついにここで、OSGIタイプのデプロイメントに切り替える必要があることを発見しました。動作中のcamel-osgiサンプルプロジェクトは、FuseESBインストールのルートにある「examples」ディレクトリ内にあります。

于 2011-12-13T13:48:04.560 に答える