8
votes

Puis-je ignorer BeanCreationException et injecter NULL à la place?

Nous avons une situation où notre printemps file de certains haricots comprenant des classes Activemq construits avec Java 6. Notre application s'exécute sur les serveurs du client, nous ne pouvons donc pas garantir qu'ils ont installé Java 6 ou plus tard. S'ils arrivent à avoir Java 5, l'application ne peut pas démarrer à cause de BeanCreattionException S avec les classes qui dépendent de ActiveMQ (Cause root étant un non supportéClassVersionError ).

Donc, ma question est, y a-t-il un moyen d'ignorer un haricèrentexception et de commencer toujours l'application? Je souhaite pouvoir afficher un message d'erreur indiquant qu'elles ont besoin d'installer Java 6 ou plus tard, mais que l'application ne peut même pas commencer, je n'ai jamais eu la chance de le faire.

My Hunch est qu'il n'ya aucun moyen de le faire, car le printemps doit être capable de garantir que ma demande est construite correctement après l'initialisation, mais je pensais que je demanderais de toute façon. Toute autre suggestion pour accomplir mon objectif final serait également utile et appréciée.

Nous utilisons le printemps 3.0.6

Merci!


0 commentaires

3 Réponses :


0
votes

Tout d'abord, tous les jets qui sont une sous-classe de java.lang.error sont généralement considérés comme non récupérables. Donc, alors qu'il est possible de les attraper, Il est fortement découragé :

Un Error est une sous-classe de lancée qui indique de graves problèmes qu'une application raisonnable ne devrait pas essayer d'attraper. La plupart des erreurs de ce type sont des conditions anormales.

Cependant, si tout ce que vous allez faire est d'afficher un message d'erreur, vous devriez être capable de s'en tirer avec.

Pour revenir à votre question, je suggère Création d'une implémentation de interface Factybean , qui essaierait de charger les classes ActiveMQ. Si cela fonctionne, il peut renvoyer l'objet approprié de Factorybean.getObject . Si elle échoue (via un non supportéClassversionError ), il peut renvoyer soit un null , ou un autre objet représentant cette condition.


1 commentaires

Merci, cela semble travailler pour moi. J'ai choisi cela comme la réponse puisqu'il s'agissait d'abord de suggérer FondsBean et ne m'a pas demandé de mettre à niveau le printemps.



0
votes

Vous pouvez créer un haricot d'usine et laisser créer le haricot Activemq. Si cela ne peut pas être initialisé, l'usine pourrait renvoyer une implémentation mannequin / maxe afin que les choses ne se cassent pas. Plus tard, vous pourriez demander à l'usine si tout s'est bien passé.

http: // static.springsource.org/spring/docs/2.5.x/reference/beans.html#Beans-Factory-Extension-FactoryBean


0 commentaires

4
votes

Si vous pouvez passer à Spring 3.1 (Stable), profitez de la configuration Java: xxx

ou: xxx

plus vieux Versions du ressort FactoryBean pourrait être utilisé pour implémenter la même logique. Au lieu de retourner null Vous pouvez également renvoyer une fausse implémentation que vous pouvez découvrir plus tard et avertir l'utilisateur lorsque l'application tente de l'utiliser.


0 commentaires