2012-01-17 7 views
8

私たちのSpringはJava 6で構築されたActiveMQクラスを含むいくつかのBeanを結びつける状況があります。私たちのアプリケーションは顧客のサーバー上で動作するため、Java 6以降がインストールされているとは保証できません。 Java 5を使用すると、BeanCreationExceptionがActiveMQに依存するクラス(根本原因はUnsupportedClassVersionError)のため、アプリケーションを起動できません。BeanCreationExceptionを無視し、代わりにnullを挿入できますか?

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

春は私のアプリケーションが初期化後に適切に構築されることを保証する必要があるので、これを行う方法はありませんが、私はとにかく尋ねると思いました。私の最終目標を達成するためのその他の提案は、参考になり、高く評価されます。

私たちは春の3.0.6

感謝を使用しています!

答えて

0

最初に、java.lang.Errorのサブクラスであるスロー・アローブは、一般的には回復不能であるとみなされます。だから、it's strongly discouraged、それはそれらをキャッチすることが可能ですながら:

Errorは、合理的なアプリケーションがキャッチすべきではない重大な問題を示しThrowableのサブクラスです。そのようなエラーの多くは異常な状態です。

ただし、エラーメッセージを表示するだけであれば、それを取り除くことができます。

あなたの質問に戻るには、私はFactoryBeanインターフェイスのcreating an implementationのActiveMQクラスを読み込もうとします。それが動作すれば、FactoryBean.getObjectから適切なオブジェクトを返すことができます。失敗した場合(捕捉されたUnsupportedClassVersionError)、null、またはその状態を表す他のオブジェクトを戻すことができます。

+0

ありがとう、これは私のために働くようです。私はFactoryBeanを最初に提案していたので、これを答えとして選んだので、Springをアップグレードするように頼んでいませんでした。 –

4

あなたは春3.1(安定)にアップグレードすることができた場合は、Java設定を活用する:

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

か:春FactoryBeanの古いバージョンでは

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

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

関連する問題