8

Spring が、Java 6 で構築された ActiveMQ クラスを含むいくつかの Bean を接続する状況があります。アプリケーションは顧客のサーバーで実行されるため、Java 6 以降がインストールされていることを保証できません。BeanCreationExceptionたまたま Java 5 を使用している場合、ActiveMQ に依存するクラスを持つ が原因で、アプリケーションを起動できません(根本原因はUnsupportedClassVersionErrorです)。

私の質問は、を無視しBeanCreationExceptionてアプリケーションを起動する方法はありますか? Java 6 以降をインストールする必要があるというエラー メッセージを表示できるようにしたいのですが、アプリケーションを起動することさえできないため、これを行う機会がありません。

私の推測では、Spring は初期化後にアプリケーションが適切にビルドされることを保証できる必要があるため、これを行う方法はありませんが、とにかく尋ねてみようと思いました。私の最終目標を達成する方法についての他の提案も役に立ち、感謝しています。

Spring 3.0.6を使用しています

ありがとう!

4

3 に答える 3

4

Spring 3.1(安定版)にアップグレードできる場合は、Java構成を利用してください。

@Bean
public SomeBean public someBean() {
    if(isEverythingOkWithJavaVersion()) {
        return new CorrectBean();
    } else {
        return null;
    }
}

また:

@Bean
public SomeBean public someBean() {
    try {
        return new CorrectBean();
    } catch(UnsupportedClassVersionError e) {
        log.warn("", e);
        return null;
    }
}

古いバージョンのSpringFactoryBeanでは、同じロジックを実装するために使用される場合があります。返す代わりに、null後で発見してアプリケーションが使用しようとしたときにユーザーに警告できる偽の実装を返すこともできます。

于 2012-01-17T23:06:47.610 に答える
0

まず、のサブクラスであるスローアブルは、java.lang.Error通常、回復不能と見なされます。したがって、それらを捕まえることは可能ですが、強くお勧めしません

AnErrorはそのサブクラスでありThrowable、妥当なアプリケーションがキャッチしようとしてはならない重大な問題を示します。そのようなエラーのほとんどは異常な状態です。

ただし、エラーメッセージを表示するだけであれば、問題を回避できるはずです。

質問に戻るために、ActiveMQクラスをロードしようとするSpringのインターフェースの実装を作成することをお勧めします。FactoryBean動作する場合は、から適切なオブジェクトを返すことができますFactoryBean.getObject。(catchを介して)失敗した場合は、、またはその状態を表す他のオブジェクトをUnsupportedClassVersionError返すことができます。null

于 2012-01-17T23:06:00.373 に答える
0

ファクトリBeanを作成して、実際のActiveMQBeanを作成させることができます。初期化できない場合、ファクトリはダミー/モックの実装を返す可能性があるため、問題が発生することはありません。後で、すべてがうまくいったかどうかを工場に尋ねることができます。

http://static.springsource.org/spring/docs/2.5.x/reference/beans.html#beans-factory-extension-factorybean

于 2012-01-17T23:06:24.210 に答える