J'ai deux contextes de printemps déclarés dans ma demande - un pour les demandes Spring MVC, et une autre pour les demandes Flex/BlazeDS de messagebroker, mis en correspondance avec différents modèles-url:Spring: Accès à la WebApplicationContext correcte avec plusieurs distributeurs déclaré
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>flex</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
Une configuration de contexte commun est déclarée, (/WEB-INF/applicationContext.xml
), puis chacun des deux contextes a ses propres configurations déclarées en spring-mvc-servlet.xml
et flex-servlet.xml
respectivement.
Intérieur flex-servlet.xml
J'ai déclaré des haricots qui sont spécifiques au contexte flexible. Cependant, quand un appel arrive à http://localhost/messagebroker/*
je reçois des erreurs que ces haricots ne sont pas disponibles.
Le code en question est à l'intérieur d'un composant personnalisé ressort, donc des références directement le WebApplicationContext
afin d'accéder aux haricots déclarés:
public ISerializer getSerializer(Object source,boolean useAggressiveSerialization)
{
ServletContext ctx = FlexContext.getServletContext();
WebApplicationContext springContext = WebApplicationContextUtils.getRequiredWebApplicationContext(ctx);
String serializerBeanName = springContext.getBeanNamesForType(ISerializer.class);
}
Cette approche fonctionne quand je suis en cours d'exécution avec un seul contexte. Cependant, il doit également prendre en charge les contextes multiples en cours d'exécution.
Définition d'un point d'arrêt, je vois que la valeur de springContext
est le contexte racine, avec un seul configLocation - /WEB-INF/applicationContext.xml
J'asssuming que c'est le problème - comme ISerializer
que le code ci-dessus exige est déclarée en flex-servlet.xml
. Comment modifier le code ci-dessus pour prendre en charge les deux scénarios?
Comment modifier le code ci-dessus pour prendre en charge les deux scénarios? (Contexte unique et contextes multiples)?
EDIT: Le code ci-dessus se trouve dans un ManageableComponentFactoryBean, qui semble fonctionner comme une usine de haricots personnalisé. Il semble que l'interface ApplicationContextAware
n'est pas honorée sur les classes générées. Par exemple:
<bean id="dpHibernateRemotingAdapterComponentFactory"
class="org.springframework.flex.core.ManageableComponentFactoryBean">
<constructor-arg
value="org.dphibernate.adapters.RemotingAdapter" />
<property name="properties">
<value>
{"dpHibernate" :
{
"serializerFactory" : "org.dphibernate.serialization.SpringContextSerializerFactory"
}
}
</value>
</property>
</bean>
Le code cité ci-dessus se trouve à l'intérieur du org.dphibernate.serialization.SpringContextSerializerFactory
. La réalisation de cet outil SpringContextSerializerFactory
ApplicationContextAware
n'a aucun impact.
un bon utilisateur à savoir, +1 – Bozho
Cela a fait l'affaire! Merci beaucoup –
+1. Assez utile dans certains environnements. @Marty: si cela a résolu votre question, acceptez la réponse axtavt. –